TreeMap< K, V, MAP, COW > Class Template Reference

#include <treemap.h>

Inheritance diagram for TreeMap< K, V, MAP, COW >:

Public Types

using KeyType = K
 
using ValueType = V
 
using Super = TreeMapParent< TreeMap< K, V, MAP, COW >, COW >
 
using Child = typename std::conditional< COW, StrongCOWRef< TreeMap >, TreeMap >::type
 
using Ref = typename std::conditional< COW, StrongCOWRef< TreeMap >, void >::type
 
using ChildrenMap = typename MAP::template Type< K, Child >
 

Public Member Functions

 TreeMap ()=default
 
 TreeMap (TreeMap &&src)
 
 MAXON_OPERATOR_MOVE_ASSIGNMENT (TreeMap)
 
Result< void > CopyFrom (const TreeMap &src)
 
void Flush ()
 
void Reset ()
 
Result< TreeMap & > InsertChild (const K &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 & > 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=BoolLValue())
 
const TreeMapFindChild (const K &key) const
 
TreeMapFindChild (const K &key)
 
template<typename PATH >
const TreeMapFindEntry (PATH &&key) const
 
template<typename PATH , typename = typename std::enable_if<!COW || AlwaysFalse<PATH>::value>::type>
TreeMapFindEntry (PATH &&key)
 
template<typename PATH >
const TreeMapFindFirstEntryWithValue (PATH &&key) const
 
template<typename PATH >
const TreeMapFindClosestEntryWithValue (PATH &&key) const
 
template<typename PATH >
const V * FindValue (PATH &&key) const
 
template<typename PATH , typename = typename std::enable_if<!COW || AlwaysFalse<PATH>::value>::type>
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)
 
String ToString (const FormatStatement *fs=nullptr) const
 
const Opt< V > & Get () const
 
Opt< V > & Get ()
 
V & MakeValid ()
 
void SetValue (const V &value)
 
void SetValue (V &&value)
 
Bool IsRoot () const
 
Bool IsLeaf () const
 
const ChildrenMapGetChildren () const
 
ChildrenMapGetChildren ()
 
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< BoolForEachPreOrder (OP &&callback) const
 
template<typename PATH , typename OP >
Result< BoolForEachPreOrder (OP &&callback, PATH &&path=PATH()) const
 
template<typename OP >
Result< BoolForEachPreOrder (OP &&callback)
 
template<typename PATH , typename OP >
Result< BoolForEachPreOrder (OP &&callback, PATH &&path=PATH())
 
template<typename PATH , typename OP >
Result< void > ForEachPreOrderX (OP &&callback, PATH &&path=PATH())
 
template<typename OP >
Result< BoolForEachPostOrder (OP &&callback) const
 
template<typename PATH , typename OP >
Result< BoolForEachPostOrder (OP &&callback, PATH &&path=PATH()) const
 
template<typename OP >
Result< BoolForEachPostOrder (OP &&callback)
 
template<typename PATH , typename OP >
Result< BoolForEachPostOrder (OP &&callback, PATH &&path=PATH())
 
template<typename PATH >
Result< void > GetPath (PATH &path) const
 
Int GetDepth () const
 
IndexIterator< const K &, const TreeMap, TreeMapGetPath () const
 
- Public Member Functions inherited from TreeMapParent< TreeMap< K, V, HashMapSelector<>, false >, false >
const TreeMap< K, V, HashMapSelector<>, false > * GetParent () const
 
TreeMap< K, V, HashMapSelector<>, false > * GetParent ()
 

Static Public Member Functions

static ResultRef< TreeMapMakeWritable (StrongCOWRef< TreeMap > &ref)
 
static ResultOk< TreeMap & > MakeWritable (TreeMap &ref)
 
static const TreeMapGetTreeMap (const TreeMap *child)
 
static const TreeMapGetTreeMap (const StrongCOWRef< TreeMap > *child)
 
static const K & Get (const TreeMap &map, Int index)
 

Private Member Functions

void ToStringImpl (String &s, BufferedBaseArray< K, 10 > &path, const FormatStatement *fs) const
 
template<typename IT >
std::conditional< COW, Result< Bool >, ResultOk< Bool > >::type EraseImpl (IT &beginIt, const IT &endIt)
 

Private Attributes

Opt< V > _value
 
ChildrenMap _children
 

Additional Inherited Members

- Protected Member Functions inherited from TreeMapParent< TreeMap< K, V, HashMapSelector<>, false >, false >
void SetParent (TreeMap< K, V, HashMapSelector<>, false > *p)
 
- Protected Attributes inherited from TreeMapParent< TreeMap< K, V, HashMapSelector<>, false >, false >
Pointer< TreeMap< K, V, HashMapSelector<>, false > > _parent
 

Member Typedef Documentation

◆ KeyType

using KeyType = K

◆ ValueType

using ValueType = V

◆ Super

using Super = TreeMapParent<TreeMap<K, V, MAP, COW>, COW>

◆ Child

using Child = typename std::conditional<COW, StrongCOWRef<TreeMap>, TreeMap>::type

◆ Ref

using Ref = typename std::conditional<COW, StrongCOWRef<TreeMap>, void>::type

◆ ChildrenMap

using ChildrenMap = typename MAP::template Type<K, Child>

Constructor & Destructor Documentation

◆ TreeMap() [1/2]

TreeMap ( )
default

◆ TreeMap() [2/2]

TreeMap ( TreeMap< K, V, MAP, COW > &&  src)

Member Function Documentation

◆ MAXON_OPERATOR_MOVE_ASSIGNMENT()

MAXON_OPERATOR_MOVE_ASSIGNMENT ( TreeMap< K, V, MAP, COW >  )

