From 96c89b000f7920960eab021358cbc6c67e97b200 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sat, 15 Jul 2023 00:27:06 +0800 Subject: [PATCH] renamed to DataArray instead of MemBlock --- .../io/{LoadMemBlock.h => LoadDataArray.h} | 8 +- .../io/{SaveMemBlock.h => SaveDataArray.h} | 6 +- inc/hgl/type/DataArray.h | 245 ++++++++++++++++++ inc/hgl/type/MemBlock.h | 180 ------------- src/CMakeLists.txt | 24 +- 5 files changed, 264 insertions(+), 199 deletions(-) rename inc/hgl/io/{LoadMemBlock.h => LoadDataArray.h} (63%) rename inc/hgl/io/{SaveMemBlock.h => SaveDataArray.h} (60%) create mode 100644 inc/hgl/type/DataArray.h delete mode 100644 inc/hgl/type/MemBlock.h diff --git a/inc/hgl/io/LoadMemBlock.h b/inc/hgl/io/LoadDataArray.h similarity index 63% rename from inc/hgl/io/LoadMemBlock.h rename to inc/hgl/io/LoadDataArray.h index fa587fa..12009c6 100644 --- a/inc/hgl/io/LoadMemBlock.h +++ b/inc/hgl/io/LoadDataArray.h @@ -1,13 +1,13 @@ #pragma once -#include +#include #include namespace hgl { /** - * 加载一个文件到内存块类中 + * 加载一个文件到数据阵列中 */ - template MemBlock *LoadFileToMemBlock(const OSString &filename) + template static DataArray *LoadFileToDataArray(const OSString &filename) { io::FileInputStream fis; @@ -16,7 +16,7 @@ namespace hgl const size_t file_size =fis.GetSize(); const size_t size =(file_size+sizeof(T)-1)/sizeof(T); - MemBlock *mb=new MemBlock(size); + DataArray *mb=new DataArray(size); fis.Read(mb->data(),file_size); diff --git a/inc/hgl/io/SaveMemBlock.h b/inc/hgl/io/SaveDataArray.h similarity index 60% rename from inc/hgl/io/SaveMemBlock.h rename to inc/hgl/io/SaveDataArray.h index 36a7a34..0cd1a88 100644 --- a/inc/hgl/io/SaveMemBlock.h +++ b/inc/hgl/io/SaveDataArray.h @@ -1,13 +1,13 @@ #pragma once -#include +#include #include namespace hgl { /** - * 保存一个内存块到文件 + * 保存一个数据阵列到文件 */ - template bool SaveMemBlockToFile(const OSString &filename,const MemBlock &mb) + template static bool SaveDataArrayToFile(const OSString &filename,const DataArray &mb) { const size_t size=mb.bytes(); diff --git a/inc/hgl/type/DataArray.h b/inc/hgl/type/DataArray.h new file mode 100644 index 0000000..01e88ee --- /dev/null +++ b/inc/hgl/type/DataArray.h @@ -0,0 +1,245 @@ +#pragma once + +#include +namespace hgl +{ + /** + * 数据阵列 + */ + template class DataArray + { + protected: + + T *items; + size_t count; + size_t alloc_count; + + public: + + size_t GetCount ()const{return count;} ///<取得数据数量(注:非字节数) + const size_t GetAllocCount()const{return alloc_count;} ///<取得已分配的阵列大小(注:非字节数) + const size_t GetBytes ()const{return count*sizeof(T);} ///<取得阵列已使用的字节数 + const size_t GetAllocBytes()const{return alloc_count*sizeof(T);} ///<取得阵列已分配空间字节数 + + T * GetData()const{return items;} + + public: + + T * begin (){return items;} ///<取得阵列起始地址指针 + T * end (){return items+count;} ///<取得阵列结束地址指针 + + const T * begin ()const{return items;} ///<取得阵列起始地址指针 + const T * end ()const{return items+count;} ///<取得阵列结束地址指针 + + public: + + /** + * 分配指定空间出来,供未来使用 + */ + void Alloc(size_t size) + { + if(size<=alloc_count) + return; + + alloc_count=power_to_2(size); + + if(!items) + items=(T *)hgl_malloc(alloc_count*sizeof(T)); + else + items=(T *)hgl_realloc(items,alloc_count*sizeof(T)); + } + + /** + * 设置阵列长度 + */ + void SetCount(size_t size) ///<设置阵列长度(注:非字节数) + { + Alloc(size); + + count=size; + } + + /** + * 增加阵列长度 + */ + void AddCount(size_t size) + { + SetCount(count+size); + } + + public: + + DataArray() + { + items=0; + count=0; + alloc_count=0; + } + + DataArray(size_t size) + { + if(size<=0) + items=0; + else + items=(T *)hgl_malloc(size*sizeof(T)); + + if(items) + { + count=size; + alloc_count=size; + } + else + { + count=0; + alloc_count=0; + } + } + + virtual ~DataArray() + { + Clear(); + } + + void Clear() + { + if(items) + hgl_free(items); + + count=0; + alloc_count=0; + } + + void ClearData() + { + count=0; + } + + void Zero() + { + if(items) + memset(items,0,alloc_count); + } + + /** + * 设置数据,请保证数据使用hgl_malloc分配,否则会因为释放函数不配对出现错误 + */ + void SetData(T *d,int s) + { + Clear(); + + items=d; + alloc_count=s; + count=s; + } + + /** + * 解除数据关联 + */ + void Unlink() + { + items=nullptr; + count=0; + alloc_count=0; + } + + /** + * 复制内存块中的数据 + * @param d 复制出来的数据指针 + * @param s 要复制出来的数据个数 + */ + void CopyData(const T *d,int s) + { + SetCount(s); + memcpy(items,d,s*sizeof(T)); + } + + /** + * 删除列表中的指定项,删除后将最后一个数据移到被删除的位置 + * @param index 要删除的数据项的索引值 + * @return 是否成功 + */ + bool Delete(int index) + { + if(count>0&&index>=0&&index0&&index>=0&&index=count)return(false); + + if(start<0) + { + number+=start; + start=0; + } + + if(start+number>count) + number=count-start; + + if(number<=0)return(false); + + count-=number; + + if(start()const + { + return items; + } + + T &operator[](int n) + { + return items[n]; + } + + const T &operator[](int n)const + { + return items[n]; + } + };//template class DataArray +}//namespace hgl diff --git a/inc/hgl/type/MemBlock.h b/inc/hgl/type/MemBlock.h deleted file mode 100644 index ba93a77..0000000 --- a/inc/hgl/type/MemBlock.h +++ /dev/null @@ -1,180 +0,0 @@ -#ifndef HGL_MEM_BLOCK_INCLUDE -#define HGL_MEM_BLOCK_INCLUDE - -#include -namespace hgl -{ - /** - * 内存块模版 - */ - template class MemBlock - { - protected: - - T *buf; - size_t cur_size; - size_t buf_size; - - public: - - size_t GetLength ()const{return cur_size;} ///<取得内存块长度(注:非字节数) - const size_t GetMaxLength ()const{return buf_size;} ///<取得内存块最大长度(注:非字节数) - const size_t GetBytes ()const{return cur_size*sizeof(T);} ///<取得内存块字节数 - const size_t GetMaxBytes ()const{return buf_size*sizeof(T);} ///<取得内存块最大字节数 - - T * begin (){return buf;} ///<取得内存块起始指针 - T * end (){return buf+cur_size;} ///<取得内存块结束地址指针 - - const T * begin ()const{return buf;} ///<取得内存块起始 - const T * end ()const{return buf+cur_size;} ///<取得内存块结束地址指针 - - /** - * 分配指定空间出来,供未来使用 - */ - void Malloc(size_t size) - { - if(size<=buf_size) - return; - - buf_size=power_to_2(size); - - if(!buf) - buf=(T *)hgl_malloc(buf_size*sizeof(T)); - else - buf=(T *)hgl_realloc(buf,buf_size*sizeof(T)); - } - - /** - * 设置当前数据长度 - */ - void SetLength(size_t size) ///<设置内存块长度(注:非字节数) - { - Malloc(size); - - cur_size=size; - } - - void AddLength(size_t size) - { - SetLength(cur_size+size); - } - - public: - - MemBlock() - { - buf=0; - cur_size=0; - buf_size=0; - } - - MemBlock(size_t size) - { - if(size<=0) - buf=0; - else - buf=(T *)hgl_malloc(size*sizeof(T)); - - if(buf) - { - cur_size=size; - buf_size=size; - } - else - { - cur_size=0; - buf_size=0; - } - } - - virtual ~MemBlock() - { - Clear(); - } - - void Clear() - { - if(buf) - hgl_free(buf); - - cur_size=0; - buf_size=0; - } - - void ClearData() - { - cur_size=0; - } - - void Zero() - { - if(buf) - memset(buf,0,buf_size); - } - - /** - * 设置数据,请保证数据使用hgl_malloc分配,否则会因为释放函数不配对出现错误 - */ - void SetData(T *d,int s) - { - Clear(); - - buf=d; - buf_size=s; - cur_size=s; - } - - /** - * 解除数据关联 - */ - void Unlink() - { - buf=nullptr; - cur_size=0; - buf_size=0; - } - - /** - * 复制内存块中的数据 - * @param d 复制出来的缓冲区指针 - * @param s 要复制出来的数据个数 - */ - void CopyData(T *d,int s) - { - SetLength(s); - memcpy(buf,d,s*sizeof(T)); - } - - T *data()const{return buf;} - T *GetData()const{return buf;} - - size_t length()const{return cur_size;} - size_t GetCount()const{return cur_size;} - - size_t bytes()const - { - return cur_size*sizeof(T); - } - - operator T *()const - { - return buf; - } - - T *operator ->()const - { - return buf; - } - - T &operator[](int n) - { - return buf[n]; - } - - const T &operator[](int n)const - { - return buf[n]; - } - };//template class MemBlock -}//namespace hgl -#endif//HGL_MEM_BLOCK_INCLUDE diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 46bc364..2a22fa1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -105,8 +105,8 @@ SET(IO_DATA_FILES ${IO_INCLUDE_PATH}/DataInputStream.h SET(IO_MEMORY_STREAM_FILES ${IO_INCLUDE_PATH}/MemoryInputStream.h ${IO_INCLUDE_PATH}/MemoryOutputStream.h) -SET(IO_MEM_BLOCK_FILES ${IO_INCLUDE_PATH}/LoadMemBlock.h - ${IO_INCLUDE_PATH}/SaveMemBlock.h) +SET(IO_DATA_ARRAY_FILES ${IO_INCLUDE_PATH}/LoadDataArray.h + ${IO_INCLUDE_PATH}/SaveDataArray.h) SET(IO_FILE_FILES ${IO_INCLUDE_PATH}/FileAccess.h ${IO_INCLUDE_PATH}/FileInputStream.h @@ -139,22 +139,22 @@ SOURCE_GROUP("IO\\Event" FILES ${INPUT_EVENT_FILES}) SOURCE_GROUP("IO\\Base" FILES ${IO_BASE_FILES}) SOURCE_GROUP("IO\\DataIOStream" FILES ${IO_DATA_FILES}) -SOURCE_GROUP("IO\\MemBlock" FILES ${IO_MEM_BLOCK_FILES}) +SOURCE_GROUP("IO\\DataArray" FILES ${IO_DATA_ARRAY_FILES}) SOURCE_GROUP("IO\\MemoryStream" FILES ${IO_MEMORY_STREAM_FILES}) SOURCE_GROUP("IO\\File" FILES ${IO_FILE_FILES}) SOURCE_GROUP("IO\\Jave" FILES ${IO_JAVA_FILES}) SOURCE_GROUP("IO\\Text" FILES ${IO_TEXT_FILES}) SOURCE_GROUP("ID\\StringList" FILES ${IO_STRING_LIST_FILES}) -SET(IO_SOURCE_FILES ${IO_BASE_FILES} - ${IO_DATA_FILES} - ${IO_MEM_BLOCK_FILES} - ${IO_MEMORY_STREAM_FILES} - ${IO_FILE_FILES} - ${IO_JAVA_FILES} - ${IO_TEXT_FILES} - ${IO_STRING_LIST_FILES} - ${INPUT_EVENT_FILES}) +SET(IO_SOURCE_FILES ${IO_BASE_FILES} + ${IO_DATA_FILES} + ${IO_DATA_ARRAY_FILES} + ${IO_MEMORY_STREAM_FILES} + ${IO_FILE_FILES} + ${IO_JAVA_FILES} + ${IO_TEXT_FILES} + ${IO_STRING_LIST_FILES} + ${INPUT_EVENT_FILES}) SET(FILESYSTEM_INCLUDE_PATH ${CMCORE_ROOT_INCLUDE_PATH}/hgl/filesystem)