XNSim/XNCore/XNGlobalDefine/XNByteArray.h

100 lines
2.2 KiB
C
Raw Normal View History

#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