| 8 | // underlying map order. |
| 9 | template <template <typename...> class Map, typename Key, typename Value, typename Allocator, typename... MapArgs> |
| 10 | class OrderedMapWrapper { |
| 11 | public: |
| 12 | typedef Key key_type; |
| 13 | typedef Value mapped_type; |
| 14 | typedef pair<key_type const, mapped_type> value_type; |
| 15 | |
| 16 | typedef LinkedList<value_type, Allocator> OrderType; |
| 17 | typedef Map< |
| 18 | std::reference_wrapper<key_type const>, typename OrderType::iterator, MapArgs..., |
| 19 | typename std::allocator_traits<Allocator>::template rebind_alloc<pair<std::reference_wrapper<key_type const> const, typename OrderType::iterator>> |
| 20 | > MapType; |
| 21 | |
| 22 | typedef typename OrderType::iterator iterator; |
| 23 | typedef typename OrderType::const_iterator const_iterator; |
| 24 | |
| 25 | typedef typename OrderType::reverse_iterator reverse_iterator; |
| 26 | typedef typename OrderType::const_reverse_iterator const_reverse_iterator; |
| 27 | |
| 28 | typedef typename std::decay<mapped_type>::type* mapped_ptr; |
| 29 | typedef typename std::decay<mapped_type>::type const* mapped_const_ptr; |
| 30 | |
| 31 | template <typename Collection> |
| 32 | static OrderedMapWrapper from(Collection const& c); |
| 33 | |
| 34 | OrderedMapWrapper(); |
| 35 | |
| 36 | OrderedMapWrapper(OrderedMapWrapper const& map); |
| 37 | |
| 38 | template <typename InputIterator> |
| 39 | OrderedMapWrapper(InputIterator beg, InputIterator end); |
| 40 | |
| 41 | OrderedMapWrapper(initializer_list<value_type> list); |
| 42 | |
| 43 | List<key_type> keys() const; |
| 44 | List<mapped_type> values() const; |
| 45 | List<pair<key_type, mapped_type>> pairs() const; |
| 46 | |
| 47 | bool contains(key_type const& k) const; |
| 48 | |
| 49 | // Throws MapException if key not found |
| 50 | mapped_type& get(key_type const& k); |
| 51 | mapped_type const& get(key_type const& k) const; |
| 52 | |
| 53 | // Return def if key not found |
| 54 | mapped_type value(key_type const& k, mapped_type d = mapped_type()) const; |
| 55 | |
| 56 | Maybe<mapped_type> maybe(key_type const& k) const; |
| 57 | |
| 58 | mapped_const_ptr ptr(key_type const& k) const; |
| 59 | mapped_ptr ptr(key_type const& k); |
| 60 | |
| 61 | mapped_type& operator[](key_type const& k); |
| 62 | |
| 63 | OrderedMapWrapper& operator=(OrderedMapWrapper const& map); |
| 64 | |
| 65 | bool operator==(OrderedMapWrapper const& m) const; |
| 66 | |
| 67 | // Finds first value matching the given value and returns its key, throws |