From 066e5987c515dfc34537d73ca9d2a81ddd1f9e1b Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 21 Oct 2018 13:37:27 +0800 Subject: =?UTF-8?q?*=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/Filesystem/je_buffer.h | 156 +++++++++++++++++++++++++++++++------- 1 file changed, 128 insertions(+), 28 deletions(-) (limited to 'src/libjin/Filesystem/je_buffer.h') diff --git a/src/libjin/Filesystem/je_buffer.h b/src/libjin/Filesystem/je_buffer.h index 11faf79..18a381d 100644 --- a/src/libjin/Filesystem/je_buffer.h +++ b/src/libjin/Filesystem/je_buffer.h @@ -4,61 +4,161 @@ #include #include +#include "../common/je_types.h" + namespace JinEngine { namespace Filesystem { - /** - * 在堆上分配指定空间的buffer - */ + /// + /// Data buffer allocated on heap. + /// class Buffer { public: - Buffer() : data(0), size(0) {} + /// + /// Buffer constructor. + /// + Buffer() + : mData(0) + , mSize(0) + { + } + + /// + /// Copy constructor. + /// + /// @param src Buffer source. + /// Buffer(const Buffer& src) { - delete[] data; - size = src.size; - data = new char[size]; - memcpy(data, src.data, size); + delete[] mData; + mSize = src.mSize; + mData = new byte[mSize]; + memcpy(mData, src.mData, mSize); } - Buffer(void* d, int s) + + /// + /// Buffer constructor. + /// + /// @param data Buffer data. + /// @param size Size of buffer. + /// + Buffer(void* data, int size) { - data = new char[size]; - memcpy(data, d, size); - size = s; + mSize = size; + mData = new byte[mSize]; + memcpy(mData, data, mSize); } - Buffer(size_t s) + + /// + /// Buffer constructor. + /// + /// @param size Size of data. + /// + Buffer(size_t size) { - data = new char[s]; - memset(data, 0, s); - size = s; + mData = new byte[size]; + memset(mData, 0, size); + mSize = size; } + + /// + /// Buffer destructor. + /// ~Buffer() { - delete[] data; - size = 0; + delete[] mData; + mSize = 0; } + + /// + /// Set buffer data. + /// + /// @param data Buffer data. + /// @param size Size of data. + /// + void set(byte* data, size_t size) + { + if (data == nullptr) + return; + if (mSize != size) + { + delete mData; + mData = new byte[size]; + } + mSize = size; + memcpy(mData, data, size); + } + + /// + /// Bind buffer data. + /// + /// @param data Buffer data. + /// @param size Size of buffer. + /// + void bind(byte* data, size_t size) + { + if (mData != nullptr) + delete mData; + mSize = size; + mData = data; + } + + /// + /// Buffer assignment. + /// + /// @param buffer Buffer to copy. + /// void operator = (const Buffer& buffer) { - delete[] data; - size = buffer.size; - data = new char[size]; - memcpy(data, buffer.data, size); + delete[] mData; + mSize = buffer.mSize; + mData = new byte[mSize]; + memcpy(mData, buffer.mData, mSize); } + /// + /// Get data addresss. + /// + /// @return Data address. + /// + const byte* operator &() + { + return mData; + } + + /// + /// Get data size. + /// + /// @return Size of data. + /// + const inline size_t size() + { + return mSize; + } + + /// + /// Clear data. + /// void clear() { - if (data == nullptr) + if (mData == nullptr) return; - free(data); - data = nullptr; + delete mData; + mData = nullptr; + mSize = 0; } - void* data; - unsigned int size; - + private: + byte* mData; + size_t mSize; + + // diasble new and delete + void* operator new(size_t t); + void operator delete(void*); + }; } // namespace Filesystem -- cgit v1.1-26-g67d0