From 9329e6e09bed6925b3292aa05fea28e2bcd4d9ef Mon Sep 17 00:00:00 2001 From: Gil Date: Tue, 17 Apr 2018 14:47:45 -0700 Subject: Implement TreeSortedMap::insert (#1081) * Make LlrbNode Rep more explicit, share empty node * SortedMap::insert converts implementations * Implement LlrbNode::insert * Remove TestPolicy --- .../firebase/firestore/immutable/tree_sorted_map.h | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'Firestore/core/src/firebase/firestore/immutable/tree_sorted_map.h') diff --git a/Firestore/core/src/firebase/firestore/immutable/tree_sorted_map.h b/Firestore/core/src/firebase/firestore/immutable/tree_sorted_map.h index dfe270d..ff8c9f9 100644 --- a/Firestore/core/src/firebase/firestore/immutable/tree_sorted_map.h +++ b/Firestore/core/src/firebase/firestore/immutable/tree_sorted_map.h @@ -56,7 +56,19 @@ class TreeSortedMap : public SortedMapBase, private util::ComparatorHolder { * Creates an empty TreeSortedMap. */ explicit TreeSortedMap(const C& comparator = {}) - : util::ComparatorHolder{comparator}, root_{node_type::Empty()} { + : util::ComparatorHolder{comparator} { + } + + /** + * Creates a TreeSortedMap from a range of pairs to insert. + */ + template + static TreeSortedMap Create(const Range& range, const C& comparator) { + node_type node; + for (auto&& element : range) { + node = node.insert(element.first, element.second, comparator); + } + return TreeSortedMap{std::move(node), comparator}; } /** @@ -68,10 +80,8 @@ class TreeSortedMap : public SortedMapBase, private util::ComparatorHolder { * @return A new dictionary with the added/updated value. */ TreeSortedMap insert(const K& key, const V& value) const { - // TODO(wilhuff): Actually implement insert - (void)key; - (void)value; - return *this; + const C& comparator = this->comparator(); + return TreeSortedMap{root_.insert(key, value, comparator), comparator}; } /** @@ -83,7 +93,7 @@ class TreeSortedMap : public SortedMapBase, private util::ComparatorHolder { TreeSortedMap erase(const K& key) const { // TODO(wilhuff): Actually implement erase (void)key; - return *this; + return TreeSortedMap{this->comparator()}; } /** Returns true if the map contains no elements. */ -- cgit v1.2.3