OpenVDB 11.0.0

Loading...
Searching...
No Matches
InternalNode< ChildT, Log2Dim > Class Template Reference

Internal nodes of a VDB treedim(),. More...

`#include <nanovdb/NanoVDB.h>`

Inheritance diagram for InternalNode< ChildT, Log2Dim >:

## Classes
class | ChildIter
| Visits child nodes of this node only. More...
class | DenseIterator
| Visits all tile values and child nodes of this node. More...
class | ValueIterator
| Visits all tile values in this node, i.e. both inactive and active tiles. More...
class | ValueOnIterator
| Visits active tile values of this node only. More...

## Public Types
using | DataType = InternalData<ChildT, Log2Dim>
using | ValueType = typename DataType::ValueT
using | FloatType = typename DataType::StatsT
using | BuildType = typename DataType::BuildT
using | LeafNodeType = typename ChildT::LeafNodeType
using | ChildNodeType = ChildT
using | CoordType = typename ChildT::CoordType
template<uint32_t LOG2>
using | MaskType = typename ChildT::template MaskType<LOG2>
template<bool On>
using | MaskIterT = typename Mask<Log2Dim>::template Iterator<On>
using | ChildIterator = ChildIter<InternalNode>
using | ConstChildIterator = ChildIter<const InternalNode>
using | ValueT = typename ChildT::ValueType
using | BuildT = typename ChildT::BuildType
using | StatsT = typename ChildT::FloatType
using | CoordT = typename ChildT::CoordType
using | MaskT = typename ChildT::template MaskType<LOG2DIM>

## Public Member Functions
ChildIterator | beginChild ()
ConstChildIterator | cbeginChild () const
ValueIterator | beginValue () const
ValueIterator | cbeginValueAll () const
ValueOnIterator | beginValueOn () const
ValueOnIterator | cbeginValueOn () const
DenseIterator | beginDense () const
DenseIterator | cbeginChildAll () const
| InternalNode ()=delete
| This class cannot be constructed or deleted.
| InternalNode (const InternalNode &)=delete
InternalNode & | operator= (const InternalNode &)=delete
| ~InternalNode ()=delete
DataType * | data ()
const DataType * | data () const
const MaskType< LOG2DIM > & | valueMask () const
| Return a const reference to the bit mask of active voxels in this internal node.
const MaskType< LOG2DIM > & | getValueMask () const
const MaskType< LOG2DIM > & | childMask () const
| Return a const reference to the bit mask of child nodes in this internal node.
const MaskType< LOG2DIM > & | getChildMask () const
CoordType | origin () const
| Return the origin in index space of this leaf node.
const ValueType & | minimum () const
| Return a const reference to the minimum active value encoded in this internal node and any of its child nodes.
const ValueType & | maximum () const
| Return a const reference to the maximum active value encoded in this internal node and any of its child nodes.
const FloatType & | average () const
| Return a const reference to the average of all the active values encoded in this internal node and any of its child nodes.
FloatType | variance () const
| Return the variance of all the active values encoded in this internal node and any of its child nodes.
const FloatType & | stdDeviation () const
| Return a const reference to the standard deviation of all the active values encoded in this internal node and any of its child nodes.
const BBox< CoordType > & | bbox () const
| Return a const reference to the bounding box in index space of active values in this internal node and any of its child nodes.
ValueType | getFirstValue () const
| If the first entry in this node's table is a tile, return the tile's value. Otherwise, return the result of calling getFirstValue() on the child.
ValueType | getLastValue () const
| If the last entry in this node's table is a tile, return the tile's value. Otherwise, return the result of calling getLastValue() on the child.
ValueType | getValue (const CoordType &ijk) const
| Return the value of the given voxel.
bool | isActive (const CoordType &ijk) const
bool | probeValue (const CoordType &ijk, ValueType &v) const
| return the state and updates the value of the specified voxel
const LeafNodeType * | probeLeaf (const CoordType &ijk) const
ChildNodeType * | probeChild (const CoordType &ijk)
const ChildNodeType * | probeChild (const CoordType &ijk) const
void | localToGlobalCoord (Coord &ijk) const
| modifies local coordinates to global coordinates of a tile or child node
Coord | offsetToGlobalCoord (uint32_t n) const
bool | isActive () const
| Return true if this node or any of its child nodes contain active values.
template<typename OpT, typename... ArgsT>
auto | get (const CoordType &ijk, ArgsT &&... args) const
template<typename OpT, typename... ArgsT>
decltype(OpT::set(std::declval< InternalNode & >(), std::declval< uint32_t >(), std::declval< ArgsT >()...)) | set (const CoordType &ijk, ArgsT &&... args)
void | setChild (uint32_t n, const void *ptr)
template<typename ValueT>
void | setValue (uint32_t n, const ValueT &v)
ChildT * | getChild (uint32_t n)
| Returns a pointer to the child node at the specifed linear offset.
const ChildT * | getChild (uint32_t n) const
ValueT | getValue (uint32_t n) const
bool | isActive (uint32_t n) const
bool | isChild (uint32_t n) const
template<typename T>
void | setOrigin (const T &ijk)
const ValueT & | getMin () const
const ValueT & | getMax () const
void | setMin (const ValueT &v)
void | setMax (const ValueT &v)
void | setAvg (const StatsT &v)
void | setDev (const StatsT &v)

