100 lines
2.2 KiB
C
100 lines
2.2 KiB
C
|
#pragma once
|
|||
|
|
|||
|
#include "XNCore_global.h"
|
|||
|
#include "XNType.h"
|
|||
|
#include <vector>
|
|||
|
|
|||
|
namespace XNSim {
|
|||
|
/**
|
|||
|
* @brief 自定义字节数组容器类
|
|||
|
* @details 提供类似QByteArray的功能,用于处理二进制数据
|
|||
|
*/
|
|||
|
class XNByteArray {
|
|||
|
public:
|
|||
|
XNByteArray() = default;
|
|||
|
explicit XNByteArray(XN_SIZE size) : data_(size) {}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 从原始数据构造
|
|||
|
* @param buffer 原始数据缓冲区
|
|||
|
* @param size 数据大小
|
|||
|
*/
|
|||
|
XNByteArray(const XN_UINT8 *buffer, XN_SIZE size)
|
|||
|
: data_(buffer, buffer + size) {}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取数据指针
|
|||
|
* @return 数据指针
|
|||
|
*/
|
|||
|
XN_UINT8 *data() { return data_.data(); }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取常量数据指针
|
|||
|
* @return 常量数据指针
|
|||
|
*/
|
|||
|
const XN_UINT8 *data() const { return data_.data(); }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取数据大小
|
|||
|
* @return 数据大小
|
|||
|
*/
|
|||
|
XN_SIZE size() const { return data_.size(); }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 调整大小
|
|||
|
* @param size 新大小
|
|||
|
*/
|
|||
|
void resize(XN_SIZE size) { data_.resize(size); }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 清空数据
|
|||
|
*/
|
|||
|
void clear() { data_.clear(); }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 追加数据
|
|||
|
* @param buffer 要追加的数据
|
|||
|
* @param size 数据大小
|
|||
|
*/
|
|||
|
void append(const XN_UINT8 *buffer, XN_SIZE size) {
|
|||
|
XN_SIZE oldSize = data_.size();
|
|||
|
data_.resize(oldSize + size);
|
|||
|
std::memcpy(data_.data() + oldSize, buffer, size);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 追加另一个XNByteArray
|
|||
|
* @param other 要追加的XNByteArray
|
|||
|
*/
|
|||
|
void append(const XNByteArray &other) { append(other.data(), other.size()); }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取指定位置的字节
|
|||
|
* @param index 索引
|
|||
|
* @return 字节值
|
|||
|
*/
|
|||
|
XN_UINT8 &operator[](XN_SIZE index) { return data_[index]; }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 获取指定位置的字节(常量版本)
|
|||
|
* @param index 索引
|
|||
|
* @return 字节值
|
|||
|
*/
|
|||
|
const XN_UINT8 &operator[](XN_SIZE index) const { return data_[index]; }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 检查是否为空
|
|||
|
* @return 是否为空
|
|||
|
*/
|
|||
|
XN_BOOL isEmpty() const { return data_.empty(); }
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 预分配空间
|
|||
|
* @param size 要预分配的大小
|
|||
|
*/
|
|||
|
void reserve(XN_SIZE size) { data_.reserve(size); }
|
|||
|
|
|||
|
private:
|
|||
|
std::vector<XN_UINT8> data_;
|
|||
|
};
|
|||
|
} // namespace XNSim
|