template<typename K, typename V, typename MAP = HashMapSelector<>, Bool COW = false, Bool OPT = true>
class maxon::TreeMap< K, V, MAP, COW, OPT >
A TreeMap maps paths of K-typed elements to values of type V by storing the data in a hierarchy of nodes (where each node is a TreeMap itself with TreeMaps as children). This allows to walk through the data in a similar way as for a file system hierarchy.
As an example, consider this TreeMap where the path {1, 2, 3} is mapped to 42.0 and the path {1, 4} to 99.0:
TreeMap<Int, Float> map;
map.Insert(TmpBlock<const Int>{1, 2, 3}, 42.0_f)
iferr_return;
#define iferr_return
Definition: resultbase.h:1771
The code sets up this hierarchy:
/// 1
/// |-- 2
/// | `-- 3 {value = 42.0}
/// `-- 4 {value = 99.0}
/// You can then query for entries with FindValue, iterate over the whole TreeMap with one of the ForEach functions, or recursively walk over the TreeMap nodes yourself using the GetChildren() function at each level.
The example uses true for the OPT template parameter (the default value). This means that each node stores its value in an Opt<V>, then for paths for which no value has been set explicitly (like {1} or {1, 2} in the example) there's no value associated with those paths. With false for OPT the nodes of these paths would have default values, and functions like Contains() or FindValue() would report them.
- Template Parameters
-
| K | Type of path elements. |
| V | Type of values. |
| MAP | A map selector template to choose the implementation for the children map. |
| COW | True when the nested trees shall be held by a COW reference. Then they can be shared, but there's no up pointer. |
| OPT | True when values shall be stored in an Opt<V>. If false, all tree nodes always have a value, so when you insert a node at a nested path, all parent nodes which haven't existed so far are created with a default value. |
|
| | TreeMap ()=default |
| |
| | TreeMap (TreeMap &&src) |
| |
| | MAXON_OPERATOR_MOVE_ASSIGNMENT (TreeMap) |
| |
| | MAXON_DISALLOW_COPY_AND_ASSIGN (TreeMap) |
| |
| template<typename ALLOCATOR > |
| | TreeMap (ALLOCATOR &&arg) |
| |
| Result< void > | CopyFrom (const TreeMap &src) |
| |
| void | Flush () |
| |
| void | Reset () |
| |
| Result< TreeMap & > | InsertChild (const K &key, Bool withValue=true) |
| |
| template<typename C > |
| Result< TreeMap & > | InsertChildCtor (const K &key, C &&constructor) |
| |
| Result< Child & > | InsertChild (const K &key, Child &&child) |
| |
| template<typename PATH , typename = typename std::enable_if<!STD_IS_REPLACEMENT(base_of, K, typename std::decay<PATH>::type)>::type> |
| Result< TreeMap & > | InsertEntry (PATH &&key, Bool withValue=true) |
| |
| template<typename PATH , typename = typename std::enable_if<!STD_IS_REPLACEMENT(base_of, K, typename std::decay<PATH>::type)>::type> |
| Result< TreeMap & > | Insert (PATH &&key, const V &value) |
| |
| template<typename PATH , typename = typename std::enable_if<!STD_IS_REPLACEMENT(base_of, K, typename std::decay<PATH>::type)>::type> |
| Result< TreeMap & > | Insert (PATH &&key, V &&value) |
| |
| template<typename PATH > |
| Result< V & > | InsertKey (PATH &&key, Bool &created) |
| |
| template<typename PATH > |
| Result< V & > | InsertKey (PATH &&key) |
| |
| const TreeMap * | FindChild (const K &key) const |
| |
| TreeMap * | FindChild (const K &key) |
| |
| template<typename PATH > |
| const TreeMap * | FindEntry (PATH &&key) const |
| |
| template<typename PATH , typename = typename std::enable_if<!COW || AlwaysFalse<PATH>::value>::type> |
| TreeMap * | FindEntry (PATH &&key) |
| |
| template<typename PATH > |
| const TreeMap * | FindFirstEntryWithValue (PATH &&key) const |
| |
| template<typename PATH > |
| const TreeMap * | FindClosestEntryWithValue (PATH &&key) const |
| |
| template<typename PATH > |
| Opt< const V & > | FindValue (PATH &&key) const |
| |
| template<typename PATH , typename = typename std::enable_if<!COW || AlwaysFalse<PATH>::value>::type> |
| Opt< V & > | FindValue (PATH &&key) |
| |
| template<typename PATH > |
| Bool | Contains (PATH &&key) const |
| |
| template<typename PATH > |
| std::conditional< COW, Result< void >, ResultOk< void > >::type | Erase (PATH &&key, Bool withChildren=false) |
| |
| String | ToString (const FormatStatement *fs=nullptr) const |
| |
| const OptValueType & | Get () const |
| |
| OptValueType & | Get () |
| |
| V & | MakeValid () |
| |
| void | SetValue (const V &value) |
| |
| void | SetValue (V &&value) |
| |
| Bool | IsRoot () const |
| |
| Bool | IsLeaf () const |
| |
| const ChildrenMap & | GetChildren () const |
| |
| ChildrenMap & | GetChildren () |
| |
| const K * | GetKey () const |
| |
| Bool | operator== (const TreeMap &other) const |
| |
| Bool | operator!= (const TreeMap &other) const |
| |
| Bool | IsPopulated () const |
| |
| Bool | IsEmpty () const |
| |
| Bool | HasSameStructure (const TreeMap &other) const |
| |
| template<typename OP > |
| Result< Bool > | ForEachPreOrder (OP &&callback) const |
| |
| template<typename PATH , typename OP > |
| Result< Bool > | ForEachPreOrder (OP &&callback, PATH &&path=PATH()) const |
| |
| template<typename OP > |
| Result< Bool > | ForEachPreOrder (OP &&callback) |
| |
| template<typename PATH , typename OP > |
| Result< Bool > | ForEachPreOrder (OP &&callback, PATH &&path=PATH()) |
| |
| template<typename PATH , typename OP > |
| Result< void > | ForEachPreOrderX (OP &&callback, PATH &&path=PATH()) |
| |
| template<typename OP > |
| Result< Bool > | ForEachPostOrder (OP &&callback) const |
| |
| template<typename PATH , typename OP > |
| Result< Bool > | ForEachPostOrder (OP &&callback, PATH &&path=PATH()) const |
| |
| template<typename OP > |
| Result< Bool > | ForEachPostOrder (OP &&callback) |
| |
| template<typename PATH , typename OP > |
| Result< Bool > | ForEachPostOrder (OP &&callback, PATH &&path=PATH()) |
| |
| template<typename PATH > |
| Result< void > | GetPath (PATH &path) const |
| |
| Int | GetDepth () const |
| |
| IndexIterator< const K &, const TreeMap, TreeMap > | GetPath () const |
| |
| const TreeMap< K, V, HashMapSelector<>, false, true > * | GetParent () const |
| |
| TreeMap< K, V, HashMapSelector<>, false, true > * | GetParent () |
| |