## Static Public Member Functions
static uint32_t | dim ()
| Return the dimension, in voxel units, of this internal node (typically 8*16 or 8*16*32)
static size_t | memUsage ()
| Return memory usage in bytes for the class.
static uint32_t | CoordToOffset (const CoordType &ijk)
| Return the linear offset corresponding to the given coordinate.
static Coord | OffsetToLocalCoord (uint32_t n)
static constexpr uint32_t | padding ()
| Return padding of this class in bytes, due to aliasing and 32B alignment.

## Public Attributes
BBox< CoordT > | mBBox
uint64_t | mFlags
MaskT | mValueMask
MaskT | mChildMask
ValueT | mMinimum
ValueT | mMaximum
StatsT | mAverage
StatsT | mStdDevi
Tile | mTable [1u<<(3 *LOG2DIM)]

## Static Public Attributes
static constexpr bool | FIXED_SIZE = DataType::FIXED_SIZE
static constexpr uint32_t | LOG2DIM = Log2Dim
static constexpr uint32_t | TOTAL = LOG2DIM + ChildT::TOTAL
static constexpr uint32_t | DIM = 1u << TOTAL
static constexpr uint32_t | SIZE = 1u << (3 * LOG2DIM)
static constexpr uint32_t | MASK = (1u << TOTAL) - 1u
static constexpr uint32_t | LEVEL = 1 + ChildT::LEVEL
static constexpr uint64_t | NUM_VALUES = uint64_t(1) << (3 * TOTAL)

## Friends
template<typename, int, int, int>
class | ReadAccessor
template<typename>
class | RootNode
template<typename, uint32_t>
class | InternalNode

## Detailed Description

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>
class nanovdb::InternalNode< ChildT, Log2Dim >

Internal nodes of a VDB treedim(),.

## Member Typedef Documentation

## ◆ BuildT

template<typename ChildT, uint32_t LOG2DIM>

using BuildT = typename ChildT::BuildType
| inherited

## ◆ BuildType

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using BuildType = typename DataType::BuildT

## ◆ ChildIterator

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using ChildIterator = ChildIter<InternalNode>

## ◆ ChildNodeType

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using ChildNodeType = ChildT

## ◆ ConstChildIterator

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using ConstChildIterator = ChildIter<const InternalNode>

## ◆ CoordT

template<typename ChildT, uint32_t LOG2DIM>

using CoordT = typename ChildT::CoordType
| inherited

## ◆ CoordType

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using CoordType = typename ChildT::CoordType

## ◆ DataType

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using DataType = InternalData<ChildT, Log2Dim>

## ◆ FloatType

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using FloatType = typename DataType::StatsT

## ◆ LeafNodeType

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using LeafNodeType = typename ChildT::LeafNodeType

