6#ifndef OPENVDB_TREE_TREE_HAS_BEEN_INCLUDED 
    7#define OPENVDB_TREE_TREE_HAS_BEEN_INCLUDED 
   23#include <tbb/concurrent_hash_map.h> 
   55    template<
typename TreeType>
 
   56    bool isType()
 const { 
return (this->
type() == TreeType::treeType()); }
 
  105#if OPENVDB_ABI_VERSION_NUMBER >= 12 
  120#if OPENVDB_ABI_VERSION_NUMBER >= 12 
  128#if OPENVDB_ABI_VERSION_NUMBER >= 12 
  131    virtual std::vector<Index32> 
nodeCount() 
const = 0;
 
  134#if OPENVDB_ABI_VERSION_NUMBER >= 12 
  160    virtual void readTopology(std::istream&, 
bool saveFloatAsHalf = 
false);
 
  164    virtual void writeTopology(std::ostream&, 
bool saveFloatAsHalf = 
false) 
const;
 
  167    virtual void readBuffers(std::istream&, 
bool saveFloatAsHalf = 
false) = 0;
 
  177    virtual void writeBuffers(std::ostream&, 
bool saveFloatAsHalf = 
false) 
const = 0;
 
  186    virtual void print(std::ostream& os = std::cout, 
int verboseLevel = 1) 
const;
 
 
  193template<
typename _RootNodeType>
 
  218    template<
typename OtherValueType>
 
  239    template<
typename OtherRootType>
 
  254    template<
