Block.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #ifndef __DAHUA_BLOCK_H__
  2. #define __DAHUA_BLOCK_H__
  3. #include "SharedPtr.h"
  4. #include "Infra/Function.h"
  5. #include <Infra/Defs.h>
  6. namespace Dahua {
  7. namespace Memory {
  8. /// 释放内存回调函数
  9. /// \param[in] data 需要释放的内存
  10. typedef Infra::TFunction1<void, uint8_t*> FreeFunc;
  11. /// 析构附加数据函数
  12. /// \param[in] data 附加数据内存指针 不能删除该内存
  13. typedef Infra::TFunction1<void, uint8_t*> UnInitExDataFunc;
  14. /// 构造附加数据函数
  15. /// \param[in] data 附加数据内存指针 不能删除该内存
  16. /// \param[in] data size 附加数据内存大小
  17. typedef Infra::TFunction2<void, uint8_t*, uint32_t> InitExDataFunc;
  18. /// 数据管理类
  19. /// 该类不主动申请内存 所有的内存均由外部生成,交给本类管理
  20. /// 外部不可主动释放该内存
  21. class INFRA_API CBlock
  22. {
  23. public:
  24. /// 构造函数
  25. CBlock();
  26. /// 复制构造函数
  27. CBlock(CBlock const& other);
  28. /// 赋值函数
  29. CBlock& operator=(CBlock const& other);
  30. /// 带参数的构造函数
  31. /// \param[in] data 数据指针 该内存由CBlock类托管,外部不允许释放
  32. /// \param[in] size 数据大小
  33. /// \param[in] extraSize 附加数据大小
  34. /// \param[in] freeCB 内存释放函数 若为空则不释放
  35. CBlock(uint8_t* data, uint32_t size, uint32_t extraSize = 0, FreeFunc freeCB = FreeFunc(), UnInitExDataFunc unInitCB = UnInitExDataFunc());
  36. /// 析构函数
  37. virtual ~CBlock(void);
  38. /// 获取附加数据指针
  39. uint8_t* extraData() const;
  40. /// 获取附加数据长度
  41. uint32_t extraSize() const;
  42. /// 获取数据指针
  43. uint8_t* data() const;
  44. /// 获取数据大小
  45. uint32_t size() const;
  46. /// 有效性判断
  47. bool valid() const;
  48. /// 克隆对象 深度拷贝数据
  49. CBlock clone() const;
  50. /// 克隆对象 深度拷贝数据
  51. /// \param[in] constructFunc 内存构造函数
  52. CBlock clone( InitExDataFunc constructFunc ) const;
  53. /// 重置对象
  54. void reset();
  55. /// 重置对象
  56. /// \param[in] r 复制对象
  57. void reset(CBlock const& r);
  58. private:
  59. struct Impl;
  60. Impl* m_impl;
  61. };
  62. } // end of Memory
  63. } // end of Dahua
  64. #endif /// __DAHUA_BLOCK_H__