## ◆ MaskIterT

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>
template<bool On>

using MaskIterT = typename Mask<Log2Dim>::template Iterator<On>

## ◆ MaskT

template<typename ChildT, uint32_t LOG2DIM>

using MaskT = typename ChildT::template MaskType<LOG2DIM>
| inherited

## ◆ MaskType

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>
template<uint32_t LOG2>

using MaskType = typename ChildT::template MaskType<LOG2>

## ◆ StatsT

template<typename ChildT, uint32_t LOG2DIM>

using StatsT = typename ChildT::FloatType
| inherited

## ◆ ValueT

template<typename ChildT, uint32_t LOG2DIM>

using ValueT = typename ChildT::ValueType
| inherited

## ◆ ValueType

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

using ValueType = typename DataType::ValueT

## Constructor & Destructor Documentation

## ◆ InternalNode() [1/2]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

InternalNode | ( |  | ) |
| delete

This class cannot be constructed or deleted.

## ◆ InternalNode() [2/2]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

InternalNode | ( | const InternalNode< ChildT, Log2Dim > & |  | ) |
| delete

## ◆ ~InternalNode()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

~InternalNode | ( |  | ) |
| delete

## Member Function Documentation

## ◆ average()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const FloatType & average | ( |  | ) | const
| inline

Return a const reference to the average of all the active values encoded in this internal node and any of its child nodes.

## ◆ bbox()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const BBox< CoordType > & bbox | ( |  | ) | const
| inline

Return a const reference to the bounding box in index space of active values in this internal node and any of its child nodes.

## ◆ beginChild()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ChildIterator beginChild | ( |  | ) |
| inline

## ◆ beginDense()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

DenseIterator beginDense | ( |  | ) | const
| inline

## ◆ beginValue()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ValueIterator beginValue | ( |  | ) | const
| inline

## ◆ beginValueOn()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ValueOnIterator beginValueOn | ( |  | ) | const
| inline

## ◆ cbeginChild()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ConstChildIterator cbeginChild | ( |  | ) | const
| inline

## ◆ cbeginChildAll()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

DenseIterator cbeginChildAll | ( |  | ) | const
| inline

## ◆ cbeginValueAll()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ValueIterator cbeginValueAll | ( |  | ) | const
| inline

## ◆ cbeginValueOn()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ValueOnIterator cbeginValueOn | ( |  | ) | const
| inline

## ◆ childMask()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const MaskType< LOG2DIM > & childMask | ( |  | ) | const
| inline

Return a const reference to the bit mask of child nodes in this internal node.

## ◆ CoordToOffset()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint32_t CoordToOffset | ( | const CoordType & | ijk | ) |
| inline static

Return the linear offset corresponding to the given coordinate.

## ◆ data() [1/2]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

DataType * data | ( |  | ) |
| inline

## ◆ data() [2/2]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const DataType * data | ( |  | ) | const
| inline

## ◆ dim()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint32_t dim | ( |  | ) |
| inline static

Return the dimension, in voxel units, of this internal node (typically 8*16 or 8*16*32)

## ◆ get()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>
template<typename OpT, typename... ArgsT>

auto get | ( | const CoordType & | ijk,
|  | ArgsT &&... | args ) const
| inline

## ◆ getChild() [1/2]

template<typename ChildT, uint32_t LOG2DIM>

ChildT * getChild | ( | uint32_t | n | ) |
| inline inherited

Returns a pointer to the child node at the specifed linear offset.

## ◆ getChild() [2/2]

template<typename ChildT, uint32_t LOG2DIM>

const ChildT * getChild | ( | uint32_t | n | ) | const
| inline inherited

## ◆ getChildMask()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const MaskType< LOG2DIM > & getChildMask | ( |  | ) | const
| inline

## ◆ getFirstValue()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ValueType getFirstValue | ( |  | ) | const
| inline

If the first entry in this node's table is a tile, return the tile's value. Otherwise, return the result of calling getFirstValue() on the child.

