13#include <ankerl/unordered_dense.h>
15#include <geomc/linalg/LinalgTypes.h>
16#include <geomc/shape/ShapeTypes.h>
17#include <geomc/Hash.h>
18#include <geomc/SmallStorage.h>
20#include <entt/entt.hpp>
27template <
typename K,
typename V,
typename Hasher=std::hash<K>,
typename KeyEqual=std::equal_to<K>>
28using DenseMap = ankerl::unordered_dense::map<K,V,Hasher,KeyEqual>;
31template <
typename T,
typename Hasher=std::hash<T>,
typename KeyEqual=std::equal_to<T>>
32using DenseSet = ankerl::unordered_dense::set<T,Hasher,KeyEqual>;
55template <
typename K,
typename V>
58 if (
i ==
m.end())
return std::nullopt;
66template <
typename K,
typename V>
69 return i ==
m.end() ?
v :
i->second;
76template <
typename K,
typename V,
typename Arg>
81 item->second =
V {std::forward<Arg>(
v)};
91template <
typename K,
typename V>
std::optional< V > get_or(const DenseMap< K, V > &m, const K &k)
Look up a key in a DenseMap, returning an optional value.
std::optional< V > remove_item(DenseMap< K, V > &m, const K &k)
Remove a key from a DenseMap.
ankerl::unordered_dense::set< T, Hasher, KeyEqual > DenseSet
High-performance hash set backed by ankerl::unordered_dense.
std::optional< V > exchange(DenseMap< K, V > &m, const K &k, Arg &&v)
Insert or replace a value in a DenseMap.
DfsOrder
Controls the visit order for depth-first traversal.
@ DeepFirst
Visit a node after its descendants (post-order).
@ ShallowFirst
Visit a node before its descendants (pre-order).
SiblingOrder
Controls the iteration order of siblings within a parent.
@ Forward
Iterate siblings in ascending position order.
@ Backward
Iterate siblings in descending position order.
ankerl::unordered_dense::map< K, V, Hasher, KeyEqual > DenseMap
High-performance hash map backed by ankerl::unordered_dense.
A system for maintaining parent-child relationships on entities.