◆ CopyFrom()

Result<void> CopyFrom ( const TreeMap< K, V, MAP, COW > &  src)

◆ Flush()

void Flush ( )

◆ Reset()

void Reset ( )

◆ InsertChild()

Result<TreeMap&> InsertChild ( const K &  key,
Bool  withValue = true 
)

◆ MakeWritable() [1/2]

static ResultRef<TreeMap> MakeWritable ( StrongCOWRef< TreeMap< K, V, MAP, COW > > &  ref)
static

◆ MakeWritable() [2/2]

static ResultOk<TreeMap&> MakeWritable ( TreeMap< K, V, MAP, COW > &  ref)
static

◆ InsertEntry()

Result<TreeMap&> InsertEntry ( PATH &&  key,
Bool  withValue = true 
)

◆ Insert() [1/2]

Result<TreeMap&> Insert ( PATH &&  key,
const V &  value 
)

◆ Insert() [2/2]

Result<TreeMap&> Insert ( PATH &&  key,
V &&  value 
)

◆ InsertKey()

Result<V&> InsertKey ( PATH &&  key,
Bool created = BoolLValue() 
)

◆ GetTreeMap() [1/2]

static const TreeMap* GetTreeMap ( const TreeMap< K, V, MAP, COW > *  child)
static

◆ GetTreeMap() [2/2]

static const TreeMap* GetTreeMap ( const StrongCOWRef< TreeMap< K, V, MAP, COW > > *  child)
static

◆ FindChild() [1/2]

const TreeMap* FindChild ( const K &  key) const

◆ FindChild() [2/2]

TreeMap* FindChild ( const K &  key)

◆ FindEntry() [1/2]

const TreeMap* FindEntry ( PATH &&  key) const

◆ FindEntry() [2/2]

TreeMap* FindEntry ( PATH &&  key)

◆ FindFirstEntryWithValue()

const TreeMap* FindFirstEntryWithValue ( PATH &&  key) const

◆ FindClosestEntryWithValue()

const TreeMap* FindClosestEntryWithValue ( PATH &&  key) const

◆ FindValue() [1/2]

const V* FindValue ( PATH &&  key) const

◆ FindValue() [2/2]

V* FindValue ( PATH &&  key)

◆ Contains()

Bool Contains ( PATH &&  key) const

◆ Erase()

std::conditional<COW, Result<void>, ResultOk<void> >::type Erase ( PATH &&  key)

◆ ToString()

String ToString ( const FormatStatement fs = nullptr) const

◆ Get() [1/3]

const Opt<V>& Get ( ) const

◆ Get() [2/3]

Opt<V>& Get ( )

◆ MakeValid()

V& MakeValid ( )

◆ SetValue() [1/2]

void SetValue ( const V &  value)

◆ SetValue() [2/2]

void SetValue ( V &&  value)

◆ IsRoot()

Bool IsRoot ( ) const

◆ IsLeaf()

Bool IsLeaf ( ) const

◆ GetChildren() [1/2]

const ChildrenMap& GetChildren ( ) const

◆ GetChildren() [2/2]

ChildrenMap& GetChildren ( )

◆ GetKey()

const K* GetKey ( ) const

◆ operator==()

Bool operator== ( const TreeMap< K, V, MAP, COW > &  other) const

◆ operator!=()

Bool operator!= ( const TreeMap< K, V, MAP, COW > &  other) const

◆ IsPopulated()

Bool IsPopulated ( ) const

◆ IsEmpty()

Bool IsEmpty ( ) const

◆ HasSameStructure()

Bool HasSameStructure ( const TreeMap< K, V, MAP, COW > &  other) const

◆ ForEachPreOrder() [1/4]

Result<Bool> ForEachPreOrder ( OP &&  callback) const

◆ ForEachPreOrder() [2/4]

Result<Bool> ForEachPreOrder ( OP &&  callback,
PATH &&  path = PATH() 
) const

◆ ForEachPreOrder() [3/4]

Result<Bool> ForEachPreOrder ( OP &&  callback)

◆ ForEachPreOrder() [4/4]

Result<Bool> ForEachPreOrder ( OP &&  callback,
PATH &&  path = PATH() 
)

◆ ForEachPreOrderX()

Result<void> ForEachPreOrderX ( OP &&  callback,
PATH &&  path = PATH() 
)

◆ ForEachPostOrder() [1/4]

Result<Bool> ForEachPostOrder ( OP &&  callback) const

◆ ForEachPostOrder() [2/4]

Result<Bool> ForEachPostOrder ( OP &&  callback,
PATH &&  path = PATH() 
) const

◆ ForEachPostOrder() [3/4]

Result<Bool> ForEachPostOrder ( OP &&  callback)

◆ ForEachPostOrder() [4/4]

Result<Bool> ForEachPostOrder ( OP &&  callback,
PATH &&  path = PATH() 
)

◆ GetPath() [1/2]

Result<void> GetPath ( PATH &  path) const

◆ GetDepth()

Int GetDepth ( ) const

◆ GetPath() [2/2]

IndexIterator<const K&, const TreeMap, TreeMap> GetPath ( ) const

◆ Get() [3/3]

static const K& Get ( const TreeMap< K, V, MAP, COW > &  map,
Int  index 
)
static

◆ ToStringImpl()

void ToStringImpl ( String s,
BufferedBaseArray< K, 10 > &  path,
const FormatStatement fs 
) const
private

◆ EraseImpl()

std::conditional<COW, Result<Bool>, ResultOk<Bool> >::type EraseImpl ( IT &  beginIt,
const IT &  endIt 
)
private

Member Data Documentation

◆ _value

Opt<V> _value
private

◆ _children

ChildrenMap _children
private