43 #ifndef OPENVDB_TREE_NODEUNION_HAS_BEEN_INCLUDED
44 #define OPENVDB_TREE_NODEUNION_HAS_BEEN_INCLUDED
46 #include <boost/type_traits/is_class.hpp>
47 #include <openvdb/version.h>
55 template<
bool ValueIsClass,
class ValueT,
class ChildT>
class NodeUnionImpl;
60 template<
typename ValueT,
typename ChildT>
64 union { ChildT* child; ValueT
value; } mUnion;
69 ChildT*
getChild()
const {
return mUnion.child; }
70 const ValueT&
getValue()
const {
return mUnion.value; }
72 void setChild(ChildT* child) { mUnion.child = child; }
73 void setValue(
const ValueT& val) { mUnion.value = val; }
79 template<
typename ValueT,
typename ChildT>
83 union { ChildT* child; ValueT*
value; } mUnion;
90 if (other.mHasChild) setChild(other.getChild());
91 else setValue(other.getValue());
95 if (other.mHasChild) setChild(other.getChild());
96 else setValue(other.getValue());
101 {
return mHasChild ? mUnion.child : NULL; }
104 if (!mHasChild)
delete mUnion.value;
105 mUnion.child = child;
109 const ValueT&
getValue()
const {
return *mUnion.value; }
115 if (!mHasChild)
delete mUnion.value;
116 mUnion.value =
new ValueT(val);
122 template<
typename ValueT,
typename ChildT>
124 boost::is_class<ValueT>::value, ValueT, ChildT>
133 #endif // OPENVDB_TREE_NODEUNION_HAS_BEEN_INCLUDED
const ValueT & getValue() const
Definition: NodeUnion.h:109
ValueT & getValue()
Definition: NodeUnion.h:71
~NodeUnionImpl()
Definition: NodeUnion.h:98
ChildT * getChild() const
Definition: NodeUnion.h:69
ValueT value
Definition: NodeUnion.h:64
NodeUnionImpl()
Definition: NodeUnion.h:87
NodeUnionImpl(const NodeUnionImpl &other)
Definition: NodeUnion.h:88
void setChild(ChildT *child)
Definition: NodeUnion.h:72
ValueT & getValue()
Definition: NodeUnion.h:110
void setValue(const ValueT &val)
Definition: NodeUnion.h:111
Definition: NodeUnion.h:55
void setValue(const ValueT &val)
Definition: NodeUnion.h:73
#define OPENVDB_VERSION_NAME
Definition: version.h:45
NodeUnion()
Definition: NodeUnion.h:126
NodeUnionImpl()
Definition: NodeUnion.h:67
Definition: NodeUnion.h:123
NodeUnionImpl & operator=(const NodeUnionImpl &other)
Definition: NodeUnion.h:93
ChildT * getChild() const
Definition: NodeUnion.h:100
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:56
const ValueT & getValue() const
Definition: NodeUnion.h:70
ValueT * value
Definition: NodeUnion.h:83
void setChild(ChildT *child)
Definition: NodeUnion.h:102