From 3489cf21b31f9465188f614f237c3c0ddbd13981 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Thu, 28 Mar 2019 09:22:25 +0100 Subject: [PATCH] cleaning up the map extensions --- alib2data/src/automaton/PDA/InputDrivenDPDA.h | 1 + alib2data/src/automaton/PDA/InputDrivenNPDA.h | 1 + alib2std/src/extensions/container/map.hpp | 28 ----------- .../extensions/container/unordered_map.hpp | 26 ---------- alib2std/src/extensions/iterator.hpp | 48 +++++++++++++++++++ 5 files changed, 50 insertions(+), 54 deletions(-) diff --git a/alib2data/src/automaton/PDA/InputDrivenDPDA.h b/alib2data/src/automaton/PDA/InputDrivenDPDA.h index e54d9799bf..cf781409f4 100644 --- a/alib2data/src/automaton/PDA/InputDrivenDPDA.h +++ b/alib2data/src/automaton/PDA/InputDrivenDPDA.h @@ -31,6 +31,7 @@ #include <alib/set> #include <alib/vector> #include <alib/algorithm> +#include <alib/iterator> #include <core/components.hpp> diff --git a/alib2data/src/automaton/PDA/InputDrivenNPDA.h b/alib2data/src/automaton/PDA/InputDrivenNPDA.h index 435207d72d..75856e4331 100644 --- a/alib2data/src/automaton/PDA/InputDrivenNPDA.h +++ b/alib2data/src/automaton/PDA/InputDrivenNPDA.h @@ -31,6 +31,7 @@ #include <alib/set> #include <alib/vector> #include <alib/algorithm> +#include <alib/iterator> #include <core/components.hpp> diff --git a/alib2std/src/extensions/container/map.hpp b/alib2std/src/extensions/container/map.hpp index f5c58061b9..80c4fc087a 100644 --- a/alib2std/src/extensions/container/map.hpp +++ b/alib2std/src/extensions/container/map.hpp @@ -341,34 +341,6 @@ std::string to_string ( const ext::map < T, R, Ts ... > & value ) { return ss.str(); } -template<typename map_type> -class key_iterator : public map_type::const_iterator { -public: - typedef typename map_type::const_iterator map_iterator; - typedef typename map_iterator::value_type::first_type key_type; - - key_iterator(const map_iterator& other) : map_iterator(other) {} ; - - const key_type& operator *() const { - return map_iterator::operator*().first; - } - - const key_type* operator ->() const { - return &(map_iterator::operator*().first); - } -}; - -// helpers to create iterators easier: -template<typename map_type> -key_iterator<map_type> key_begin(const map_type& m) { - return key_iterator<map_type>(m.begin()); -} - -template<typename map_type> -key_iterator<map_type> key_end(const map_type& m) { - return key_iterator<map_type>(m.end()); -} - } /* namespace ext */ #endif /* __MAP_HPP_ */ diff --git a/alib2std/src/extensions/container/unordered_map.hpp b/alib2std/src/extensions/container/unordered_map.hpp index 169bb7c906..a25d417981 100644 --- a/alib2std/src/extensions/container/unordered_map.hpp +++ b/alib2std/src/extensions/container/unordered_map.hpp @@ -103,32 +103,6 @@ public: */ using iterator = typename std::unordered_map<T, R, Hash, KeyEqual, Alloc>::iterator; - /** - * \brief - * Temporary implementation of insert_or_assign from c++17 standard. - * TODO: Remove this member function after move to C++17 - * - * Follows interface from C++17 version of insert_or_assign - * - * \tparam M type of the value to insert - * - * \param k the key - * \param obj the value - * - * \return pair of iterator to the inserted or assigned key-value pair and true if the value was inserted or false if the value was asigned - */ - template < typename M > - std::pair < iterator, bool > insert_or_assign ( const T & k, M && obj ) { - iterator pos = this->find ( k ); - if ( pos == this->end ( ) ) { - pos = this->insert ( k, std::forward < M > ( obj ) ).first; - return std::make_pair ( pos, true ); - } else { - pos->second = std::forward < M > ( obj ); - return std::make_pair ( pos, false ); - } - } - /** * \brief * Inherit all insert methods of the standard unordered_map. diff --git a/alib2std/src/extensions/iterator.hpp b/alib2std/src/extensions/iterator.hpp index 393075147b..13f6c51e85 100644 --- a/alib2std/src/extensions/iterator.hpp +++ b/alib2std/src/extensions/iterator.hpp @@ -1100,6 +1100,54 @@ callback_iterator < T > make_callback_iterator ( const std::function < void ( T return callback_iterator < T > ( callback ); } +/** + * Iterator over map keys. + * + * \tparam map_type the iterated map + */ +template < typename map_type > +class key_iterator : public map_type::const_iterator { +public: + key_iterator ( const typename map_type::const_iterator & other ) : map_type::const_iterator ( other ) { + } + + const typename map_type::value_type::first_type & operator * ( ) const { + return map_type::const_iterator::operator * ( ).first; + } + + const typename map_type::value_type::first_type * operator -> ( ) const { + return & ( map_type::const_iterator::operator * ( ).first ); + } +}; + +/** + * Helper to create begin key_iterator for map. + * + * \tparam map_type the map + * + * \param m the iterated map + * + * \result the begin key_iterator + */ +template < typename map_type > +key_iterator < map_type > key_begin ( const map_type & m ) { + return key_iterator < map_type > ( m.begin ( ) ); +} + +/** + * Helper to create end key_iterator for map. + * + * \tparam map_type the map + * + * \param m the iterated map + * + * \result the end key_iterator + */ +template < typename map_type > +key_iterator < map_type > key_end ( const map_type & m ) { + return key_iterator < map_type > ( m.end ( ) ); +} + } /* namespace ext */ #endif /* __ITERATOR_HPP_ */ -- GitLab