diff --git a/flat_map.hpp b/flat_map.hpp index ac75aa1..32081b3 100644 --- a/flat_map.hpp +++ b/flat_map.hpp @@ -96,19 +96,30 @@ namespace flat_hpp iterator begin() noexcept { return data_.begin(); } const_iterator begin() const noexcept { return data_.begin(); } + const_iterator cbegin() const noexcept { return data_.cbegin(); } + iterator end() noexcept { return data_.end(); } const_iterator end() const noexcept { return data_.end(); } + const_iterator cend() const noexcept { return data_.cend(); } + reverse_iterator rbegin() noexcept { return data_.rbegin(); } const_reverse_iterator rbegin() const noexcept { return data_.rbegin(); } + const_reverse_iterator crbegin() const noexcept { return data_.crbegin(); } + reverse_iterator rend() noexcept { return data_.rend(); } const_reverse_iterator rend() const noexcept { return data_.rend(); } + const_reverse_iterator crend() const noexcept { return data_.crend(); } - std::pair insert(value_type&& value) { + template < typename P + , typename = std::enable_if_t::value> > + std::pair insert(P&& p) { //TODO(BlackMat): implme return std::make_pair(end(), false); } - std::pair insert(const value_type& value) { + template < typename P + , typename = std::enable_if_t::value> > + std::pair insert(const_iterator hint, P&& p) { //TODO(BlackMat): implme return std::make_pair(end(), false); } @@ -119,6 +130,18 @@ namespace flat_hpp insert(*iter); } } + + template < typename... Args > + std::pair emplace(Args&&... args) { + //TODO(BlackMat): implme + return insert(value_type(std::forward(args)...)); + } + + template < typename... Args > + std::pair emplace_hint(const_iterator hint, Args&&... args) { + //TODO(BlackMat): implme + return insert(value_type(std::forward(args)...)); + } private: data_type data_; key_compare compare_; diff --git a/flat_map_tests.cpp b/flat_map_tests.cpp index aa0b702..0ea5e12 100644 --- a/flat_map_tests.cpp +++ b/flat_map_tests.cpp @@ -30,7 +30,7 @@ namespace } TEST_CASE("flat_map") { - { + SECTION("types") { using map_t = flat_map; static_assert( @@ -64,7 +64,7 @@ TEST_CASE("flat_map") { std::is_same*>::value, "unit test static error"); } - { + SECTION("ctors") { using alloc_t = dummy_allocator< std::pair>; @@ -96,4 +96,22 @@ TEST_CASE("flat_map") { auto s3 = map_t({{0,1}, {1,2}}, std::less(), alloc_t()); } } + SECTION("inserts") { + struct obj_t { + obj_t(int i) : i(i) {} + int i; + }; + + using map_t = flat_map; + + { + map_t s0; + s0.insert(std::make_pair(1, 42)); + s0.insert(std::make_pair(2, obj_t(42))); + s0.insert(s0.cend(), std::make_pair(3, 84)); + s0.insert(s0.cend(), std::make_pair(4, obj_t(84))); + s0.emplace(5, 100500); + s0.emplace_hint(s0.cend(), 6, 100500); + } + } } diff --git a/flat_set.hpp b/flat_set.hpp index a6d1267..9704ebd 100644 --- a/flat_set.hpp +++ b/flat_set.hpp @@ -95,19 +95,30 @@ namespace flat_hpp iterator begin() noexcept { return data_.begin(); } const_iterator begin() const noexcept { return data_.begin(); } + const_iterator cbegin() const noexcept { return data_.cbegin(); } + iterator end() noexcept { return data_.end(); } const_iterator end() const noexcept { return data_.end(); } + const_iterator cend() const noexcept { return data_.cend(); } + reverse_iterator rbegin() noexcept { return data_.rbegin(); } const_reverse_iterator rbegin() const noexcept { return data_.rbegin(); } + const_reverse_iterator crbegin() const noexcept { return data_.crbegin(); } + reverse_iterator rend() noexcept { return data_.rend(); } const_reverse_iterator rend() const noexcept { return data_.rend(); } + const_reverse_iterator crend() const noexcept { return data_.crend(); } - std::pair insert(value_type&& value) { + template < typename P + , typename = std::enable_if_t::value> > + std::pair insert(P&& p) { //TODO(BlackMat): implme return std::make_pair(end(), false); } - std::pair insert(const value_type& value) { + template < typename P + , typename = std::enable_if_t::value> > + std::pair insert(const_iterator hint, P&& p) { //TODO(BlackMat): implme return std::make_pair(end(), false); } @@ -118,6 +129,18 @@ namespace flat_hpp insert(*iter); } } + + template < typename... Args > + std::pair emplace(Args&&... args) { + //TODO(BlackMat): implme + return insert(value_type(std::forward(args)...)); + } + + template < typename... Args > + std::pair emplace_hint(const_iterator hint, Args&&... args) { + //TODO(BlackMat): implme + return insert(hint, value_type(std::forward(args)...)); + } private: data_type data_; key_compare compare_; diff --git a/flat_set_tests.cpp b/flat_set_tests.cpp index e0ca0f7..61bb706 100644 --- a/flat_set_tests.cpp +++ b/flat_set_tests.cpp @@ -30,7 +30,7 @@ namespace } TEST_CASE("flat_set") { - { + SECTION("types") { using set_t = flat_set; static_assert( @@ -61,7 +61,7 @@ TEST_CASE("flat_set") { std::is_same::value, "unit test static error"); } - { + SECTION("ctors") { using alloc_t = dummy_allocator; using set_t = flat_set, alloc_t>; @@ -87,4 +87,22 @@ TEST_CASE("flat_set") { auto s3 = set_t({0,1,2}, std::less(), alloc_t()); } } + SECTION("inserts") { + struct obj_t { + obj_t(int i) : i(i) {} + int i; + }; + + using set_t = flat_set; + + { + set_t s0; + s0.insert(42); + s0.insert(obj_t(42)); + s0.insert(s0.cend(), 84); + s0.insert(s0.cend(), obj_t(84)); + s0.emplace(100500); + s0.emplace_hint(s0.cend(), 100500); + } + } }