#pragma once #include "mf-utils.h" template< MemType mem = MemType::CPU, buf_choose_policy choose_type = buf_choose_policy::naive > class memory_pipe { private: std::vector<buffer > buff_vec; public: memory_pipe(/* args */); ~memory_pipe(); void set_available(const int id); std::vector<buffer >& get_buff_vec(); }; class memory_faucet { private: memory_faucet() = delete; memory_faucet(const memory_faucet&) = delete; memory_faucet& operator=(const memory_faucet&) = delete; public: template< MemType mem = MemType::CPU, buf_choose_policy choose_type = buf_choose_policy::naive > static memory_pipe<mem, choose_type>& get_faucet(); }; template< MemType mem = MemType::CPU, buf_choose_policy choose_type = buf_choose_policy::naive > class memBuf { private: void* buf; int id; size_t size; public: memBuf(const size_t required_size); memBuf(); ~memBuf(); void* ptr(); void** ptr(); const void* ptr() const; void free_memory(); int get_size() const; int get_id() const; void get_memory(const size_t required_size); };