diff --git a/inc/hgl/filesystem/FileSystem.h b/inc/hgl/filesystem/FileSystem.h index 584bd4d..ada898d 100644 --- a/inc/hgl/filesystem/FileSystem.h +++ b/inc/hgl/filesystem/FileSystem.h @@ -33,7 +33,7 @@ namespace hgl bool SaveMemoryToFile(const OSString &,int64,const void *,int64); ///<保存一块内存到一个文件 bool IsDirectory(const os_char *); - inline bool IsDirectory(const OSString &str){return IsDirectory(str.c_str());} ///<判断这个名称是否是目录 + inline bool IsDirectory(const OSString &str){return IsDirectory(str.c_str());} ///<判断这个名称是否是目录 #if HGL_OS != HGL_OS_Windows bool IsLink(const os_char *); ///<判断这个名称是否是链接 diff --git a/inc/hgl/type/AccumMemoryManager.h b/inc/hgl/type/AccumMemoryManager.h index 79cc16e..85429c3 100644 --- a/inc/hgl/type/AccumMemoryManager.h +++ b/inc/hgl/type/AccumMemoryManager.h @@ -1,12 +1,13 @@ -#pragma once +#pragma once +#include #include namespace hgl { /** - * ۼڴ
- * ڲϷ̶ڴ飬̬ͳһͷŵ + * 累计内存管理
+ * 用于不断分配固定容量的内存块,但不动态调整,最后统一释放的情况。 */ class AccumMemoryManager { @@ -20,43 +21,44 @@ namespace hgl private: - int64 total_bytes=0; ///<ֽ - - DataArray block_list; - DataArray data_array; ///< + List block_list; ///<数据块列表 + DataArray data_array; ///<数据 public: AccumMemoryManager()=default; ~AccumMemoryManager()=default; - const int64 GetTotalBytes()const{return total_bytes;} - const int64 GetBlockCount()const{return block_list.GetCount();} + const int64 GetTotalBytes()const{return data_array.GetBytes();} ///<取得总共申请的内存总字节数 + const int64 GetBlockCount()const{return block_list.GetCount();} ///<取得内存数据块数量 - const void *Acquire(const int64 size) + Block *Acquire(const int64 size) ///<申请一块内存 { if(size<=0)return(nullptr); - Block b; + Block *b=block_list.Add(); - b.offset=total_bytes; - b.size=size; + b->offset =data_array.GetBytes(); + b->size =size; data_array.AddCount(size); - return data_array.GetPointer(b.offset); + return b; + } + + void *Access(const Block *b) ///<访问一块内存 + { + return b?data_array.GetPointer(b->offset):nullptr; } void Clear() { - total_bytes=0; block_list.Clear(); data_array.Clear(); } void Free() { - total_bytes=0; block_list.Free(); data_array.Free(); }