## ◆ getLastValue()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ValueType getLastValue | ( |  | ) | const
| inline

If the last entry in this node's table is a tile, return the tile's value. Otherwise, return the result of calling getLastValue() on the child.

## ◆ getMax()

template<typename ChildT, uint32_t LOG2DIM>

const ValueT & getMax | ( |  | ) | const
| inline inherited

## ◆ getMin()

template<typename ChildT, uint32_t LOG2DIM>

const ValueT & getMin | ( |  | ) | const
| inline inherited

## ◆ getValue() [1/2]

template<typename ChildT, uint32_t LOG2DIM>

ValueT getValue | ( | uint32_t | n | ) | const
| inline inherited

## ◆ getValue() [2/2]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ValueType getValue | ( | const CoordType & | ijk | ) | const
| inline

Return the value of the given voxel.

## ◆ getValueMask()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const MaskType< LOG2DIM > & getValueMask | ( |  | ) | const
| inline

## ◆ isActive() [1/3]

template<typename ChildT, uint32_t LOG2DIM>

bool isActive | ( | uint32_t | n | ) | const
| inline inherited

## ◆ isActive() [2/3]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

bool isActive | ( |  | ) | const
| inline

Return true if this node or any of its child nodes contain active values.

## ◆ isActive() [3/3]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

bool isActive | ( | const CoordType & | ijk | ) | const
| inline

## ◆ isChild()

template<typename ChildT, uint32_t LOG2DIM>

bool isChild | ( | uint32_t | n | ) | const
| inline inherited

## ◆ localToGlobalCoord()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

void localToGlobalCoord | ( | Coord & | ijk | ) | const
| inline

modifies local coordinates to global coordinates of a tile or child node

## ◆ maximum()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const ValueType & maximum | ( |  | ) | const
| inline

Return a const reference to the maximum active value encoded in this internal node and any of its child nodes.

## ◆ memUsage()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

size_t memUsage | ( |  | ) |
| inline static

Return memory usage in bytes for the class.

## ◆ minimum()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const ValueType & minimum | ( |  | ) | const
| inline

Return a const reference to the minimum active value encoded in this internal node and any of its child nodes.

## ◆ offsetToGlobalCoord()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

Coord offsetToGlobalCoord | ( | uint32_t | n | ) | const
| inline

## ◆ OffsetToLocalCoord()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

Coord OffsetToLocalCoord | ( | uint32_t | n | ) |
| inline static

Returns
  the local coordinate of the n'th tile or child node

## ◆ operator=()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

InternalNode & operator= | ( | const InternalNode< ChildT, Log2Dim > & |  | ) |
| delete

## ◆ origin()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

CoordType origin | ( |  | ) | const
| inline

Return the origin in index space of this leaf node.

## ◆ padding()

template<typename ChildT, uint32_t LOG2DIM>

constexpr uint32_t padding | ( |  | ) |
| inline static constexpr inherited

Return padding of this class in bytes, due to aliasing and 32B alignment.

Note
  The extra bytes are not necessarily at the end, but can come from aliasing of individual data members.

## ◆ probeChild() [1/2]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

ChildNodeType * probeChild | ( | const CoordType & | ijk | ) |
| inline

## ◆ probeChild() [2/2]

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const ChildNodeType * probeChild | ( | const CoordType & | ijk | ) | const
| inline

## ◆ probeLeaf()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const LeafNodeType * probeLeaf | ( | const CoordType & | ijk | ) | const
| inline

## ◆ probeValue()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

bool probeValue | ( | const CoordType & | ijk,
|  | ValueType & | v ) const
| inline

return the state and updates the value of the specified voxel

## ◆ set()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>
template<typename OpT, typename... ArgsT>

decltype(OpT::set(std::declval< InternalNode & >(), std::declval< uint32_t >(), std::declval< ArgsT >()...)) set | ( | const CoordType & | ijk,
|  | ArgsT &&... | args )
| inline

## ◆ setAvg()

template<typename ChildT, uint32_t LOG2DIM>

void setAvg | ( | const StatsT & | v | ) |
| inline inherited

