diff --git a/include/memory-faucet.h b/include/memory-faucet.h index f4c5ba8d249a9ef8336895a99c254e319468b8a1..97d806f8e87d7bf3c992b1064c1ef59bf09d95d6 100644 --- a/include/memory-faucet.h +++ b/include/memory-faucet.h @@ -36,7 +36,10 @@ private: public: memBuf(const size_t required_size); + memBuf(); ~memBuf(); void* ptr(); + void free_memory(); int get_size() const; + void get_memory(const size_t required_size); }; \ No newline at end of file diff --git a/src/memory-faucet.cpp b/src/memory-faucet.cpp index 21d734c94dda92c8cc997e089cb64a00c2f2f697..32fc36788652826792bdb75796b2856e3118fae9 100644 --- a/src/memory-faucet.cpp +++ b/src/memory-faucet.cpp @@ -67,13 +67,24 @@ memBuf<mem, choose_type>::memBuf(const size_t required_size) } template< MemType mem, buf_choose_policy choose_type > -memBuf<mem, choose_type>::~memBuf() +void memBuf<mem, choose_type>::free_memory() { + if(id == -1) + { + return; + } + memory_pipe<mem, choose_type>& mem_pipe = memory_faucet::get_faucet<mem, choose_type>(); mem_pipe.set_available(id); buf = nullptr; } +template< MemType mem, buf_choose_policy choose_type > +memBuf<mem, choose_type>::~memBuf() +{ + free_memory(); +} + template< MemType mem, buf_choose_policy choose_type > void* memBuf<mem, choose_type>::ptr() { @@ -86,6 +97,24 @@ int memBuf<mem, choose_type>::get_size() const return size; } +template< MemType mem, buf_choose_policy choose_type > +memBuf<mem, choose_type>::memBuf() +{ + buf = nullptr; + id = -1; + size = 0; +} + +template< MemType mem, buf_choose_policy choose_type > +void memBuf<mem, choose_type>::get_memory(const size_t required_size) +{ + free_memory(); + + memory_pipe<mem, choose_type>& mem_pipe = memory_faucet::get_faucet<mem, choose_type>(); + id = mf_utils::get_buffer<choose_type>(required_size, mem_pipe.get_buff_vec(), mem, &buf); + size = required_size; +} + template class memBuf<MemType::CPU, buf_choose_policy::naive>; template class memBuf<MemType::CPU, buf_choose_policy::sorted_vec>; template class memBuf<MemType::CPU, buf_choose_policy::find_best_unsorted>;