【RLIB】内存流(Stream) 的简易C++实现
2012-02-02 15:46
351 查看
相关源码参见RLIB开源项目
下面是RLIB1.x的头文件:
下面是RLIB1.x的头文件:
namespace System { namespace IO { /// <summary> /// 提供字节序列的一般视图, 是所有流的基类 /// </summary> class export Stream { protected: // 流位置 ULONG m_pos; // 流大小 ULONG m_size; // 流已写长度 ULONG m_length; // 流指针 LPVOID m_ptr; public: /// <summary> /// 初始化 /// </summary> Stream():m_pos(0),m_size(0),m_length(0),m_ptr(NULL){/*Initialize*/}; /// <summary> /// 用内存指针、内存大小、实际长度初始化 /// </summary> Stream(LPVOID lpbuffer, ULONG size, ULONG len):m_pos(0){ this->m_ptr = lpbuffer; this->m_size = size; this->m_length = len; }; /// <summary> /// 获取当前流中的位置 /// </summary> inline ULONG GetPos() const{ return this->m_pos; }; /// <summary> /// 设置当前流中的位置 /// </summary> void SetPos(ULONG Pos); // 获取或设置当前流中的位置 __declspec(property(get = GetPos, put = SetPos)) ULONG Position; /// <summary> /// 获取流数据指针 /// </summary> inline LPVOID GetObjectData() const{ return this->m_ptr; } /// <summary> /// 设置流数据指针 /// </summary> inline void SetObjectData(LPVOID pData){ this->m_ptr = pData; }; // 获取或设置流数据指针 __declspec(property(get = GetObjectData, put = SetObjectData)) LPVOID ObjectData; /// <summary> /// 获取用字节表示的流大小 /// </summary> inline ULONG GetSize() const{ return this->m_size; }; /// <summary> /// 设置用字节表示的流大小 /// </summary> inline void SetSize(ULONG size){ this->m_size = size; }; // 获取或设置用字节表示的流大小 __declspec(property(get = GetSize, put = SetSize)) ULONG Size; /// <summary> /// 获取用字节表示的流长度 /// </summary> inline ULONG GetLength() const{ return this->m_length; }; /// <summary> /// 设置用字节表示的流长度 /// </summary> inline void SetLength(ULONG len){ this->m_length = len; }; // 获取用字节表示的流长度 __declspec(property(get = GetLength, put = SetLength)) ULONG Length; /// <summary> /// 从当前流中读取字节块并将数据写入 buffer 中 /// </summary> /// <returns> /// 写入缓冲区中的总字节数. 如果当前可用字节数不到所请求的字节数, /// 则这一总字节数可能小于所请求的字节数,或者如果在读取任何字节前已到达流的末尾则为零 /// 产生任何异常均返回-1 /// </returns> int Read(LPVOID buffer, int count) const; /// <summary> /// 使用从缓冲区读取的数据将字节块写入当前流 /// </summary> /// <returns>如果写操作成功,则流中的位置将提升写入的字节数</returns> void Write(LPVOID buffer, int count); /// <summary> /// 关闭当前流并释放与之关联的所有资源 /// </summary> void Close(){/*子类必须重写此方法*/}; }; /// <summary> /// 创建其支持存储区为内存的流 /// 但该流具有固定大小 /// </summary> class export MemoryStream:public Stream { public: /// <summary> /// 初始化指定大小的内存流 /// </summary> MemoryStream(ULONG); /// <summary> /// 负责内存流的回收 /// </summary> ~MemoryStream(); RLIB_ClassNewDel; public: /// <summary> /// 方法不被支持 /// </summary> inline void SetObjectData(LPVOID/* pData*/){}; // 获取流数据指针 __declspec(property(get = GetObjectData)) LPVOID ObjectData; /// <summary> /// 方法不被支持 /// </summary> inline void SetSize(ULONG/* size*/){}; // 获取用字节表示的流大小 __declspec(property(get = GetSize)) ULONG Size; /// <summary> /// 方法不被支持 /// </summary> inline void SetLength(ULONG/* len*/){}; // 获取用字节表示的流长度 __declspec(property(get = GetLength)) ULONG Length; /// <summary> /// 重写基类方法 /// 关闭当前流并释放与之关联的所有资源 /// </summary> void Close(); public: /// <summary> /// 获取内存流使用的内存池指针 /// </summary> /// <returns>该方法可能返回NULL</returns> static Memory *GetUsingPool(); /// <summary> /// 释放由 MemoryStream 占用的所有资源 /// </summary> static void Dispose(); }; /// <summary> /// 创建其支持存储区为内存的流 /// 但该流支持动态内存分配 /// </summary> class export BufferedStream:public MemoryStream { public: /// <summary> /// 使类可实例化 /// </summary> BufferedStream(ULONG size = sizeof(int)):MemoryStream(size){}; RLIB_ClassNewDel; public: /// <summary> /// 重载基类方法以支持动态内存分配 /// </summary> void Write(LPVOID buffer, int count); }; }; };
相关文章推荐
- 【RLIB】Socket类 的C++简易实现
- C++ StringBuilder 简易实现,多个对象共享同一内存
- 【RLIB】String 的简易C++实现
- 【RLIB】线程安全内存池(Memory) 的简易C++实现
- C/C++(2)实现txt数据读入内存/CPU缓存
- C++通过操作内存模拟序列化---实现多种类型的序列化(2)
- C++ 中 make_pair 的简易实现
- C++实现简易通讯录系统
- C++简单内存泄漏检查机制实现
- C/C++使用Lu键树实现智能指针及检查内存泄露
- C++ 简易string类实现(三)-抽离引用计数
- Protocol Buffers 中实现 ZeroCopyStream 来减少内存拷贝
- 内存映射文件详解-----C++实现(即一块内存和一个文件相映射对应)
- C++:重载全局new/delete实现跨平台多线程内存检测
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- C++ stringstream实现不同类型数据的转换
- 从内存布局看C++虚继承的实现原理
- C++ 中 vector 如何实现内存分配
- C++通过操作内存模拟序列化---实现多种类型的序列化(2)
- C++ 对象内存布局和多态实现原理