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/Common/je_array.hpp | 77 +++++++++++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 20 deletions(-) (limited to 'src/libjin/Common/je_array.hpp') diff --git a/src/libjin/Common/je_array.hpp b/src/libjin/Common/je_array.hpp index 473bae8..361f1f0 100644 --- a/src/libjin/Common/je_array.hpp +++ b/src/libjin/Common/je_array.hpp @@ -3,77 +3,114 @@ namespace JinEngine { - /* 自动释放堆内存的在栈上创建的动态数组 */ + + /// + /// A array created on heap. + /// template class Array { public: - Array() : length(0), data(nullptr) {} + /// + /// Array constructor. + /// + Array() + : length(0) + , data(nullptr) + { + } + /// + /// Array constructor. + /// + /// @param l Length of array. + /// Array(int l) { length = l; data = new T[l]; } + /// + /// Array destructor. + /// ~Array() { delete[] data; length = 0; } + /// + /// Get address of data. + /// + /// @return Address of data. + /// T* operator &() { return data; } + /// + /// Get specific element of array. + /// + /// @return Element of array. + /// T& operator[](int index) { return data[index]; } - /* 绑定内存 */ - void bind(T* d, int len) + /// + /// Bind data with given data. + /// + /// @param data Data pointer. + /// @param length Length of data. + /// + void bind(T* data, int length) { if (data != nullptr) delete data; - data = d; - length = len; + this->data = data; + this->length = length; } - void add(T v) + /// + /// Add an element. + /// + /// @param v Value of element. + /// + void add(T value) { int len = length + 1; T* d = new T[len]; memcpy(d, data, size()); - d[length] = v; + d[length] = value; bind(d, len); } + /// + /// Get size of data in byte. + /// + /// @return Size of data in byte. + /// int size() { return sizeof(T) * length; } + /// + /// Get length of data. + /// + /// @return Count of data. + /// int count() { return length; } private: - /// - /// http://blog.jobbole.com/106923/ - /// new 堆内存创建对象过程 - /// 1. 调用 new 分配内存 - /// 2. 调用构造函数 - /// - /// new, delete方法用于分配和释放内存,不负责构造和析构 - /// + // Disable new and delete. void* operator new(size_t t); - - /// - /// Disable delete. - /// void operator delete(void* ptr); T * data; -- cgit v1.1-26-g67d0