|
|
@@ -42,25 +42,17 @@ template <typename Trie, typename Iter> class trie_reverse_iterator;
|
|
|
* because it doesn't translate well with non-binary trees.
|
|
|
*/
|
|
|
template <typename K, typename V, typename Compare> class trie {
|
|
|
-private:
|
|
|
- using impl_value_type = const_propogating_ptr<value_ptr<trie>>;
|
|
|
- using backing_t = std::map<K, impl_value_type, Compare>;
|
|
|
- template <typename KS>
|
|
|
- using element_type = std::decay_t<decltype(*std::begin(std::declval<KS>()))>;
|
|
|
- template <typename KS>
|
|
|
- using is_collection_t =
|
|
|
- std::enable_if_t<std::is_same<K, element_type<KS>>::value>;
|
|
|
-
|
|
|
public:
|
|
|
using key_type = K;
|
|
|
using mapped_type = V;
|
|
|
using key_compare = Compare;
|
|
|
+ using map_type = std::map<K, const_propogating_ptr<value_ptr<trie>>, Compare>;
|
|
|
|
|
|
- using local_iterator = typename backing_t::iterator;
|
|
|
- using local_const_iterator = typename backing_t::const_iterator;
|
|
|
- using local_reverse_iterator = typename backing_t::reverse_iterator;
|
|
|
+ using local_iterator = typename map_type::iterator;
|
|
|
+ using local_const_iterator = typename map_type::const_iterator;
|
|
|
+ using local_reverse_iterator = typename map_type::reverse_iterator;
|
|
|
using local_const_reverse_iterator =
|
|
|
- typename backing_t::const_reverse_iterator;
|
|
|
+ typename map_type::const_reverse_iterator;
|
|
|
|
|
|
using iterator = trie_iterator<trie, local_iterator>;
|
|
|
using const_iterator = trie_iterator<trie const, local_const_iterator>;
|
|
|
@@ -72,13 +64,18 @@ public:
|
|
|
trie_reverse_iterator<trie const, local_const_reverse_iterator>;
|
|
|
|
|
|
private:
|
|
|
+ template <typename KS>
|
|
|
+ using element_type = std::decay_t<decltype(*std::begin(std::declval<KS>()))>;
|
|
|
+ template <typename KS>
|
|
|
+ using is_collection_t =
|
|
|
+ std::enable_if_t<std::is_same<K, element_type<KS>>::value>;
|
|
|
using impl_iterator = detail::trie_iterator_base<trie, local_iterator>;
|
|
|
using impl_const_iterator =
|
|
|
detail::trie_iterator_base<trie const, local_const_iterator>;
|
|
|
|
|
|
private:
|
|
|
mapped_type value_{};
|
|
|
- backing_t impl_{};
|
|
|
+ map_type impl_{};
|
|
|
|
|
|
public:
|
|
|
trie() {}
|