typename OtherTreeType>
 
  255    Tree(
const OtherTreeType& other,
 
 
  275    template<
typename OtherTreeType>
 
  313    template<
typename OtherRootNodeType>
 
  333    void readTopology(std::istream&, 
bool saveFloatAsHalf = 
false) 
override;
 
  337    void writeTopology(std::ostream&, 
bool saveFloatAsHalf = 
false) 
const override;
 
  339    void readBuffers(std::istream&, 
bool saveFloatAsHalf = 
false) 
override;
 
  349    void writeBuffers(std::ostream&, 
bool saveFloatAsHalf = 
false) 
const override;
 
  351    void print(std::ostream& os = std::cout, 
int verboseLevel = 1) 
const override;
 
  362#if OPENVDB_ABI_VERSION_NUMBER >= 12 
  365    Index32 leafCount()
 const override { 
return static_cast<Index32>(mRoot.leafCount()); }
 
  370#if OPENVDB_ABI_VERSION_NUMBER >= 12 
  373        std::vector<Index64> vec(
DEPTH, 0);
 
  374        mRoot.nodeCount( vec );
 
 
  378    std::vector<Index32> nodeCount()
 const override 
  380        std::vector<Index32> vec(DEPTH, 0);
 
  382        mRoot.nodeCount( vec );
 
  388#if OPENVDB_ABI_VERSION_NUMBER >= 12 
  391    Index32 nonLeafCount()
 const override { 
return static_cast<Index32>(mRoot.nonLeafCount()); }
 
  461    template<
typename ModifyOp>
 
  483    template<
typename ModifyOp>
 
  507#if OPENVDB_ABI_VERSION_NUMBER >= 12 
  555        mRoot.prune(tolerance);
 
 
  575    template<
typename NodeT>
 
  624    template<
typename ArrayT> 
void getNodes(ArrayT& array);
 
  625    template<
typename ArrayT> 
void getNodes(ArrayT& array) 
const;
 
  651    template<
typename ArrayT>
 
  653    template<
typename ArrayT>
 
  657        mRoot.stealNodes(array, value, state);
 
 
  762    template<
typename OtherRootNodeType>
 
  778    template<
typename OtherRootNodeType>
 
  791    template<
typename OtherRootNodeType>
 
  838    template<
typename CombineOp>
 
  840    template<
typename CombineOp>
 
  881    template<
typename ExtendedCombineOp>
 
  883    template<
typename ExtendedCombineOp>
 
  914    template<
typename CombineOp, 
typename OtherTreeType >
 
  916    template<
typename CombineOp, 
typename OtherTreeType >
 
  992    template<
typename ExtendedCombineOp, 
typename OtherTreeType >
 
  995    template<
typename ExtendedCombineOp, 
typename OtherTreeType >
 
 1081    template<
typename CIterT> CIterT 
cbegin() 
const;
 
 1093    template<
typename NodeType>
 
 1096            : 
mNodes(nodes.
empty() ? nullptr : &nodes.front()) { }
 
 
 1098            for (
size_t n = range.begin(), N = range.end(); n < N; ++n) {
 
 
 
 
 1118template<
typename T, Index N1=4, Index N2=3>
 
 1128template<
typename T, Index N1=5, Index N2=4, Index N3=3>
 
 1137template<
typename T, Index N1=6, Index N2=5, Index N3=4, Index N4=3>
 
 1150    int32_t bufferCount;
 
 1151    is.read(
reinterpret_cast<char*
>(&bufferCount), 
sizeof(int32_t));
 
 1152    if (bufferCount != 1) 
OPENVDB_LOG_WARN(
"multi-buffer trees are no longer supported");
 
 
 1159    int32_t bufferCount = 1;
 
 1160    os.write(
reinterpret_cast<char*
>(&bufferCount), 
sizeof(int32_t));
 
 
 1167    os << 
"    Tree Type: " << 
type()
 
 1171       << 
"    Leaf Node Count: " << 
leafCount() << std::endl
 
 1172       << 
"    Non-leaf Node Count: " << 
nonLeafCount() << std::endl;
 
 
 1187template<
typename TreeT> 
struct TreeIterTraits<TreeT, typename TreeT::RootNodeType::ChildOnIter> {
 
 1188    static typename TreeT::RootNodeType::ChildOnIter 
begin(TreeT& 
tree) {
 
 1189        return tree.beginRootChildren();
 
 
 
 1193template<
typename TreeT> 
struct TreeIterTraits<TreeT, typename TreeT::RootNodeType::ChildOnCIter> {
 
 1194    static typename TreeT::RootNodeType::ChildOnCIter 
begin(
const TreeT& 
tree) {
 
 1195        return tree.cbeginRootChildren();
 
 
 
 1199template<
typename TreeT> 
struct TreeIterTraits<TreeT, typename TreeT::RootNodeType::ChildOffIter> {
 
 1200    static typename TreeT::RootNodeType::ChildOffIter 
begin(TreeT& 
tree) {
 
 1201        return tree.beginRootTiles();
 
 
 
 1205template<
typename TreeT> 
struct TreeIterTraits<TreeT, typename TreeT::RootNodeType::ChildOffCIter> {
 
 1206    static typename TreeT::RootNodeType::ChildOffCIter 
begin(
const TreeT& 
tree) {
 
 1207        return tree.cbeginRootTiles();
 
 
 
 1211template<
typename TreeT> 
struct TreeIterTraits<TreeT, typename TreeT::RootNodeType::ChildAllIter> {
 
 1212    static typename TreeT::RootNodeType::ChildAllIter 
begin(TreeT& 
tree) {
 
 1213        return tree.beginRootDense();
 
 
 
 1217template<
typename TreeT> 
struct TreeIterTraits<TreeT, typename TreeT::RootNodeType::ChildAllCIter> {
 
 1218    static typename TreeT::RootNodeType::ChildAllCIter 
begin(
const TreeT& 
tree) {
 
 1219        return tree.cbeginRootDense();
 
 
 
 1228    static typename TreeT::NodeCIter 
begin(
const TreeT& 
tree) { 
return tree.cbeginNode(); }
 
 
 1236    static typename TreeT::LeafCIter 
begin(
const TreeT& 
tree) { 
return tree.cbeginLeaf(); }
 
 
 1240    static typename TreeT::ValueOnIter 
begin(TreeT& 
tree) { 
return tree.beginValueOn(); }
 
 
 1244    static typename TreeT::ValueOnCIter 
begin(
const TreeT& 
tree) { 
return tree.cbeginValueOn(); }
 
 
 1248    static typename TreeT::ValueOffIter 
begin(TreeT& 
tree) { 
return tree.beginValueOff(); }
 
 
 1251template<
typename TreeT> 
struct TreeIterTraits<TreeT, typename TreeT::ValueOffCIter> {
 
 1252    static typename TreeT::ValueOffCIter 
begin(
const TreeT& 
tree) { 
return tree.cbeginValueOff(); }
 
 
 1256    static typename TreeT::ValueAllIter 
begin(TreeT& 
tree) { 
return tree.beginValueAll(); }
 
 
 1259template<
typename TreeT> 
struct TreeIterTraits<TreeT, typename TreeT::ValueAllCIter> {
 
 1260    static typename TreeT::ValueAllCIter 
begin(
const TreeT& 
tree) { 
return tree.cbeginValueAll(); }
 
 
 1264template<
typename RootNodeType>
 
 1265template<
typename IterT>
 
 1273template<
typename RootNodeType>
 
 1274template<
typename IterT>
 
 1285template<
typename RootNodeType>
 
 1291    mRoot.readTopology(is, saveFloatAsHalf);
 
 
 1295template<
typename RootNodeType>
 
 1300    mRoot.writeTopology(os, saveFloatAsHalf);
 
 
 1304template<
typename RootNodeType>
 
 1309    mRoot.readBuffers(is, saveFloatAsHalf);
 
 
 1313template<
typename RootNodeType>
 
 1318    mRoot.readBuffers(is, bbox, saveFloatAsHalf);
 
 
 1322template<
typename RootNodeType>
 
 1328        it->getValue(
Index(0));
 
 
 1333template<
typename RootNodeType>
 
 1337    mRoot.writeBuffers(os, saveFloatAsHalf);
 
 
 1341template<
typename RootNodeType>
 
 1342template<
typename ArrayT>
 
 1346    using NodeT = 
typename std::remove_pointer<typename ArrayT::value_type>::type;
 
 1347    static_assert(!std::is_same<NodeT, RootNodeType>::value,
 
 1348        "getNodes() does not work for the RootNode. Use Tree::root()");
 
 1349    mRoot.getNodes(array);
 
 
 1353template<
typename RootNodeType>
 
 1354template<
typename ArrayT>
 
 1358    using NodeT = 
typename std::remove_pointer<typename ArrayT::value_type>::type;
 
 1359    static_assert(!std::is_same<NodeT, const RootNodeType>::value,
 
 1360        "getNodes() does not work for the RootNode. Use Tree::root()");
 
 1361    mRoot.getNodes(array);
 
 
 1365template<
typename RootNodeType>
 
 1369    std::vector<LeafNodeType*> leafnodes;
 
 1372    tbb::parallel_for(tbb::blocked_range<size_t>(0, leafnodes.size()),
 
 1375    std::vector<typename RootNodeType::ChildNodeType*> internalNodes;
 
 1378    tbb::parallel_for(tbb::blocked_range<size_t>(0, internalNodes.size()),
 
 
 1390template<
typename RootNodeType>
 
 1397template<
typename RootNodeType>
 
 1404template<
typename RootNodeType>
 
 1411template<
typename RootNodeType>
 
 1418template<
typename RootNodeType>
 
 1425template<
typename RootNodeType>
 
 1429    typename AccessorRegistry::accessor a;
 
 
 1434template<
typename RootNodeType>
 
 1438    typename ConstAccessorRegistry::accessor a;
 
 
 1443template<
typename RootNodeType>
 
 1451template<
typename RootNodeType>
 
 1459template<
typename RootNodeType>
 
 1466        if (it->first) it->first->clear();
 
 1472        if (it->first) it->first->clear();
 
 
 1477template<
typename RootNodeType>
 
 1485        it->first->release();
 
 1493        it->first->release();
 
 
 1502template<
typename RootNodeType>
 
 1503inline const typename RootNodeType::ValueType&
 
 1506    return mRoot.getValue(xyz);
 
 
 1510template<
typename RootNodeType>
 
 1511template<
typename AccessT>
 
 1512inline const typename RootNodeType::ValueType&
 
 1515    return accessor.getValue(xyz);
 
 
 1519template<
typename RootNodeType>
 
 1523    return mRoot.getValueDepth(xyz);
 
 
 1527template<
typename RootNodeType>
 
 1531    mRoot.setValueOff(xyz);
 
 
 1535template<
typename RootNodeType>
 
 1539    mRoot.setValueOff(xyz, value);
 
 
 1543template<
typename RootNodeType>
 
 1547    mRoot.setActiveState(xyz, on);
 
 
 1551template<
typename RootNodeType>
 
 1555    mRoot.setValueOn(xyz, value);
 
 
 1558template<
typename RootNodeType>
 
 1562    mRoot.setValueOnly(xyz, value);
 
 
 1565template<
typename RootNodeType>
 
 1566template<
typename AccessT>
 
 1570    accessor.setValue(xyz, value);
 
 
 1574template<
typename RootNodeType>
 
 1578    mRoot.setActiveState(xyz, 
true);
 
 
 1582template<
typename RootNodeType>
 
 1586    mRoot.setValueOn(xyz, value);
 
 
 1590template<
typename RootNodeType>
 
 1591template<
typename ModifyOp>
 
 1595    mRoot.modifyValue(xyz, op);
 
 
 1599template<
typename RootNodeType>
 
 1600template<
typename ModifyOp>
 
 1604    mRoot.modifyValueAndActiveState(xyz, op);
 
 
 1608template<
typename RootNodeType>
 
 1612    return mRoot.probeValue(xyz, value);
 
 
 1619template<
typename RootNodeType>
 
 1624    mRoot.addTile(level, xyz, value, active);
 
 
 1628template<
typename RootNodeType>
 
 1629template<
typename NodeT>
 
 1638template<
typename RootNodeType>
 
 1639inline typename RootNodeType::LeafNodeType*
 
 1642    return mRoot.touchLeaf(xyz);
 
 
 1646template<
typename RootNodeType>
 
 1647inline typename RootNodeType::LeafNodeType*
 
 1650    return mRoot.probeLeaf(xyz);
 
 
 1654template<
typename RootNodeType>
 
 1655inline const typename RootNodeType::LeafNodeType*
 
 1658    return mRoot.probeConstLeaf(xyz);
 
 
 1662template<
typename RootNodeType>
 
 1663template<
typename NodeType>
 
 1671template<
typename RootNodeType>
 
 1672template<
typename NodeType>
 
 1673inline const NodeType*
 
 1680template<
typename RootNodeType>
 
 1681template<
typename NodeType>
 
 1682inline const NodeType*
 
 1692template<
typename RootNodeType>
 
 1697    return mRoot.clip(bbox);
 
 
 1701template<
typename RootNodeType>
 
 1709        if (!leaf->isAllocated()) {
 
 1710            this->
addTile(0, leaf->origin(), this->background(), 
false);
 
 
 1715#if OPENVDB_ABI_VERSION_NUMBER >= 12 
 1716template<
typename RootNodeType>
 
 1721    for (
auto it = this->
cbeginLeaf(); it; ++it) 
if (!it->isAllocated()) ++sum;
 
 
 1725template<
typename RootNodeType>
 
 1730    for (
auto it = this->cbeginLeaf(); it; ++it) 
if (!it->isAllocated()) ++sum;
 
 1736template<
typename RootNodeType>
 
 1741    return mRoot.sparseFill(bbox, value, active);
 
 
 1745template<
typename RootNodeType>
 
 1750    return mRoot.denseFill(bbox, value, active);
 
 
 1754template<
typename RootNodeType>
 
 1759    mRoot.voxelizeActiveTiles(threaded);
 
 
 1763template<
typename RootNodeType>
 
 1771        if (result->typeName() == MetadataT::staticTypeName()) {
 
 1772            MetadataT* m = 
static_cast<MetadataT*
>(result.get());
 
 1773            m->value() = 
mRoot.background();
 
 
 1783template<
typename RootNodeType>
 
 1800template<
typename RootNodeType>
 
 1801template<
typename OtherRootNodeType>
 
 1806    mRoot.topologyUnion(other.
root(), preserveTiles);
 
 
 1809template<
typename RootNodeType>
 
 1810template<
typename OtherRootNodeType>
 
 1815    mRoot.topologyIntersection(other.
root());
 
 
 1818template<
typename RootNodeType>
 
 1819template<
typename OtherRootNodeType>
 
 1832template<
typename AValueT, 
typename CombineOp, 
typename BValueT = AValueT>
 
 1845template<
typename RootNodeType>
 
 1846template<
typename CombineOp>
 
 1857template<
typename RootNodeType>
 
 1858template<
typename CombineOp>
 
 1867template<
typename RootNodeType>
 
 1868template<
typename ExtendedCombineOp>
 
 1879template<
typename RootNodeType>
 
 1880template<
typename ExtendedCombineOp>
 
 1889template<
typename RootNodeType>
 
 1890template<
typename CombineOp, 
typename OtherTreeType>
 
 1901template<
typename RootNodeType>
 
 1902template<
typename CombineOp, 
typename OtherTreeType>
 
 1911template<
typename RootNodeType>
 
 1912template<
typename ExtendedCombineOp, 
typename OtherTreeType>
 
 1915    ExtendedCombineOp& op, 
bool prune)
 
 
 1925template<
typename RootNodeType>
 
 1926template<
typename ExtendedCombineOp, 
typename OtherTreeType>
 
 1929    const ExtendedCombineOp& op, 
bool prune)
 
 
 1939template<
typename RootNodeType>
 
 1943    static std::string sTreeTypeName = []()
 
 1946        std::vector<Index> dims;
 
 1948        std::ostringstream ostr;
 
 1950        for (
size_t i = 1, N = dims.size(); i < N; ++i) { 
 
 1951            ostr << 
"_" << dims[i];
 
 1955    return sTreeTypeName;
 
 
 1959template<
typename RootNodeType>
 
 1960template<
typename OtherRootNodeType>
 
 1964    return mRoot.hasSameTopology(other.
root());
 
 
 1968template<
typename RootNodeType>
 
 1974    if (this->
empty()) 
return false;  
 
 1976    mRoot.evalActiveBoundingBox(bbox, 
false);
 
 1978    return !bbox.
empty();
 
 
 1981template<
typename RootNodeType>
 
 1987    if (this->
empty()) 
return false;  
 
 1989    mRoot.evalActiveBoundingBox(bbox, 
true);
 
 1991    return !bbox.
empty();
 
 
 1995template<
typename RootNodeType>
 
 2006template<
typename RootNodeType>
 
 2017template<
typename RootNodeType>
 
 2023        minVal = maxVal = *
iter;
 
 
 2033template<
typename RootNodeType>
 
 2038    RootNodeType::getNodeLog2Dims(dims);
 
 
 2042template<
typename RootNodeType>
 
 2046    if (verboseLevel <= 0) 
return;
 
 2051        std::streamsize savedPrecision;
 
 2052        OnExit(std::ostream& _os): os(_os), savedPrecision(os.precision()) {}
 
 2053        ~OnExit() { os.precision(savedPrecision); }
 
 2055    OnExit restorePrecision(os);
 
 2057    std::vector<Index> dims;
 
 2060    os << 
"Information about Tree:\n" 
 2061        << 
"  Type: " << this->
type() << 
"\n";
 
 2063    os << 
"  Configuration:\n";
 
 2065    if (verboseLevel <= 1) {
 
 2067        os << 
"    Root(" << 
mRoot.getTableSize() << 
")";
 
 2068        if (dims.size() > 1) {
 
 2069            for (
size_t i = 1, N = dims.size() - 1; i < N; ++i) {
 
 2070                os << 
", Internal(" << (1 << dims[i]) << 
"^3)";
 
 2072            os << 
", Leaf(" << (1 << dims.back()) << 
"^3)\n";
 
 2074        os << 
"  Background value: " << 
mRoot.background() << 
"\n";
 
 2081    if (verboseLevel > 3) {
 
 2084        minVal = extrema.
min();
 
 2085        maxVal = extrema.
max();
 
 2096    os << 
"    Root(1 x " << 
mRoot.getTableSize() << 
")";
 
 2097    if (dims.size() >= 2) {
 
 2098        for (
size_t i = 1, N = dims.size() - 1; i < N; ++i) {
 
 2100            os << 
" x " << (1 << dims[i]) << 
"^3)";
 
 2103        os << 
" x " << (1 << dims.back()) << 
"^3)\n";
 
 2105    os << 
"  Background value: " << 
mRoot.background() << 
"\n";
 
 2109    if (verboseLevel > 3) {
 
 2110        os << 
"  Min value: " << minVal << 
"\n";
 
 2111        os << 
"  Max value: " << maxVal << 
"\n";
 
 2124    if (numActiveVoxels) { 
 
 2128        totalVoxels = dim.
x() * uint64_t(dim.
y()) * dim.
z();
 
 2130        os << 
"  Bounding box of active voxels: " << bbox << 
"\n";
 
 2131        os << 
"  Dimensions of active voxels:   " 
 2132            << dim[0] << 
" x " << dim[1] << 
" x " << dim[2] << 
"\n";
 
 2134        const double activeRatio = (100.0 * double(numActiveVoxels)) / 
double(totalVoxels);
 
 2135        os << 
"  Percentage of active voxels:   " << std::setprecision(3) << activeRatio << 
"%\n";
 
 2138            const double fillRatio = (100.0 * double(numActiveLeafVoxels))
 
 2139                / (
double(
leafCount) * 
double(LeafNodeType::NUM_VOXELS));
 
 2140            os << 
"  Average leaf node fill ratio:  " << fillRatio << 
"%\n";
 
 2143        if (verboseLevel > 2) {
 
 2145            for (
auto it = this->
cbeginLeaf(); it; ++it) 
if (!it->isAllocated()) ++sum;
 
 2146            os << 
"  Number of unallocated nodes:   " 
 2148               << (100.0 * double(sum) / double(totalNodeCount)) << 
"%)\n";
 
 2151        os << 
"  Tree is empty!\n";
 
 2155    if (verboseLevel == 2) 
return;
 
 2160        denseMem = 
sizeof(
ValueType) * totalVoxels,
 
 2161        voxelsMem = 
sizeof(
ValueType) * numActiveLeafVoxels;
 
 2164    os << 
"Memory footprint:\n";
 
 2168    if (numActiveVoxels) {
 
 2170        os << 
"  Actual footprint is " << (100.0 * double(actualMem) / double(denseMem))
 
 2171            << 
"% of an equivalent dense volume\n";
 
 2172        os << 
"  Leaf voxel footprint is " << (100.0 * double(voxelsMem) / double(actualMem))
 
 2173           << 
"% of actual footprint\n";
 
 
#define OPENVDB_ASSERT(X)
Definition Assert.h:41
Functions to count tiles, nodes or voxels in a grid.
Internal table nodes for OpenVDB trees.
General-purpose arithmetic and comparison routines, most of which accept arbitrary value types (or at...
The root node of an OpenVDB tree.
ValueAccessors are designed to help accelerate accesses into the OpenVDB Tree structures by storing c...
This struct collects both input and output arguments to "grid combiner" functors used with the tree::...
Definition Types.h:569
const AValueType & result() const
Get the output value.
Definition Types.h:613
const BValueType & b() const
Get the B input value.
Definition Types.h:610
const AValueType & a() const
Get the A input value.
Definition Types.h:608
Definition Exceptions.h:61
Tag dispatch class that distinguishes topology copy constructors from deep copy constructors.
Definition Types.h:683
Axis-aligned bounding box of signed integer coordinates.
Definition Coord.h:252
Coord extents() const
Definition Coord.h:385
bool empty() const
Return true if this bounding box is empty (i.e., encloses no coordinates).
Definition Coord.h:359
void reset()
Definition Coord.h:330
Signed (x, y, z) 32-bit integer coordinates.
Definition Coord.h:26
Int32 y() const
Definition Coord.h:132
Int32 x() const
Definition Coord.h:131
Int32 z() const
Definition Coord.h:133
double min() const
Return the minimum value.
Definition Stats.h:122
double max() const
Return the maximum value.
Definition Stats.h:125
Templated class to compute the minimum and maximum values.
Definition Stats.h:32
Base class for tree-traversal iterators over all leaf nodes (but not leaf voxels)
Definition TreeIterator.h:1188
Base class for tree-traversal iterators over all nodes.
Definition TreeIterator.h:937
DenseIter< RootNode, MapIter, ChildType, ValueType > ChildAllIter
Definition RootNode.h:366
typename ChildType::LeafNodeType LeafNodeType
Definition RootNode.h:43
ChildIter< RootNode, MapIter, ChildOnPred, ChildType > ChildOnIter
Definition RootNode.h:362
ValueIter< const RootNode, MapCIter, ChildOffPred, ValueType > ChildOffCIter
Definition RootNode.h:365
static const Index LEVEL
Definition RootNode.h:47
typename ChildType::ValueType ValueType
Definition RootNode.h:44
typename ChildType::BuildType BuildType
Definition RootNode.h:45
DenseIter< const RootNode, MapCIter, const ChildType, const ValueType > ChildAllCIter
Definition RootNode.h:367
ValueIter< RootNode, MapIter, ChildOffPred, const ValueType > ChildOffIter
Definition RootNode.h:364
ChildIter< const RootNode, MapCIter, ChildOnPred, const ChildType > ChildOnCIter
Definition RootNode.h:363
virtual Name valueType() const =0
Return the name of the type of a voxel's value (e.g., "float" or "vec3d").
virtual const Name & type() const =0
Return the name of this tree's type.
virtual void writeTopology(std::ostream &, bool saveFloatAsHalf=false) const
Write the tree topology to a stream.
Definition Tree.h:1157
virtual Index64 unallocatedLeafCount() const =0
Return the total number of unallocated leaf nodes residing in this tree.
virtual ~TreeBase()=default
virtual Index64 activeLeafVoxelCount() const =0
Return the number of active voxels stored in leaf nodes.
virtual std::vector< Index64 > nodeCount() const =0
virtual void readBuffers(std::istream &, bool saveFloatAsHalf=false)=0
Read all data buffers for this tree.
bool isType() const
Return true if this tree is of the same type as the template parameter.
Definition Tree.h:56
virtual void writeBuffers(std::ostream &, bool saveFloatAsHalf=false) const =0
Write out all the data buffers for this tree.
virtual Index64 leafCount() const =0
Return the number of leaf nodes.
virtual Metadata::Ptr getBackgroundValue() const
Return this tree's background value wrapped as metadata.
Definition Tree.h:66
virtual Index64 nonLeafCount() const =0
Return the number of non-leaf nodes.
virtual void print(std::ostream &os=std::cout, int verboseLevel=1) const
Print statistics, memory usage and other information about this tree.
Definition Tree.h:1165
virtual void readBuffers(std::istream &, const CoordBBox &, bool saveFloatAsHalf=false)=0
Read all of this tree's data buffers that intersect the given bounding box.
virtual void getIndexRange(CoordBBox &bbox) const =0
virtual Index64 activeVoxelCount() const =0
Return the total number of active voxels.
virtual Index64 inactiveVoxelCount() const =0
Return the number of inactive voxels within the bounding box of all active voxels.
virtual void clipUnallocatedNodes()=0
Replace with background tiles any nodes whose voxel buffers have not yet been allocated.
virtual void readNonresidentBuffers() const =0
Read all of this tree's data buffers that are not yet resident in memory (because delayed loading is ...
virtual Index64 inactiveLeafVoxelCount() const =0
Return the number of inactive voxels stored in leaf nodes.
virtual Index64 memUsage() const
Return the total amount of memory in bytes occupied by this tree.
Definition Tree.h:151
virtual TreeBase::Ptr copy() const =0
Return a pointer to a deep copy of this tree.
SharedPtr< TreeBase > Ptr
Definition Tree.h:40
virtual bool evalLeafDim(Coord &dim) const =0
Return in dim the dimensions of the axis-aligned bounding box of all leaf nodes.
virtual bool evalActiveVoxelBoundingBox(CoordBBox &bbox) const =0
Return in bbox the axis-aligned bounding box of all active voxels and tiles.
virtual Index treeDepth() const =0
Return the depth of this tree.
virtual Index64 activeTileCount() const =0
Return the total number of active tiles.
SharedPtr< const TreeBase > ConstPtr
Definition Tree.h:41
virtual bool evalActiveVoxelDim(Coord &dim) const =0
Return in dim the dimensions of the axis-aligned bounding box of all active voxels....
virtual bool evalLeafBoundingBox(CoordBBox &bbox) const =0
Return in bbox the axis-aligned bounding box of all active tiles and leaf nodes with active values.
TreeBase & operator=(const TreeBase &)=delete
TreeBase(const TreeBase &)=default
virtual void readTopology(std::istream &, bool saveFloatAsHalf=false)
Read the tree topology from a stream.
Definition Tree.h:1148
Base class for tree-traversal iterators over tile and voxel values.
Definition TreeIterator.h:618
void readTopology(std::istream &, bool saveFloatAsHalf=false) override
Read the tree topology from a stream.
Definition Tree.h:1287
RootNodeType::ChildAllCIter beginRootDense() const
Return an iterator over all entries of the root node's table.
Definition Tree.h:1018
Metadata::Ptr getBackgroundValue() const override
Return this tree's background value wrapped as metadata.
Definition Tree.h:1765
int getValueDepth(const Coord &xyz) const
Return the tree depth (0 = root) at which the value of voxel (x, y, z) resides.
Definition Tree.h:1521
bool hasSameTopology(const Tree< OtherRootNodeType > &other) const
Return true if the given tree has the same node and active value topology as this tree,...
Definition Tree.h:1962
Index64 unallocatedLeafCount() const override
Return the total number of unallocated leaf nodes residing in this tree.
Definition Tree.h:1718
CIterT cbegin() const
Return a const iterator of type CIterT (for example, cbegin<ValueOnCIter>() is equivalent to cbeginVa...
bool evalActiveVoxelBoundingBox(CoordBBox &bbox) const override
Return in bbox the axis-aligned bounding box of all active voxels and tiles.
Definition Tree.h:1983
NodeT * stealNode(const Coord &xyz, const ValueType &value, bool active)
Return a pointer to the node of type NodeT that contains voxel (x, y, z) and replace it with a tile o...
Definition Tree.h:1631
void releaseAccessor(ValueAccessorBase< Tree, false > &) const
Dummy implementations.
Definition Tree.h:719
NodeType * probeNode(const Coord &xyz)
Return a pointer to the node of type NodeType that contains voxel (x, y, z). If no such node exists,...
Definition Tree.h:1665
const NodeType * probeNode(const Coord &xyz) const
Definition Tree.h:1674
void combine(Tree &other, CombineOp &op, bool prune=false)
Definition Tree.h:1848
const ValueType & getValue(const Coord &xyz, AccessT &) const
Return the value of the voxel at the given coordinates and update the given accessor's node cache.
void releaseAccessor(ValueAccessorBase< const Tree, false > &) const
Definition Tree.h:720
ConstAccessorRegistry mConstAccessorRegistry
Definition Tree.h:1110
bool isValueOn(const Coord &xyz) const
Return true if the value at the given coordinates is active.
Definition Tree.h:491
RootNodeType & root()
Definition Tree.h:303
TreeValueIteratorBase< Tree, typename RootNodeType::ValueOffIter > ValueOffIter
Definition Tree.h:1054
Tree(const Tree &other)
Deep copy constructor.
Definition Tree.h:229
RootNodeType::ChildOffCIter cbeginRootTiles() const
Definition Tree.h:1012
TreeValueIteratorBase< const Tree, typename RootNodeType::ValueOffCIter > ValueOffCIter
Definition Tree.h:1055
LeafCIter beginLeaf() const
Definition Tree.h:1046
ValueAccessor< Tree, true > Accessor
Definition Tree.h:207
void writeBuffers(std::ostream &, bool saveFloatAsHalf=false) const override
Write out all data buffers for this tree.
Definition Tree.h:1335
void writeTopology(std::ostream &, bool saveFloatAsHalf=false) const override
Write the tree topology to a stream.
Definition Tree.h:1297
ValueOffCIter cbeginValueOff() const
Definition Tree.h:1073
Tree(const Tree< OtherRootType > &other)
Value conversion deep copy constructor.
Definition Tree.h:240
const LeafNodeType * probeConstLeaf(const Coord &xyz) const
Definition Tree.h:1656
IterT begin()
Return an iterator of type IterT (for example, begin<ValueOnIter>() is equivalent to beginValueOn()).
Definition Tree.h:1267
Index64 memUsage() const override
Definition Tree.h:408
void evalMinMax(ValueType &min, ValueType &max) const
void merge(Tree &other, MergePolicy=MERGE_ACTIVE_STATES)
Efficiently merge another tree into this tree using one of several schemes.
Definition Tree.h:1785
TreeValueIteratorBase< const Tree, typename RootNodeType::ValueAllCIter > ValueAllCIter
Definition Tree.h:1051
tree::RootNode< tree::InternalNode< tree::InternalNode< PointDataLeafNode< PointDataIndex32, 3 >, 4 >, 5 > > RootNodeType
Definition Tree.h:200
RootNodeType::ChildAllIter beginRootDense()
Definition Tree.h:1020
Accessor getAccessor()
Return an accessor that provides random read and write access to this tree's voxels.
Definition Tree.h:1392
ValueAccessor< Tree, false > UnsafeAccessor
Definition Tree.h:209
LeafCIter cbeginLeaf() const
Definition Tree.h:1047
LeafIteratorBase< const Tree, typename RootNodeType::ChildOnCIter > LeafCIter
Definition Tree.h:1033
const Name & type() const override
Return the name of this type of tree.
Definition Tree.h:296
static const Index DEPTH
Definition Tree.h:205
RootNodeType::ChildOffIter beginRootTiles()
Definition Tree.h:1013
void getNodes(ArrayT &array)
Adds all nodes of a certain type to a container with the following API:
Definition Tree.h:1344
void readBuffers(std::istream &, const CoordBBox &, bool saveFloatAsHalf=false) override
Read all of this tree's data buffers that intersect the given bounding box.
Definition Tree.h:1315
static const Name & treeType()
Return the name of this type of tree.
Definition Tree.h:1941
void voxelizeActiveTiles(bool threaded=true)
Densify active tiles, i.e., replace them with leaf-level active voxels.
Definition Tree.h:1756
RootNodeType::ChildOnCIter beginRootChildren() const
Return an iterator over children of the root node.
Definition Tree.h:1004
void combine(Tree &other, const CombineOp &op, bool prune=false)
Definition Tree.h:1860
bool operator!=(const Tree &) const
Definition Tree.h:299
Tree()
Definition Tree.h:224
AccessorRegistry mAccessorRegistry
Definition Tree.h:1109
void clip(const CoordBBox &)
Set all voxels that lie outside the given axis-aligned box to the background.
Definition Tree.h:1694
ValueAccessor< const Tree, true > ConstAccessor
Definition Tree.h:208
RootNodeType mRoot
Definition Tree.h:1108
ValueAllCIter cbeginValueAll() const
Definition Tree.h:1061
void prune(const ValueType &tolerance=zeroVal< ValueType >())
Reduce the memory footprint of this tree by replacing with tiles any nodes whose values are all the s...
Definition Tree.h:552
LeafNodeType * probeLeaf(const Coord &xyz)
Return a pointer to the leaf node that contains voxel (x, y, z). If no such node exists,...
Definition Tree.h:1648
void topologyIntersection(const Tree< OtherRootNodeType > &other)
Intersects this tree's set of active values with the active values of the other tree,...
Definition Tree.h:1812
void releaseAccessor(ValueAccessorBase< Tree, true > &) const
Deregister an accessor so that it is no longer automatically cleared.
Definition Tree.h:1445
LeafNodeType * touchLeaf(const Coord &xyz)
Return a pointer to the leaf node that contains voxel (x, y, z). If no such node exists,...
Definition Tree.h:1640
RootNodeType::ChildOnIter beginRootChildren()
Definition Tree.h:1006
Index64 leafCount() const override
Return the number of leaf nodes.
Definition Tree.h:363
ValueOnCIter beginValueOn() const
Definition Tree.h:1066
bool operator==(const Tree &) const
Definition Tree.h:298
SharedPtr< Tree > Ptr
Definition Tree.h:197
void attachAccessor(ValueAccessorBase< Tree, true > &) const
Register an accessor for this tree. Registered accessors are automatically cleared whenever one of th...
Definition Tree.h:1427
NodeIteratorBase< Tree, typename RootNodeType::ChildOnIter > NodeIter
Definition Tree.h:1026
Index64 activeLeafVoxelCount() const override
Return the number of active voxels stored in leaf nodes.
Definition Tree.h:394
void modifyValueAndActiveState(const Coord &xyz, const ModifyOp &op)
Apply a functor to the voxel at the given coordinates.
Definition Tree.h:1602
ConstUnsafeAccessor getConstUnsafeAccessor()
Return an unsafe accessor that provides random read-only access to this tree's voxels.
Definition Tree.h:1420
void combine2Extended(const Tree &a, const OtherTreeType &b, const ExtendedCombineOp &, bool prune=false)
Definition Tree.h:1928
Index64 inactiveVoxelCount() const override
Return the number of inactive voxels within the bounding box of all active voxels.
Definition Tree.h:400
void setValueOnly(const Coord &xyz, const ValueType &value)
Set the value of the voxel at the given coordinates but don't change its active state.
Definition Tree.h:1560
bool empty() const
Return true if this tree contains no nodes other than the root node and no tiles other than backgroun...
Definition Tree.h:665
Index64 activeVoxelCount() const override
Return the total number of active voxels.
Definition Tree.h:398
Index64 inactiveLeafVoxelCount() const override
Return the number of inactive voxels stored in leaf nodes.
Definition Tree.h:396
void fill(const CoordBBox &bbox, const ValueType &value, bool active=true)
Definition Tree.h:523
ValueOffCIter beginValueOff() const
Definition Tree.h:1072
void addLeaf(LeafNodeType *leaf)
Add the given leaf node to this tree, creating a new branch if necessary. If a leaf node with the sam...
Definition Tree.h:563
TreeValueIteratorBase< Tree, typename RootNodeType::ValueAllIter > ValueAllIter
Definition Tree.h:1050
RootNodeType::ChildOffCIter beginRootTiles() const
Return an iterator over non-child entries of the root node's table.
Definition Tree.h:1011
void combineExtended(Tree &other, ExtendedCombineOp &op, bool prune=false)
Definition Tree.h:1870
void setValueOff(const Coord &xyz, const ValueType &value)
Set the value of the voxel at the given coordinates and mark the voxel as inactive.
Definition Tree.h:1537
void addTile(Index level, const Coord &xyz, const ValueType &value, bool active)
Add a tile containing voxel (x, y, z) at the specified tree level, creating a new branch if necessary...
Definition Tree.h:1621
void releaseAccessor(ValueAccessorBase< const Tree, true > &) const
Definition Tree.h:1453
bool probeValue(const Coord &xyz, ValueType &value) const
Get the value of the voxel at the given coordinates.
Definition Tree.h:1610
TreeValueIteratorBase< const Tree, typename RootNodeType::ValueOnCIter > ValueOnCIter
Definition Tree.h:1053
void setActiveState(const Coord &xyz, bool on)
Set the active state of the voxel at the given coordinates but don't change its value.
Definition Tree.h:1545
ValueOnIter beginValueOn()
Return an iterator over active values (tile and voxel) across all nodes.
Definition Tree.h:1065
void topologyDifference(const Tree< OtherRootNodeType > &other)
Difference this tree's set of active values with the active values of the other tree,...
Definition Tree.h:1821
void releaseAllAccessors()
typename RootNodeType::BuildType BuildType
Definition Tree.h:202
void setValue(const Coord &xyz, const ValueType &value)
Set the value of the voxel at the given coordinates and mark the voxel as active.
Definition Tree.h:1553
void combine2Extended(const Tree &a, const OtherTreeType &b, ExtendedCombineOp &op, bool prune=false)
Definition Tree.h:1914
Index64 activeTileCount() const override
Return the total number of active tiles.
Definition Tree.h:402
void setValueOff(const Coord &xyz)
Mark the voxel at the given coordinates as inactive but don't change its value.
Definition Tree.h:1529
tbb::concurrent_hash_map< ValueAccessorBase< const Tree, true > *, bool > ConstAccessorRegistry
Definition Tree.h:1086
ValueOnCIter cbeginValueOn() const
Definition Tree.h:1067
TreeBase::Ptr copy() const override
Return a pointer to a deep copy of this tree.
Definition Tree.h:288
typename RootNodeType::ValueType ValueType
Definition Tree.h:201
void attachAccessor(ValueAccessorBase< Tree, false > &) const
Dummy implementations.
Definition Tree.h:707
const ValueType & getValue(const Coord &xyz) const
Return the value of the voxel at the given coordinates.
Definition Tree.h:1504
const LeafNodeType * probeLeaf(const Coord &xyz) const
Definition Tree.h:598
void print(std::ostream &os=std::cout, int verboseLevel=1) const override
Print statistics, memory usage and other information about this tree.
Definition Tree.h:2044
void combineExtended(Tree &other, const ExtendedCombineOp &op, bool prune=false)
Definition Tree.h:1882
void attachAccessor(ValueAccessorBase< const Tree, false > &) const
Definition Tree.h:708
UnsafeAccessor getUnsafeAccessor()
Return an unsafe accessor that provides random read and write access to this tree's voxels.
Definition Tree.h:1399
void combine2(const Tree &a, const OtherTreeType &b, const CombineOp &op, bool prune=false)
Definition Tree.h:1904
NodeCIter beginNode() const
Definition Tree.h:1039
ValueAccessor< const Tree, false > ConstUnsafeAccessor
Definition Tree.h:210
void modifyValue(const Coord &xyz, const ModifyOp &op)
Apply a functor to the value of the voxel at the given coordinates and mark the voxel as active.
Definition Tree.h:1593
LeafIteratorBase< Tree, typename RootNodeType::ChildOnIter > LeafIter
Definition Tree.h:1032
SharedPtr< const Tree > ConstPtr
Definition Tree.h:198
void readNonresidentBuffers() const override
Read all of this tree's data buffers that are not yet resident in memory (because delayed loading is ...
Definition Tree.h:1324
Tree(const OtherTreeType &other, const ValueType &background, TopologyCopy)
Topology copy constructor from a tree of a different type.
Definition Tree.h:276
RootNodeType::ChildAllCIter cbeginRootDense() const
Definition Tree.h:1019
void getNodes(ArrayT &array) const
Definition Tree.h:1356
void denseFill(const CoordBBox &bbox, const ValueType &value, bool active=true)
Set all voxels within a given axis-aligned box to a constant value and ensure that those voxels are a...
Definition Tree.h:1747
bool evalLeafBoundingBox(CoordBBox &bbox) const override
Return in bbox the axis-aligned bounding box of all active tiles and leaf nodes with active values.
Definition Tree.h:1970
void stealNodes(ArrayT &array, const ValueType &value, bool state)
Definition Tree.h:654
bool evalLeafDim(Coord &dim) const override
Return in dim the dimensions of the axis-aligned bounding box of all leaf nodes.
Definition Tree.h:2008
RootNodeType::ChildOnCIter cbeginRootChildren() const
Definition Tree.h:1005
void setValue(const Coord &xyz, const ValueType &value, AccessT &)
Set the value of the voxel at the given coordinates, mark the voxel as active, and update the given a...
Definition Tree.h:1568
std::vector< Index64 > nodeCount() const override
Definition Tree.h:371
NodeCIter cbeginNode() const
Definition Tree.h:1040
const ValueType & background() const
Definition Tree.h:732
NodeIteratorBase< const Tree, typename RootNodeType::ChildOnCIter > NodeCIter
Definition Tree.h:1027
Tree & operator=(const Tree &)=delete
static void getNodeLog2Dims(std::vector< Index > &dims)
Traverse the type hierarchy of nodes, and return, in dims, a list of the Log2Dims of nodes in order f...
Definition Tree.h:2035
ValueOffIter beginValueOff()
Return an iterator over inactive values (tile and voxel) across all nodes.
Definition Tree.h:1071
void getIndexRange(CoordBBox &bbox) const override
Min and max are both inclusive.
Definition Tree.h:735
void attachAccessor(ValueAccessorBase< const Tree, true > &) const
Definition Tree.h:1436
void readBuffers(std::istream &, bool saveFloatAsHalf=false) override
Read all data buffers for this tree.
Definition Tree.h:1306
typename RootNodeType::LeafNodeType LeafNodeType
Definition Tree.h:203
ConstAccessor getConstAccessor() const
Return an accessor that provides random read-only access to this tree's voxels.
Definition Tree.h:1413
void setValueOn(const Coord &xyz)
Mark the voxel at the given coordinates as active but don't change its value.
Definition Tree.h:1576
LeafIter beginLeaf()
Return an iterator over all leaf nodes in this tree.
Definition Tree.h:1045
void sparseFill(const CoordBBox &bbox, const ValueType &value, bool active=true)
Set all voxels within a given axis-aligned box to a constant value.
Definition Tree.h:1738
Tree(const OtherTreeType &other, const ValueType &inactiveValue, const ValueType &activeValue, TopologyCopy)
Topology copy constructor from a tree of a different type.
Definition Tree.h:255
bool evalActiveVoxelDim(Coord &dim) const override
Return in dim the dimensions of the axis-aligned bounding box of all active voxels....
Definition Tree.h:1997
~Tree() override
Definition Tree.h:285
const NodeType * probeConstNode(const Coord &xyz) const
Definition Tree.h:1683
bool hasActiveTiles() const
Return true if this tree has any active tiles.
Definition Tree.h:495
Tree(const ValueType &background)
Empty tree constructor.
Definition Tree.h:283
void clipUnallocatedNodes() override
Replace with background tiles any nodes whose voxel buffers have not yet been allocated.
Definition Tree.h:1703
void setValueOn(const Coord &xyz, const ValueType &value)
Set the value of the voxel at the given coordinates and mark the voxel as active.
Definition Tree.h:1584
bool isValueOff(const Coord &xyz) const
Return true if the value at the given coordinates is inactive.
Definition Tree.h:493
void stealNodes(ArrayT &array)
Steals all nodes of a certain type from the tree and adds them to a container with the following API:
Definition Tree.h:652
void topologyUnion(const Tree< OtherRootNodeType > &other, const bool preserveTiles=false)
Union this tree's set of active values with the active values of the other tree, whose ValueType may ...
Definition Tree.h:1803
Name valueType() const override
Return the name of the type of a voxel's value (e.g., "float" or "vec3d")
Definition Tree.h:291
void combine2(const Tree &a, const OtherTreeType &b, CombineOp &op, bool prune=false)
Definition Tree.h:1892
Index treeDepth() const override
Return the depth of this tree.
Definition Tree.h:360
const RootNodeType & root() const
Definition Tree.h:304
ValueAllCIter beginValueAll() const
Definition Tree.h:1060
NodeIter beginNode()
Return an iterator over all nodes in this tree.
Definition Tree.h:1038
ConstAccessor getAccessor() const
Return an accessor that provides random read-only access to this tree's voxels.
Definition Tree.h:1406
Index64 nonLeafCount() const override
Return the number of non-leaf nodes.
Definition Tree.h:389
tbb::concurrent_hash_map< ValueAccessorBase< Tree, true > *, bool > AccessorRegistry
Definition Tree.h:1085
ValueAllIter beginValueAll()
Return an iterator over all values (tile and voxel) across all nodes.
Definition Tree.h:1059
TreeValueIteratorBase< Tree, typename RootNodeType::ValueOnIter > ValueOnIter
Definition Tree.h:1052
This base class for ValueAccessors manages registration of an accessor with a tree so that the tree c...
Definition ValueAccessor.h:152
#define OPENVDB_LOG_WARN(message)
Log a warning message of the form 'someVar << "some text" << ...'.
Definition logging.h:256
bool cwiseLessThan(const Mat< SIZE, T > &m0, const Mat< SIZE, T > &m1)
Definition Mat.h:1015
bool cwiseGreaterThan(const Mat< SIZE, T > &m0, const Mat< SIZE, T > &m1)
Definition Mat.h:1029
Definition TreeIterator.h:30
Definition PointDataGrid.h:170
ValueAccessorImpl< TreeType, IsSafe, MutexType, openvdb::make_index_sequence< CacheLevels > > ValueAccessor
Default alias for a ValueAccessor. This is simply a helper alias for the generic definition but takes...
Definition ValueAccessor.h:86
FormattedInt< IntT > formattedInt(IntT n)
Definition Formats.h:118
OPENVDB_API int printBytes(std::ostream &os, uint64_t bytes, const std::string &head="", const std::string &tail="\n", bool exact=false, int width=8, int precision=3)
std::string Name
Definition Name.h:19
Index32 Index
Definition Types.h:54
constexpr T zeroVal()
Return the value of type T that corresponds to zero.
Definition Math.h:70
uint32_t Index32
Definition Types.h:52
uint64_t Index64
Definition Types.h:53
std::shared_ptr< T > SharedPtr
Definition Types.h:114
MergePolicy
Definition Types.h:506
@ MERGE_ACTIVE_STATES
Definition Types.h:507
@ MERGE_NODES
Definition Types.h:508
@ MERGE_ACTIVE_STATES_AND_NODES
Definition Types.h:509
const char * typeNameAsString()
Definition Types.h:516
Definition Exceptions.h:13
#define OPENVDB_THROW(exception, message)
Definition Exceptions.h:74
Helper class to adapt a three-argument (a, b, result) CombineOp functor into a single-argument functo...
Definition Tree.h:1834
void operator()(CombineArgs< AValueT, BValueT > &args) const
Definition Tree.h:1837
CombineOpAdapter(CombineOp &_op)
Definition Tree.h:1835
CombineOp & op
Definition Tree.h:1841
Tree3<T, N1, N2>::Type is the type of a three-level tree (Root, Internal, Leaf) with value type T and...
Definition Tree.h:1119
Tree< RootNode< InternalNode< LeafNode< T, N2 >, N1 > > > Type
Definition Tree.h:1120
Tree4<T, N1, N2, N3>::Type is the type of a four-level tree (Root, Internal, Internal,...
Definition Tree.h:1129
Tree< RootNode< InternalNode< InternalNode< LeafNode< bool, N3 >, N2 >, N1 > > > Type
Definition Tree.h:1130
Tree5<T, N1, N2, N3, N4>::Type is the type of a five-level tree (Root, Internal, Internal,...
Definition Tree.h:1138
Tree< RootNode< InternalNode< InternalNode< InternalNode< LeafNode< T, N4 >, N3 >, N2 >, N1 > > > Type
Definition Tree.h:1139
static TreeT::LeafCIter begin(const TreeT &tree)
Definition Tree.h:1236
static TreeT::LeafIter begin(TreeT &tree)
Definition Tree.h:1232
static TreeT::NodeCIter begin(const TreeT &tree)
Definition Tree.h:1228
static TreeT::NodeIter begin(TreeT &tree)
Definition Tree.h:1224
static TreeT::RootNodeType::ChildAllCIter begin(const TreeT &tree)
Definition Tree.h:1218
static TreeT::RootNodeType::ChildAllIter begin(TreeT &tree)
Definition Tree.h:1212
static TreeT::RootNodeType::ChildOffCIter begin(const TreeT &tree)
Definition Tree.h:1206
static TreeT::RootNodeType::ChildOffIter begin(TreeT &tree)
Definition Tree.h:1200
static TreeT::RootNodeType::ChildOnCIter begin(const TreeT &tree)
Definition Tree.h:1194
static TreeT::RootNodeType::ChildOnIter begin(TreeT &tree)
Definition Tree.h:1188
static TreeT::ValueAllCIter begin(const TreeT &tree)
Definition Tree.h:1260
static TreeT::ValueAllIter begin(TreeT &tree)
Definition Tree.h:1256
static TreeT::ValueOffCIter begin(const TreeT &tree)
Definition Tree.h:1252
static TreeT::ValueOffIter begin(TreeT &tree)
Definition Tree.h:1248
static TreeT::ValueOnCIter begin(const TreeT &tree)
Definition Tree.h:1244
static TreeT::ValueOnIter begin(TreeT &tree)
Definition Tree.h:1240
TreeIterTraits provides, for all tree iterators, a begin(tree) function that returns an iterator over...
Definition Tree.h:1185
DeallocateNodes(std::vector< NodeType * > &nodes)
Definition Tree.h:1095
NodeType **const mNodes
Definition Tree.h:1102
void operator()(const tbb::blocked_range< size_t > &range) const
Definition Tree.h:1097
ValueConverter<T>::Type is the type of a tree having the same hierarchy as this tree but a different ...
Definition Tree.h:219
Tree< typename RootNodeType::template ValueConverter< OtherValueType >::Type > Type
Definition Tree.h:220
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition version.h.in:121
#define OPENVDB_USE_VERSION_NAMESPACE
Definition version.h.in:218