1#ifndef SEAD_STR_TREE_MAP_H_
2#define SEAD_STR_TREE_MAP_H_
4#include <basis/seadAssert.h>
5#include <container/seadTreeMapImpl.h>
6#include <container/seadFreeList.h>
7#include <prim/seadDelegate.h>
8#include <prim/seadSafeString.h>
14template <s32 KeyStrN,
typename Value>
64 fun(node->key()
, node->value()
);
94 SEAD_ASSERT_MSG(
false,
"node_max[%d] must be larger than zero", node_max);
103 void* buf =
new (heap, alignment) u8[node_max *
sizeof(Node)];
104 setBuffer(node_max, buf);
108 SEAD_ASSERT_MSG(
false,
"node_max[%d] must be larger than zero", node_max);
135 return mSize >= mNodeMax;
150 Node* node =
static_cast<Node*>(TreeMapImpl<SafeString>::find(key));
152 return &node->value();
159 return find(key
) !=
nullptr;
168 TreeMapImpl<SafeString>::insert(node);
172 Value* p_value =
find(key
);
173 if (p_value !=
nullptr)
174 new (p_value) Value(value);
184 TreeMapImpl<SafeString>::forEach(
186 StrTreeMap<KeyStrN, Value>,
187 TreeMapNode<SafeString>*
190 &StrTreeMap<KeyStrN, Value>::eraseNodeForClear
195 mFreeList.init(mFreeList.work(),
sizeof(Node), mNodeMax);
206 static_cast<
Node*>(n)->value();
209 template <
typename T>
214 TreeMapImpl<SafeString>::forEach(
216 ForEachConstContext<T>,
217 TreeMapNode<SafeString>*
220 &ForEachConstContext<T>::call
231template <s32 KeyStrN,
typename Value, s32 N>
238 StrTreeMap<KeyStrN, Value>::setBuffer(N, mWork);
Definition seadStrTreeMap.h:233
void setBuffer(s32 node_max, void *buf)
void allocBuffer(s32 node_max, Heap *heap, s32 alignment=4)
u8 mWork[N *sizeof(typename StrTreeMap< KeyStrN, Value >::Node)]
Definition seadStrTreeMap.h:247
FixedStrTreeMap()
Definition seadStrTreeMap.h:235
Definition seadFreeList.h:10
void put(void *ptr)
Definition seadFreeList.h:54
void * work() const
Definition seadFreeList.h:52
void * get()
Definition seadFreeList.h:36
void cleanup()
Definition seadFreeList.h:46
Definition seadStrTreeMap.h:54
const T & fun
Definition seadStrTreeMap.h:68
ForEachConstContext(const T &afun)
Definition seadStrTreeMap.h:56
void call(TreeMapNode< SafeString > *n)
Definition seadStrTreeMap.h:61
Definition seadStrTreeMap.h:19
Node(const SafeString &akey, const Value &avalue, StrTreeMap< KeyStrN, Value > *map)
Definition seadStrTreeMap.h:21
Value mValue
Definition seadStrTreeMap.h:46
char mKeyStr[KeyStrN+1]
Definition seadStrTreeMap.h:48
StrTreeMap< KeyStrN, Value > * mMap
Definition seadStrTreeMap.h:47
Value & value()
Definition seadStrTreeMap.h:40
void erase_() override
Definition seadStrTreeMap.h:30
SafeString & key()
Definition seadStrTreeMap.h:35
Definition seadStrTreeMap.h:16
void freeBuffer()
Definition seadStrTreeMap.h:112
void insert(const SafeString &key, const Value &value)
Definition seadStrTreeMap.h:162
s32 size() const
Definition seadStrTreeMap.h:138
void setBuffer(s32 node_max, void *buf)
Definition seadStrTreeMap.h:78
Value * find(const SafeString &key) const
Definition seadStrTreeMap.h:148
s32 mNodeMax
Definition seadStrTreeMap.h:228
bool contains(const SafeString &key) const
Definition seadStrTreeMap.h:157
void forEach(const T &fun) const
Definition seadStrTreeMap.h:210
FreeList mFreeList
Definition seadStrTreeMap.h:226
void eraseNode(Node *node)
Definition seadStrTreeMap.h:198
StrTreeMap()
Definition seadStrTreeMap.h:72
bool isFull() const
Definition seadStrTreeMap.h:133
s32 maxSize() const
Definition seadStrTreeMap.h:143
bool isEmpty() const
Definition seadStrTreeMap.h:128
s32 mSize
Definition seadStrTreeMap.h:227
void clear()
Definition seadStrTreeMap.h:182
bool isBufferReady() const
Definition seadStrTreeMap.h:123
void eraseNodeForClear(TreeMapNode< SafeString > *n)
Definition seadStrTreeMap.h:204
void allocBuffer(s32 node_max, Heap *heap, s32 alignment=4)
Definition seadStrTreeMap.h:98
Definition seadTreeMapImpl.h:10
Definition seadAssert.h:44
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
BufferedSafeStringBase< char > BufferedSafeString
Definition seadSafeString.h:411
#define SEAD_ASSERT(condition)
Definition seadAssert.h:24
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33