## ◆ setChild()

template<typename ChildT, uint32_t LOG2DIM>

void setChild | ( | uint32_t | n,
|  | const void * | ptr )
| inline inherited

## ◆ setDev()

template<typename ChildT, uint32_t LOG2DIM>

void setDev | ( | const StatsT & | v | ) |
| inline inherited

## ◆ setMax()

template<typename ChildT, uint32_t LOG2DIM>

void setMax | ( | const ValueT & | v | ) |
| inline inherited

## ◆ setMin()

template<typename ChildT, uint32_t LOG2DIM>

void setMin | ( | const ValueT & | v | ) |
| inline inherited

## ◆ setOrigin()

template<typename ChildT, uint32_t LOG2DIM>
template<typename T>

void setOrigin | ( | const T & | ijk | ) |
| inline inherited

## ◆ setValue()

template<typename ChildT, uint32_t LOG2DIM>
template<typename ValueT>

void setValue | ( | uint32_t | n,
|  | const ValueT & | v )
| inline inherited

## ◆ stdDeviation()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const FloatType & stdDeviation | ( |  | ) | const
| inline

Return a const reference to the standard deviation of all the active values encoded in this internal node and any of its child nodes.

## ◆ valueMask()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

const MaskType< LOG2DIM > & valueMask | ( |  | ) | const
| inline

Return a const reference to the bit mask of active voxels in this internal node.

## ◆ variance()

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

FloatType variance | ( |  | ) | const
| inline

Return the variance of all the active values encoded in this internal node and any of its child nodes.

## Friends And Related Symbol Documentation

## ◆ InternalNode

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>
template<typename, uint32_t>

friend class InternalNode
| friend

## ◆ ReadAccessor

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>
template<typename, int, int, int>

friend class ReadAccessor
| friend

## ◆ RootNode

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>
template<typename>

friend class RootNode
| friend

## Member Data Documentation

## ◆ DIM

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint32_t DIM = 1u << TOTAL
| static constexpr

## ◆ FIXED_SIZE

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

bool FIXED_SIZE = DataType::FIXED_SIZE
| static constexpr

## ◆ LEVEL

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint32_t LEVEL = 1 + ChildT::LEVEL
| static constexpr

## ◆ LOG2DIM

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint32_t LOG2DIM = Log2Dim
| static constexpr

## ◆ MASK

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint32_t MASK = (1u << TOTAL) - 1u
| static constexpr

## ◆ mAverage

template<typename ChildT, uint32_t LOG2DIM>

StatsT mAverage
| inherited

## ◆ mBBox

template<typename ChildT, uint32_t LOG2DIM>

BBox<CoordT> mBBox
| inherited

## ◆ mChildMask

template<typename ChildT, uint32_t LOG2DIM>

MaskT mChildMask
| inherited

## ◆ mFlags

template<typename ChildT, uint32_t LOG2DIM>

uint64_t mFlags
| inherited

## ◆ mMaximum

template<typename ChildT, uint32_t LOG2DIM>

ValueT mMaximum
| inherited

## ◆ mMinimum

template<typename ChildT, uint32_t LOG2DIM>

ValueT mMinimum
| inherited

## ◆ mStdDevi

template<typename ChildT, uint32_t LOG2DIM>

StatsT mStdDevi
| inherited

## ◆ mTable

template<typename ChildT, uint32_t LOG2DIM>

Tile mTable[1u<<(3 *LOG2DIM)]
| inherited

## ◆ mValueMask

template<typename ChildT, uint32_t LOG2DIM>

MaskT mValueMask
| inherited

## ◆ NUM_VALUES

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint64_t NUM_VALUES = uint64_t(1) << (3 * TOTAL)
| static constexpr

## ◆ SIZE

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint32_t SIZE = 1u << (3 * LOG2DIM)
| static constexpr

## ◆ TOTAL

template<typename ChildT, uint32_t Log2Dim = ChildT::LOG2DIM + 1>

uint32_t TOTAL = LOG2DIM + ChildT::TOTAL
| static constexpr