From d95c6f9b05ddfdb428e06651e3380d8612c43d52 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Sat, 4 May 2019 12:45:22 +0700 Subject: [PATCH] add observers interface --- flat_map.hpp | 21 +++++++++++++++++++++ flat_map_tests.cpp | 6 ++++++ flat_set.hpp | 8 ++++++++ flat_set_tests.cpp | 6 ++++++ 4 files changed, 41 insertions(+) diff --git a/flat_map.hpp b/flat_map.hpp index c882c9f..7c6ad6d 100644 --- a/flat_map.hpp +++ b/flat_map.hpp @@ -44,6 +44,19 @@ namespace flat_hpp using reverse_iterator = typename data_type::reverse_iterator; using const_reverse_iterator = typename data_type::const_reverse_iterator; + class value_compare final : public std::binary_function { + public: + bool operator()(const value_type& l, const value_type& r) const { + return compare_(l.first, r.first); + } + private: + friend class flat_map; + explicit value_compare(const key_compare& compare) + : compare_(compare) {} + private: + key_compare compare_; + }; + static_assert( std::is_same::value, "Allocator::value_type must be same type as value_type"); @@ -222,6 +235,14 @@ namespace flat_hpp //TODO(BlackMat): implme return end(); } + + key_compare key_comp() const { + return compare_; + } + + value_compare value_comp() const { + return value_compare(compare_); + } private: data_type data_; key_compare compare_; diff --git a/flat_map_tests.cpp b/flat_map_tests.cpp index d1d8283..78564e1 100644 --- a/flat_map_tests.cpp +++ b/flat_map_tests.cpp @@ -152,4 +152,10 @@ TEST_CASE("flat_map") { s0.upper_bound(30); my_as_const(s0).upper_bound(30); } + SECTION("observers") { + using map_t = flat_map; + map_t s0; + my_as_const(s0).key_comp(); + my_as_const(s0).value_comp(); + } } diff --git a/flat_set.hpp b/flat_set.hpp index f985ada..d9bf478 100644 --- a/flat_set.hpp +++ b/flat_set.hpp @@ -221,6 +221,14 @@ namespace flat_hpp //TODO(BlackMat): implme return end(); } + + key_compare key_comp() const { + return compare_; + } + + value_compare value_comp() const { + return value_compare(compare_); + } private: data_type data_; key_compare compare_; diff --git a/flat_set_tests.cpp b/flat_set_tests.cpp index f251a15..d360cd4 100644 --- a/flat_set_tests.cpp +++ b/flat_set_tests.cpp @@ -143,4 +143,10 @@ TEST_CASE("flat_set") { s0.upper_bound(30); my_as_const(s0).upper_bound(30); } + SECTION("observers") { + using set_t = flat_set; + set_t s0; + my_as_const(s0).key_comp(); + my_as_const(s0).value_comp(); + } }