HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
node.h
Go to the documentation of this file.
1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 #ifndef PXR_USD_PCP_NODE_H
8 #define PXR_USD_PCP_NODE_H
9 
10 #include "pxr/pxr.h"
11 #include "pxr/usd/pcp/api.h"
12 #include "pxr/usd/pcp/types.h"
13 #include "pxr/usd/sdf/types.h"
14 #include "pxr/base/tf/iterator.h"
15 #include "pxr/base/tf/hashset.h"
16 
18 
19 class PcpArc;
20 class PcpLayerStackSite;
21 class PcpMapExpression;
22 class PcpNodeRef;
26 typedef std::shared_ptr<PcpErrorBase> PcpErrorBasePtr;
27 
28 TF_DECLARE_REF_PTRS(PcpPrimIndex_Graph);
29 
30 /// \class PcpNodeRef
31 ///
32 /// PcpNode represents a node in an expression tree for compositing
33 /// scene description.
34 ///
35 /// A node represents the opinions from a particular site. In addition,
36 /// it may have child nodes, representing nested expressions that are
37 /// composited over/under this node.
38 ///
39 /// Child nodes are stored and composited in strength order.
40 ///
41 /// Each node holds information about the arc to its parent.
42 /// This captures both the relative strength of the sub-expression
43 /// as well as any value-mapping needed, such as to rename opinions
44 /// from a model to use in a particular instance.
45 ///
47 {
48 public:
51  typedef std::pair<child_const_iterator,
53  typedef std::pair<child_const_reverse_iterator,
55 
56  PcpNodeRef() : _graph(0), _nodeIdx(PCP_INVALID_INDEX) {}
57 
58  /// \name Operators / Miscellaneous
59  /// @{
60 
61  /// Returns true if this is a valid node reference, false otherwise.
62  typedef size_t PcpNodeRef::*UnspecifiedBoolType;
63  inline operator UnspecifiedBoolType() const {
64  return (_graph && _nodeIdx != PCP_INVALID_INDEX) ? &PcpNodeRef::_nodeIdx : 0;
65  }
66 
67  /// Returns true if this references the same node as \p rhs.
68  inline bool operator==(const PcpNodeRef& rhs) const {
69  return _nodeIdx == rhs._nodeIdx && _graph == rhs._graph;
70  }
71 
72  /// Inequality operator
73  /// \sa PcpNodeRef::operator==(const PcpNodeRef&)
74  inline bool operator!=(const PcpNodeRef& rhs) const {
75  return !(*this == rhs);
76  }
77 
78  /// Returns true if this node is 'less' than \p rhs.
79  /// The ordering of nodes is arbitrary and does not indicate the relative
80  /// strength of the nodes.
81  PCP_API
82  bool operator<(const PcpNodeRef& rhs) const;
83 
84  /// Less than or equal operator
85  /// \sa PcpNodeRef::operator<(const PcpNodeRef&)
86  bool operator<=(const PcpNodeRef& rhs) const {
87  return !(rhs < *this);
88  }
89 
90  /// Greater than operator
91  /// \sa PcpNodeRef::operator<(const PcpNodeRef&)
92  bool operator>(const PcpNodeRef& rhs) const {
93  return rhs < *this;
94  }
95 
96  /// Greater than or equal operator
97  /// \sa PcpNodeRef::operator<(const PcpNodeRef&)
98  bool operator>=(const PcpNodeRef& rhs) const {
99  return !(*this < rhs);
100  }
101 
102  /// Hash functor.
103  struct Hash {
104  size_t operator()(const PcpNodeRef& rhs) const
105  { return (size_t)rhs.GetUniqueIdentifier(); }
106  };
107 
108  /// Returns the graph that this node belongs to.
110  return _graph;
111  }
112 
113  /// Returns a value that uniquely identifies this node.
114  PCP_API
115  void* GetUniqueIdentifier() const;
116 
117  /// @}
118 
119  /// \name Arc information
120  /// Information pertaining to the arcs connecting this node to its
121  /// parent and child nodes.
122  /// @{
123 
124  /// Returns the type of arc connecting this node to its parent node.
125  PCP_API
126  PcpArcType GetArcType() const;
127 
128  /// Returns this node's immediate parent node. Will return NULL if this
129  /// node is a root node.
130  PCP_API
131  PcpNodeRef GetParentNode() const;
132 
133  /// Returns an iterator range over the children nodes in strongest to
134  /// weakest order.
135  PCP_API
137 
138  /// Returns an iterator range over the children nodes in weakest to
139  /// strongest order.
140  PCP_API
142 
143  /// Inserts a new child node for \p site, connected to this node via
144  /// \p arc.
145  PCP_API
146  PcpNodeRef InsertChild(const PcpLayerStackSite& site, const PcpArc& arc,
148 
149  /// Inserts \p subgraph as a child of this node, with the root node of
150  /// \p subtree connected to this node via \p arc.
151  PCP_API
153  const PcpPrimIndex_GraphRefPtr& subgraph, const PcpArc& arc,
155 
156  /// Returns the immediate origin node for this node. The origin node
157  /// is the node that caused this node to be brought into the prim index.
158  /// In most cases, this is the same as the parent node. For implied
159  /// inherits, the origin is the node from which this node was propagated.
160  PCP_API
161  PcpNodeRef GetOriginNode() const;
162 
163  /// Walk up to the root origin node for this node. This is the very
164  /// first node that caused this node to be added to the graph. For
165  /// instance, the root origin node of an implied inherit is the
166  /// original inherit node.
167  PCP_API
169 
170  /// Walk up to the root node of this expression.
171  PCP_API
172  PcpNodeRef GetRootNode() const;
173 
174  /// Returns mapping function used to translate paths and values from
175  /// this node to its parent node.
176  PCP_API
177  const PcpMapExpression& GetMapToParent() const;
178 
179  /// Returns mapping function used to translate paths and values from
180  /// this node directly to the root node.
181  PCP_API
182  const PcpMapExpression& GetMapToRoot() const;
183 
184  /// Returns this node's index among siblings with the same arc type
185  /// at this node's origin.
186  PCP_API
187  int GetSiblingNumAtOrigin() const;
188 
189  /// Returns the absolute namespace depth of the node that introduced
190  /// this node. Note that this does *not* count any variant selections.
191  PCP_API
192  int GetNamespaceDepth() const;
193 
194  /// Return the number of levels of namespace this node's site is
195  /// below the level at which it was introduced by an arc.
196  PCP_API
197  int GetDepthBelowIntroduction() const;
198 
199  /// Returns the path for this node's site when it was introduced.
200  PCP_API
202 
203  /// Get the path that introduced this node.
204  /// Specifically, this is the path the parent node had at the level
205  /// of namespace where this node was added as a child.
206  /// For a root node, this returns the absolute root path.
207  /// See also GetDepthBelowIntroduction().
208  PCP_API
209  SdfPath GetIntroPath() const;
210 
211  /// Returns the node's path at the same level of namespace as its origin
212  /// root node was when it was added as a child.
213  ///
214  /// For most nodes, this will return the same result as
215  /// GetPathAtIntroduction(). But for implied class nodes,
216  /// GetPathAtIntroduction() returns the path at which the implied node was
217  /// added to the tree which could be at deeper level of namespace than its
218  /// origin was introduced if the origin node was already ancestral when it
219  /// was implied. In some cases, what you really need is the path that the
220  /// original authored class arc maps to at this node's implied site and this
221  /// function returns that.
222  PCP_API
224 
225  /// @}
226 
227  /// \name Node information
228  /// Information pertaining specifically to this node and the opinions
229  /// that it may or may not provide.
230  /// @{
231 
232  /// Get the site this node represents.
233  PCP_API
234  PcpLayerStackSite GetSite() const;
235 
236  /// Returns the path for the site this node represents.
237  PCP_API
238  const SdfPath& GetPath() const;
239 
240  /// Returns the layer stack for the site this node represents.
241  PCP_API
242  const PcpLayerStackRefPtr& GetLayerStack() const;
243 
244  /// Returns true if this node is the root node of the prim index graph.
245  PCP_API
246  bool IsRootNode() const;
247 
248  /// Get/set whether this node was introduced by being copied from its
249  /// namespace ancestor, or directly by an arc at this level of namespace.
250  PCP_API
251  void SetIsDueToAncestor(bool isDueToAncestor);
252  PCP_API
253  bool IsDueToAncestor() const;
254 
255  // Get/set whether this node or any of its ancestor nodes represents a
256  // direct dependency.
257  PCP_API
258  void SetHasTransitiveDirectDependency(bool hasDep);
259  PCP_API
260  bool HasTransitiveDirectDependency() const;
261 
262  // Get/set whether this node or any of its ancestor nodes represents an
263  // ancestral dependency.
264  PCP_API
265  void SetHasTransitiveAncestralDependency(bool hasDep);
266  PCP_API
268 
269  /// Get/set whether this node provides any symmetry opinions, either
270  /// directly or from a namespace ancestor.
271  PCP_API
272  void SetHasSymmetry(bool hasSymmetry);
273  PCP_API
274  bool HasSymmetry() const;
275 
276  /// Get/set the permission for this node. This indicates whether specs
277  /// on this node can be accessed from other nodes.
278  PCP_API
279  void SetPermission(SdfPermission perm);
280  PCP_API
282 
283  /// Get/set whether this node is inert. An inert node never provides
284  /// any opinions to a prim index. Such a node may exist purely as a
285  /// marker to represent certain composition structure, but should never
286  /// contribute opinions.
287  PCP_API
288  void SetInert(bool inert);
289  PCP_API
290  bool IsInert() const;
291 
292  /// Get/set whether this node is culled. If a node is culled, it and
293  /// all descendant nodes provide no opinions to the index. A culled
294  /// node is also considered inert.
295  PCP_API
296  void SetCulled(bool culled);
297  PCP_API
298  bool IsCulled() const;
299 
300  /// Get/set whether this node is restricted. A restricted node is a
301  /// node that cannot contribute opinions to the index due to permissions.
302  PCP_API
303  void SetRestricted(bool restricted);
304  PCP_API
305  bool IsRestricted() const;
306 
307  /// Returns true if this node is allowed to contribute opinions
308  /// for composition, false otherwise.
309  PCP_API
310  bool CanContributeSpecs() const;
311 
312  /// Returns the namespace depth (i.e., the path element count) of
313  /// this node's path when it was restricted from contributing
314  /// opinions for composition. If this spec has no such restriction,
315  /// returns 0.
316  ///
317  /// Note that unlike the value returned by GetNamespaceDepth,
318  /// this value *does* include variant selections.
319  PCP_API
320  size_t GetSpecContributionRestrictedDepth() const;
321 
322  /// Set this node's contribution restriction depth.
323  ///
324  /// Note that this function typically does not need to be called,
325  /// since functions that restrict contributions (e.g., SetInert)
326  /// automatically set the restriction depth appropriately.
327  PCP_API
329 
330  /// Returns true if this node has opinions authored
331  /// for composition, false otherwise.
332  PCP_API
333  void SetHasSpecs(bool hasSpecs);
334  PCP_API
335  bool HasSpecs() const;
336 
337  /// Returns true if this node's site or a namespace ancestor
338  /// has authored value clips.
339  PCP_API
340  void SetHasValueClips(bool hasValueClips);
341  PCP_API
342  bool HasValueClips() const;
343 
344  /// @}
345 
346  // Returns a compressed Sd site. For internal use only.
347  Pcp_CompressedSdSite GetCompressedSdSite(size_t layerIndex) const
348  {
349  return Pcp_CompressedSdSite(_nodeIdx, layerIndex);
350  }
351 
352  PCP_API
353  friend std::ostream & operator<<(std::ostream &out, const PcpNodeRef &node);
354 
355 private:
356  friend class PcpPrimIndex_Graph;
357  friend class PcpNodeIterator;
363  template <class T> friend class Pcp_TraversalCache;
364  friend bool Pcp_IsPropagatedSpecializesNode(const PcpNodeRef& node);
365 
366  // Private constructor for internal use.
367  PcpNodeRef(PcpPrimIndex_Graph* graph, size_t idx)
368  : _graph(graph), _nodeIdx(idx)
369  {}
370 
371  size_t _GetNodeIndex() const { return _nodeIdx; }
372 
373  inline size_t _GetParentIndex() const;
374  inline size_t _GetOriginIndex() const;
375 
376  inline void _SetInert(bool inert);
377  inline void _SetRestricted(bool restricted);
378 
379  enum class _Restricted { Yes, Unknown };
380  void _RecordRestrictionDepth(_Restricted isRestricted);
381 
382 private: // Data
383  PcpPrimIndex_Graph* _graph;
384  size_t _nodeIdx;
385 };
386 
387 /// Typedefs and support functions
388 template <typename HashState>
389 inline
390 void
391 TfHashAppend(HashState& h, const PcpNodeRef& x){
392  h.Append((size_t)(x.GetUniqueIdentifier()));
393 }
394 inline
395 size_t
397 {
398  return TfHash{}(x);
399 }
400 
402 typedef std::vector<PcpNodeRef> PcpNodeRefVector;
403 
405 public:
406  PcpNodeRef* operator->() { return &_nodeRef; }
407 private:
410  explicit PcpNodeRef_PtrProxy(const PcpNodeRef& nodeRef) : _nodeRef(nodeRef) {}
411  PcpNodeRef _nodeRef;
412 };
413 
414 /// \class PcpNodeRef_ChildrenIterator
415 ///
416 /// Object used to iterate over child nodes (not all descendant nodes) of a
417 /// node in the prim index graph in strong-to-weak order.
418 ///
420 {
421 public:
422  using iterator_category = std::forward_iterator_tag;
426  using difference_type = std::ptrdiff_t;
427 
428  /// Constructs an invalid iterator.
429  PCP_API
431 
432  /// Constructs an iterator pointing to \p node. Passing a NULL value
433  /// for \p node constructs an end iterator.
434  PCP_API
435  PcpNodeRef_ChildrenIterator(const PcpNodeRef& node, bool end = false);
436 
437  reference operator*() const { return dereference(); }
438  pointer operator->() const { return pointer(dereference()); }
439 
441  increment();
442  return *this;
443  }
444 
446  const PcpNodeRef_ChildrenIterator result = *this;
447  increment();
448  return result;
449  }
450 
451  bool operator==(const PcpNodeRef_ChildrenIterator& other) const {
452  return equal(other);
453  }
454 
455  bool operator!=(const PcpNodeRef_ChildrenIterator& other) const {
456  return !equal(other);
457  }
458 
459 private:
460  PCP_API
461  void increment();
462  bool equal(const PcpNodeRef_ChildrenIterator& other) const
463  {
464  // Note: The default constructed iterator is *not* equal to any
465  // other iterator.
466  return (_node == other._node && _index == other._index);
467  }
468  reference dereference() const
469  {
470  return reference(_node._graph, _index);
471  }
472 
473 private:
474  // Current graph node this iterator is pointing at.
475  PcpNodeRef _node;
476 
477  // Index of current child.
478  size_t _index;
479 
481 };
482 
483 /// \class PcpNodeRef_ChildrenReverseIterator
484 ///
485 /// Object used to iterate over nodes in the prim index graph in weak-to-strong
486 /// order.
487 ///
489 {
490 public:
491  using iterator_category = std::forward_iterator_tag;
495  using difference_type = std::ptrdiff_t;
496 
497  /// Constructs an invalid iterator.
498  PCP_API
500 
501  /// Constructs a reverse iterator from a forward iterator.
502  PCP_API
504 
505  /// Constructs an iterator pointing to \p node. Passing a NULL value
506  /// for \p node constructs an end iterator.
507  PCP_API
508  PcpNodeRef_ChildrenReverseIterator(const PcpNodeRef& node,bool end = false);
509 
510  reference operator*() const { return dereference(); }
511  pointer operator->() const { return pointer(dereference()); }
512 
514  increment();
515  return *this;
516  }
517 
520  increment();
521  return result;
522  }
523 
525  return equal(other);
526  }
527 
529  return !equal(other);
530  }
531 
532 private:
533  PCP_API
534  void increment();
535  bool equal(const PcpNodeRef_ChildrenReverseIterator& other) const
536  {
537  // Note: The default constructed iterator is *not* equal to any
538  // other iterator.
539  return (_node == other._node && _index == other._index);
540  }
541  reference dereference() const
542  {
543  return reference(_node._graph, _index);
544  }
545 
546 private:
547  // Current graph node this iterator is pointing at.
548  PcpNodeRef _node;
549 
550  // Index of current child.
551  size_t _index;
552 };
553 
554 template <>
555 struct Tf_IteratorInterface<PcpNodeRef::child_const_range, false> {
558  {
559  return c.first;
560  }
562  {
563  return c.second;
564  }
565 };
566 
567 template <>
568 struct Tf_IteratorInterface<PcpNodeRef::child_const_range, true> {
571  {
572  return c.second;
573  }
575  {
576  return c.first;
577  }
578 };
579 
580 template <>
581 struct Tf_ShouldIterateOverCopy<PcpNodeRef::child_const_range> :
582  std::true_type {};
583 
584 /// Support for range-based for loops for PcpNodeRef children ranges.
585 inline
588 {
589  return r.first;
590 }
591 
592 /// Support for range-based for loops for PcpNodeRef children ranges.
593 inline
596 {
597  return r.second;
598 }
599 
600 /// Support for range-based for loops for PcpNodeRef children ranges.
601 inline
604 {
605  return r.first;
606 }
607 
608 /// Support for range-based for loops for PcpNodeRef children ranges.
609 inline
612 {
613  return r.second;
614 }
615 
616 // Helper to count the non-variant path components of a path; equivalent
617 // to path.StripAllVariantSelections().GetPathElementCount() except
618 // this method avoids constructing a new SdfPath value.
620 
622 
623 #endif // PXR_USD_PCP_NODE_H
bool operator==(const PcpNodeRef_ChildrenIterator &other) const
Definition: node.h:451
Definition: arc.h:27
PcpNodeRef::child_const_iterator IteratorType
Definition: node.h:556
PCP_API bool HasValueClips() const
Get the site this node represents.
PCP_API SdfPath GetPathAtIntroduction() const
Returns the path for this node's site when it was introduced.
friend bool Pcp_IsPropagatedSpecializesNode(const PcpNodeRef &node)
PcpNodeRef_PtrProxy pointer
Definition: node.h:425
PCP_API SdfPermission GetPermission() const
Get the site this node represents.
PCP_API void SetIsDueToAncestor(bool isDueToAncestor)
friend class PcpPrimIndex_Graph
Definition: node.h:356
reference operator*() const
Definition: node.h:437
PCP_API void SetHasTransitiveAncestralDependency(bool hasDep)
Get the site this node represents.
std::pair< child_const_reverse_iterator, child_const_reverse_iterator > child_const_reverse_range
Definition: node.h:54
PCP_API bool IsRootNode() const
Returns true if this node is the root node of the prim index graph.
bool operator<=(const PcpNodeRef &rhs) const
Definition: node.h:86
#define PXR_NAMESPACE_OPEN_SCOPE
Definition: pxr.h:73
PCP_API void SetHasValueClips(bool hasValueClips)
static IteratorType End(PcpNodeRef::child_const_range const &c)
Definition: node.h:561
friend class PcpNodeRef_PrivateChildrenConstReverseIterator
Definition: node.h:361
PCP_API PcpNodeRef InsertChild(const PcpLayerStackSite &site, const PcpArc &arc, PcpErrorBasePtr *error)
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
PCP_API PcpNodeRef GetOriginRootNode() const
PCP_API void SetRestricted(bool restricted)
PCP_API size_t GetSpecContributionRestrictedDepth() const
PcpNodeRef_ChildrenReverseIterator operator++(int)
Definition: node.h:518
friend class PcpNodeRef_PrivateSubtreeConstIterator
Definition: node.h:362
static IteratorType End(PcpNodeRef::child_const_range const &c)
Definition: node.h:574
PcpNodeRef_PtrProxy pointer
Definition: node.h:494
size_t PcpNodeRef::* UnspecifiedBoolType
Returns true if this is a valid node reference, false otherwise.
Definition: node.h:62
PcpNodeRef_ChildrenIterator operator++(int)
Definition: node.h:445
size_t hash_value(const PcpNodeRef &x)
Definition: node.h:396
PCP_API child_const_reverse_range GetChildrenReverseRange() const
PCP_API void SetSpecContributionRestrictedDepth(size_t depth)
PCP_API bool HasTransitiveDirectDependency() const
Get the site this node represents.
**But if you need a result
Definition: thread.h:622
PcpNodeRef_ChildrenIterator child_const_iterator
Definition: node.h:49
static IteratorType Begin(PcpNodeRef::child_const_range const &c)
Definition: node.h:570
PCP_API int GetDepthBelowIntroduction() const
std::ptrdiff_t difference_type
Definition: node.h:495
PCP_API bool operator<(const PcpNodeRef &rhs) const
PCP_API PcpNodeRef GetOriginNode() const
PCP_API friend std::ostream & operator<<(std::ostream &out, const PcpNodeRef &node)
friend class Pcp_TraversalCache
Definition: node.h:363
PCP_API int GetSiblingNumAtOrigin() const
PCP_API void SetHasSymmetry(bool hasSymmetry)
std::shared_ptr< PcpErrorBase > PcpErrorBasePtr
Definition: errors.h:63
PcpNodeRef reference
Definition: node.h:424
< returns > If no error
Definition: snippets.dox:2
Definition: hash.h:472
PcpNodeRef_ChildrenIterator & operator++()
Definition: node.h:440
PCP_API const PcpMapExpression & GetMapToRoot() const
PcpNodeRef_ChildrenReverseIterator & operator++()
Definition: node.h:513
PcpNodeRef()
Definition: node.h:56
std::vector< PcpNodeRef > PcpNodeRefVector
Definition: node.h:402
PcpNodeRef_ChildrenReverseIterator child_const_reverse_iterator
Definition: node.h:50
PCP_API child_const_range GetChildrenRange() const
PCP_API PcpNodeRef GetParentNode() const
size_t operator()(const PcpNodeRef &rhs) const
Definition: node.h:104
GLuint GLuint end
Definition: glcorearb.h:475
TF_DECLARE_REF_PTRS(PcpPrimIndex_Graph)
PCP_API bool IsCulled() const
Get the site this node represents.
PCP_API bool IsDueToAncestor() const
Get the site this node represents.
bool operator!=(const PcpNodeRef &rhs) const
Definition: node.h:74
PCP_API const SdfPath & GetPath() const
Returns the path for the site this node represents.
Hash functor.
Definition: node.h:103
int PcpNode_GetNonVariantPathElementCount(const SdfPath &path)
bool operator>(const PcpNodeRef &rhs) const
Definition: node.h:92
PCP_API void SetInert(bool inert)
bool operator==(const PcpNodeRef_ChildrenReverseIterator &other) const
Definition: node.h:524
PCP_API PcpLayerStackSite GetSite() const
Get the site this node represents.
Definition: path.h:280
friend class PcpNodeRef_PrivateChildrenConstIterator
Definition: node.h:360
GLint GLenum GLint x
Definition: glcorearb.h:409
PCP_API bool IsRestricted() const
Get the site this node represents.
PcpNodeRef::child_const_reverse_iterator IteratorType
Definition: node.h:569
bool operator!=(const PcpNodeRef_ChildrenIterator &other) const
Definition: node.h:455
constexpr size_t PCP_INVALID_INDEX
Definition: types.h:200
GLint GLint GLsizei GLsizei GLsizei depth
Definition: glcorearb.h:476
std::pair< child_const_iterator, child_const_iterator > child_const_range
Definition: node.h:52
PCP_API const PcpLayerStackRefPtr & GetLayerStack() const
Returns the layer stack for the site this node represents.
PCP_API PcpNodeRef GetRootNode() const
Walk up to the root node of this expression.
PCP_API bool CanContributeSpecs() const
Pcp_CompressedSdSite GetCompressedSdSite(size_t layerIndex) const
Definition: node.h:347
PCP_API const PcpMapExpression & GetMapToParent() const
PCP_API int GetNamespaceDepth() const
GLfloat GLfloat GLfloat GLfloat h
Definition: glcorearb.h:2002
PCP_API void SetHasTransitiveDirectDependency(bool hasDep)
Get the site this node represents.
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.
Definition: node.h:587
std::ptrdiff_t difference_type
Definition: node.h:426
std::forward_iterator_tag iterator_category
Definition: node.h:422
PcpPrimIndex_Graph * GetOwningGraph() const
Returns the graph that this node belongs to.
Definition: node.h:109
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
void TfHashAppend(HashState &h, const PcpNodeRef &x)
Typedefs and support functions.
Definition: node.h:391
TfHashSet< PcpNodeRef, PcpNodeRef::Hash > PcpNodeRefHashSet
Definition: node.h:401
bool operator!=(const PcpNodeRef_ChildrenReverseIterator &other) const
Definition: node.h:528
pointer operator->() const
Definition: node.h:511
PCP_API bool HasSpecs() const
Get the site this node represents.
GA_API const UT_StringHolder arc
reference operator*() const
Definition: node.h:510
PCP_API void * GetUniqueIdentifier() const
Returns a value that uniquely identifies this node.
PCP_API bool IsInert() const
Get the site this node represents.
PcpNodeRef * operator->()
Definition: node.h:406
GLboolean r
Definition: glcorearb.h:1222
PCP_API PcpArcType GetArcType() const
Returns the type of arc connecting this node to its parent node.
PCP_API PcpNodeRef_ChildrenReverseIterator()
Constructs an invalid iterator.
static IteratorType Begin(PcpNodeRef::child_const_range const &c)
Definition: node.h:557
PcpNodeRef_ChildrenIterator end(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.
Definition: node.h:595
PCP_API SdfPath GetIntroPath() const
PCP_API bool HasTransitiveAncestralDependency() const
Get the site this node represents.
PCP_API void SetCulled(bool culled)
PCP_API void SetHasSpecs(bool hasSpecs)
bool operator==(const PcpNodeRef &rhs) const
Returns true if this references the same node as rhs.
Definition: node.h:68
PCP_API SdfPath GetPathAtOriginRootIntroduction() const
PCP_API PcpNodeRef_ChildrenIterator()
Constructs an invalid iterator.
PCP_API PcpNodeRef InsertChildSubgraph(const PcpPrimIndex_GraphRefPtr &subgraph, const PcpArc &arc, PcpErrorBasePtr *error)
bool operator>=(const PcpNodeRef &rhs) const
Definition: node.h:98
std::shared_ptr< PcpErrorBase > PcpErrorBasePtr
Definition: node.h:25
PCP_API void SetPermission(SdfPermission perm)
std::forward_iterator_tag iterator_category
Definition: node.h:491
pointer operator->() const
Definition: node.h:438
SdfPermission
Definition: types.h:135
#define PCP_API
Definition: api.h:23
PCP_API bool HasSymmetry() const
Get the site this node represents.
PcpArcType
Definition: types.h:27