24 #ifndef PXR_USD_SDF_PATH_NODE_H
25 #define PXR_USD_SDF_PATH_NODE_H
30 #include "pxr/base/tf/mallocTag.h"
32 #include <hboost/noncopyable.hpp>
33 #include <hboost/intrusive_ptr.hpp>
35 #include <tbb/atomic.h>
159 static std::pair<Sdf_PathNode const *, Sdf_PathNode const *>
162 bool stopAtRootPrim);
177 return _containsPrimVariantSelection;
218 template <
class Less>
229 , _elementCount(parent ? parent->_elementCount + 1 : 1)
230 , _nodeType(nodeType)
232 , _containsPrimVariantSelection(
234 (parent && parent->_containsPrimVariantSelection))
235 , _containsTargetPath(nodeType ==
TargetNode ||
237 (parent && parent->_containsTargetPath))
276 template <
class Derived>
277 Derived
const *_Downcast()
const {
278 return static_cast<Derived
const *
>(
this);
282 bool _IsNamespacedImpl()
const;
290 mutable tbb::atomic<unsigned int> _refCount;
292 const short _elementCount;
293 const unsigned char _nodeType;
294 const bool _isAbsolute:1;
295 const bool _containsPrimVariantSelection:1;
296 const bool _containsTargetPath:1;
306 mutable bool _hasToken:1;
311 using Sdf_PathNode::Sdf_PathNode;
312 SDF_API void operator delete (
void *
p);
317 using Sdf_PathNode::Sdf_PathNode;
318 SDF_API void operator delete (
void *
p);
355 const ComparisonType &_GetComparisonValue()
const {
return _name; }
382 const ComparisonType &_GetComparisonValue()
const {
return _name; }
405 return *_variantSelection;
413 std::unique_ptr<VariantSelectionType> _variantSelection;
427 , _targetPath(targetPath) {}
431 const ComparisonType& _GetComparisonValue()
const {
return _targetPath; }
454 const ComparisonType& _GetComparisonValue()
const {
return _name; }
475 , _targetPath(targetPath) {}
479 const ComparisonType& _GetComparisonValue()
const {
return _targetPath; }
504 const ComparisonType& _GetComparisonValue()
const {
return _name; }
537 template <
int nodeType>
568 template <
int nodeType,
class Comp>
573 return Comp()(
static_cast<const Type&
>(lhs)._GetComparisonValue(),
574 static_cast<const Type&
>(rhs)._GetComparisonValue());
578 template <
class Comp>
591 if (nodeType != rhsNodeType) {
592 return Comp()(nodeType, rhsNodeType);
636 return delete _Downcast<Sdf_RootPathNode>();
638 return delete _Downcast<Sdf_PrimPathNode>();
640 return delete _Downcast<Sdf_PrimPropertyPathNode>();
642 return delete _Downcast<Sdf_PrimVariantSelectionNode>();
644 return delete _Downcast<Sdf_TargetPathNode>();
646 return delete _Downcast<Sdf_RelationalAttributePathNode>();
648 return delete _Downcast<Sdf_MapperPathNode>();
650 return delete _Downcast<Sdf_MapperArgPathNode>();
652 return delete _Downcast<Sdf_ExpressionPathNode>();
663 return SdfPathTokens->empty;
666 SdfPathTokens->absoluteIndicator : SdfPathTokens->relativeRoot;
668 return _Downcast<Sdf_PrimPathNode>()->_name;
670 return _Downcast<Sdf_PrimPropertyPathNode>()->_name;
672 return _Downcast<Sdf_PrimVariantSelectionNode>()->_GetNameImpl();
674 return _Downcast<Sdf_RelationalAttributePathNode>()->_name;
676 return _Downcast<Sdf_MapperArgPathNode>()->_name;
678 return SdfPathTokens->expressionIndicator;
689 return _Downcast<Sdf_TargetPathNode>()->_targetPath;
691 return _Downcast<Sdf_MapperPathNode>()->_targetPath;
699 return *_Downcast<Sdf_PrimVariantSelectionNode>()->_variantSelection;
701 return _GetEmptyVariantSelection();
711 return _Downcast<Sdf_PrimPathNode>()->_name;
726 if (p->_refCount.fetch_and_decrement() == 1)
732 #endif // PXR_USD_SDF_PATH_NODE_H
friend struct Sdf_PathNodePrivateAccess
unsigned int GetCurrentRefCount() const
GLboolean GLboolean GLboolean b
static Sdf_PathPropNodeHandle FindOrCreateTarget(Sdf_PathNode const *parent, SdfPath const &targetPath)
static TfToken _CreatePathToken(Sdf_PathNode const *primPart, Sdf_PathNode const *propPart)
static SDF_API TfToken GetPathAsToken(Sdf_PathNode const *primPart, Sdf_PathNode const *propPart)
void _AppendText(std::string *str) const
static Sdf_PathNode const * GetAbsoluteRootNode()
void _AppendText(std::string *str) const
static Sdf_PathPropNodeHandle FindOrCreateExpression(Sdf_PathNode const *parent)
bool ContainsPrimVariantSelection() const
std::pair< TfToken, TfToken > VariantSelectionType
void AppendText(std::string *str) const
static const NodeType nodeType
GLuint const GLchar * name
static Sdf_PathPropNodeHandle FindOrCreateMapperArg(Sdf_PathNode const *parent, const TfToken &name)
Sdf_PathNode(Sdf_PathNode const *parent, NodeType nodeType)
static Sdf_PathPropNodeHandle FindOrCreatePrimProperty(Sdf_PathNode const *parent, const TfToken &name)
Sdf_ExpressionPathNode Type
static Sdf_PathPropNodeHandle FindOrCreateRelationalAttribute(Sdf_PathNode const *parent, const TfToken &name)
void _AppendText(std::string *str) const
friend struct Sdf_PathNodePrivateAccess
NodeType GetNodeType() const
friend struct Sdf_PathNodePrivateAccess
static Sdf_PathPropNodeHandle FindOrCreateMapper(Sdf_PathNode const *parent, SdfPath const &targetPath)
static const NodeType nodeType
static SDF_API const SdfPath & EmptyPath()
The empty path value, equivalent to SdfPath().
static std::pair< Sdf_PathNode const *, Sdf_PathNode const * > RemoveCommonSuffix(Sdf_PathNode const *a, Sdf_PathNode const *b, bool stopAtRootPrim)
bool operator()(const Sdf_PathNode &lhs, const Sdf_PathNode &rhs) const
Sdf_PrimVariantSelectionNode Type
static const NodeType nodeType
static Sdf_PathPrimNodeHandle FindOrCreatePrim(Sdf_PathNode const *parent, const TfToken &name)
const SdfPath & GetTargetPath() const
bool Compare(const Sdf_PathNode &rhs) const
GLboolean GLboolean GLboolean GLboolean a
GLsizei const GLchar *const * string
friend struct Sdf_PathNodePrivateAccess
Sdf_MapperArgPathNode Type
friend struct Sdf_PathNodePrivateAccess
friend struct Sdf_PathNodePrivateAccess
static const NodeType nodeType
const VariantSelectionType & GetVariantSelection() const
TfToken GetElement() const
bool IsAbsoluteRoot() const
static const NodeType nodeType
static const NodeType nodeType
static Sdf_PathNode const * GetRelativeRootNode()
hboost::intrusive_ptr< const Sdf_PathNode > Sdf_PathNodeConstRefPtr
bool operator()(T const &a, T const &b) const
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
const TfToken & GetName() const
static Sdf_PathPrimNodeHandle FindOrCreatePrimVariantSelection(Sdf_PathNode const *parent, const TfToken &variantSet, const TfToken &variant)
friend void intrusive_ptr_add_ref(const Sdf_PathNode *)
#define PXR_NAMESPACE_CLOSE_SCOPE
void intrusive_ptr_release(const PXR_NS::Sdf_PathNode *p)
friend struct Sdf_PathNodePrivateAccess
bool operator()(T const &a, T const &b) const
bool IsNamespaced() const
SDF_API void _RemovePathTokenFromTable() const
void _AppendText(std::string *str) const
SDF_API void Sdf_DumpPathStats()
Diagnostic output.
Sdf_PrimPropertyPathNode Type
friend struct Sdf_PathNodePrivateAccess
static SDF_API Sdf_PathNode const * New(bool isAbsolute)
void intrusive_ptr_add_ref(const PXR_NS::Sdf_PathNode *p)
Sdf_RelationalAttributePathNode Type
static const NodeType nodeType
VariantSelectionType ComparisonType
bool IsAbsolutePath() const
static const NodeType nodeType
friend void intrusive_ptr_release(const Sdf_PathNode *)
const TfToken & _GetNameImpl() const
static SDF_API const TfToken & GetPathToken(Sdf_PathNode const *primPart, Sdf_PathNode const *propPart)
bool ContainsTargetPath() const
size_t GetElementCount() const
friend struct Sdf_PathNodePrivateAccess
Sdf_PathNode const * GetParentNode() const
void _AppendText(std::string *str) const
static const NodeType nodeType