From 1dbfbbd44dd778dca3f25252cd1ea5a33d491e08 Mon Sep 17 00:00:00 2001
From: Lizzzka007 <gashchuk2011@mail.ru>
Date: Fri, 1 Nov 2024 16:08:06 +0300
Subject: [PATCH] Upd

---
 include/memory-faucet.h |  3 +++
 src/memory-faucet.cpp   | 31 ++++++++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/include/memory-faucet.h b/include/memory-faucet.h
index f4c5ba8..97d806f 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 21d734c..32fc367 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>;
-- 
GitLab