From 22a45a4b1acd158e809009a4a57bdc863b4fe786 Mon Sep 17 00:00:00 2001
From: Lizzzka007 <gashchuk2011@mail.ru>
Date: Mon, 4 Nov 2024 02:27:46 +0300
Subject: [PATCH] Lmbda func impl for compare functions

---
 include/mf-utils.h |  7 ++-----
 src/mf-utils.cpp   | 31 ++++++++++++++-----------------
 2 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/include/mf-utils.h b/include/mf-utils.h
index c127bbc..d7e93f6 100644
--- a/include/mf-utils.h
+++ b/include/mf-utils.h
@@ -12,18 +12,15 @@ enum class buf_choose_policy
 
 namespace mf_utils
 {
-    bool free_size_comparator(const buffer& obj, const size_t required_size);
-    bool size_comparator(const size_t required_size, const buffer& obj);
-
     typename std::vector<buffer>::iterator get_lower_bound(
         typename std::vector<buffer>::iterator first, 
         typename std::vector<buffer>::iterator last, const size_t value, 
-        std::function<bool (const buffer&, const size_t) >& comp);
+        bool (*comp)(const buffer&, const size_t));
 
     typename std::vector<buffer>::iterator get_upper_bound(
         typename std::vector<buffer>::iterator first, 
         typename std::vector<buffer>::iterator last, const size_t value, 
-        std::function<bool (const size_t, const buffer&) >& comp);
+        bool (*comp)(const size_t, const buffer&));
 
     template<buf_choose_policy choose_type = buf_choose_policy::naive>
     int get_buffer(const size_t required_size, 
diff --git a/src/mf-utils.cpp b/src/mf-utils.cpp
index 9e3ac4d..73bbf10 100644
--- a/src/mf-utils.cpp
+++ b/src/mf-utils.cpp
@@ -1,22 +1,9 @@
 #include "mf-utils.h"
 
-bool mf_utils::free_size_comparator(const buffer& obj, const size_t required_size)
-{
-    if(obj.get_status() == false)
-        return false;
-
-    return obj.get_size() <= required_size;
-}
-
-bool mf_utils::size_comparator(const size_t required_size, const buffer& obj)
-{
-    return required_size < obj.get_size();
-}
-
 typename std::vector<buffer>::iterator mf_utils::get_lower_bound(
     typename std::vector<buffer>::iterator first, 
     typename std::vector<buffer>::iterator last, const size_t value, 
-    std::function<bool (const buffer&, const size_t) >& comp)
+    bool (*comp)(const buffer&, const size_t))
 {
     typename std::vector<buffer>::iterator it;
     typename std::iterator_traits<typename std::vector<buffer>::iterator>::difference_type count, step;
@@ -43,7 +30,7 @@ typename std::vector<buffer>::iterator mf_utils::get_lower_bound(
 typename std::vector<buffer>::iterator mf_utils::get_upper_bound(
     typename std::vector<buffer>::iterator first, 
     typename std::vector<buffer>::iterator last, const size_t value, 
-    std::function<bool (const size_t, const buffer&) >& comp)
+    bool (*comp)(const size_t, const buffer&))
 {
     typename std::vector<buffer>::iterator it;
     typename std::iterator_traits<typename std::vector<buffer>::iterator>::difference_type count, step;
@@ -119,7 +106,10 @@ int mf_utils::get_buffer<buf_choose_policy::sorted_vec>(const size_t required_si
     }
 
     typename std::vector<buffer>::iterator buf_it;
-    std::function<bool (const size_t, const buffer&) > comparator = mf_utils::size_comparator;
+    auto comparator = [](const size_t required_size, const buffer& obj) ->bool
+        {
+            return required_size < obj.get_size();
+        };
     buf_it = mf_utils::get_upper_bound (buff_vec.begin(), buff_vec.end(), required_size, comparator);
     buf_it = buff_vec.insert(buf_it, buffer(required_size, mem));
     (*ptr) = buf_it->get_ptr();
@@ -135,7 +125,14 @@ int mf_utils::get_buffer<buf_choose_policy::find_best_unsorted>(const size_t req
         void ** ptr)
 {
     typename std::vector<buffer>::iterator available_buf_it;
-    std::function<bool (const buffer&, const size_t) > comparator = mf_utils::free_size_comparator;
+    auto comparator = [](const buffer& obj, const size_t required_size) ->bool
+        {
+            if(obj.get_status() == false)
+                return false;
+
+            return obj.get_size() <= required_size;
+        };
+
     available_buf_it = mf_utils::get_lower_bound (buff_vec.begin(), buff_vec.end(), required_size, comparator);
     if(available_buf_it != buff_vec.end())
     {    
-- 
GitLab