DataManager.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #ifndef DATA_MANAGER_H
  2. #define DATA_MANAGER_H
  3. #include <string>
  4. #include <unordered_map>
  5. #include <memory>
  6. #include "DataPipe.h" // 假设 DataPipe 类定义在这个头文件中
  7. #include "DataPackage.h" // 假设 DataPackage 类定义在这个头文件中
  8. #include "../DataBuffer/DataBuffer.h"
  9. #define BUFFER_SIZE 30
  10. class DataManager
  11. {
  12. public:
  13. static DataManager &getInstance()
  14. {
  15. static DataManager instance;
  16. return instance;
  17. }
  18. // add data pipe
  19. template <typename T>
  20. void addDataPipe(std::string name);
  21. // erase data pipe
  22. void eraseDataPipe(std::string name);
  23. // get data pipe by name
  24. template <typename T>
  25. std::shared_ptr<DataPipe<T>> getDataPipe(std::string name);
  26. // push data to the data pipe
  27. template <typename T>
  28. void pushData(std::string name, T *data);
  29. // pop data from the data pipe
  30. template <typename T>
  31. bool popData(std::string name, T *&data);
  32. // get a data buffer from the memory pool
  33. template <typename T>
  34. T *acquireDataBuffer();
  35. // release a data buffer to the memory pool
  36. template <typename T>
  37. void releaseDataBuffer(T *buffer);
  38. private:
  39. DataManager() = default;
  40. ~DataManager() = default;
  41. DataManager(const DataManager &) = delete;
  42. DataManager &operator=(const DataManager &) = delete;
  43. private:
  44. std::unordered_map<std::string, std::shared_ptr<void>> m_dataPipes;
  45. int width{3840};
  46. int height{2160};
  47. };
  48. template <typename T>
  49. void DataManager::addDataPipe(std::string name)
  50. {
  51. auto dataPipe = std::make_shared<DataPipe<T>>();
  52. m_dataPipes[name] = dataPipe;
  53. }
  54. template <typename T>
  55. std::shared_ptr<DataPipe<T>> DataManager::getDataPipe(std::string name)
  56. {
  57. auto it = m_dataPipes.find(name);
  58. if (it != m_dataPipes.end())
  59. {
  60. return std::static_pointer_cast<DataPipe<T>>(it->second);
  61. }
  62. return nullptr;
  63. }
  64. template <typename T>
  65. void DataManager::pushData(std::string name, T *data)
  66. {
  67. auto dataPipe = getDataPipe<T>(name);
  68. if (dataPipe)
  69. {
  70. dataPipe->pushData(data);
  71. }
  72. }
  73. template <typename T>
  74. bool DataManager::popData(std::string name, T *&data)
  75. {
  76. auto dataPipe = getDataPipe<T>(name);
  77. if (dataPipe)
  78. {
  79. return dataPipe->popData(data);
  80. }
  81. return false;
  82. }
  83. template <typename T>
  84. T *DataManager::acquireDataBuffer()
  85. {
  86. static MemoryPool<T> memoryPool(BUFFER_SIZE, width, height);
  87. return memoryPool.acquire();
  88. }
  89. template <typename T>
  90. void DataManager::releaseDataBuffer(T *buffer)
  91. {
  92. static MemoryPool<T> memoryPool(BUFFER_SIZE, width, height);
  93. memoryPool.release(buffer);
  94. }
  95. #endif // DATA_MANAGER_H