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 provides any symmetry opinions, either
256  /// directly or from a namespace ancestor.
257  PCP_API
258  void SetHasSymmetry(bool hasSymmetry);
259  PCP_API
260  bool HasSymmetry() const;
261 
262  /// Get/set the permission for this node. This indicates whether specs
263  /// on this node can be accessed from other nodes.
264  PCP_API
265  void SetPermission(SdfPermission perm);
266  PCP_API
268 
269  /// Get/set whether this node is inert. An inert node never provides
270  /// any opinions to a prim index. Such a node may exist purely as a
271  /// marker to represent certain composition structure, but should never
272  /// contribute opinions.
273  PCP_API
274  void SetInert(bool inert);
275  PCP_API
276  bool IsInert() const;
277 
278  /// Get/set whether this node is culled. If a node is culled, it and
279  /// all descendant nodes provide no opinions to the index. A culled
280  /// node is also considered inert.
281  PCP_API
282  void SetCulled(bool culled);
283  PCP_API
284  bool IsCulled() const;
285 
286  /// Get/set whether this node is restricted. A restricted node is a
287  /// node that cannot contribute opinions to the index due to permissions.
288  PCP_API
289  void SetRestricted(bool restricted);
290  PCP_API
291  bool IsRestricted() const;
292 
293  /// Returns true if this node is allowed to contribute opinions
294  /// for composition, false otherwise.
295  PCP_API
296  bool CanContributeSpecs() const;
297 
298  /// Returns the namespace depth (i.e., the path element count) of
299  /// this node's path when it was restricted from contributing
300  /// opinions for composition. If this spec has no such restriction,
301  /// returns 0.
302  ///
303  /// Note that unlike the value returned by GetNamespaceDepth,
304  /// this value *does* include variant selections.
305  PCP_API
306  size_t GetSpecContributionRestrictedDepth() const;
307 
308  /// Set this node's contribution restriction depth.
309  ///
310  /// Note that this function typically does not need to be called,
311  /// since functions that restrict contributions (e.g., SetInert)
312  /// automatically set the restriction depth appropriately.
313  PCP_API
315 
316  /// Returns true if this node has opinions authored
317  /// for composition, false otherwise.
318  PCP_API
319  void SetHasSpecs(bool hasSpecs);
320  PCP_API
321  bool HasSpecs() const;
322 
323  /// @}
324 
325  // Returns a compressed Sd site. For internal use only.
326  Pcp_CompressedSdSite GetCompressedSdSite(size_t layerIndex) const
327  {
328  return Pcp_CompressedSdSite(_nodeIdx, layerIndex);
329  }
330 
331  PCP_API
332  friend std::ostream & operator<<(std::ostream &out, const PcpNodeRef &node);
333 
334 private:
335  friend class PcpPrimIndex_Graph;
336  friend class PcpNodeIterator;
342  template <class T> friend class Pcp_TraversalCache;
343  friend bool Pcp_IsPropagatedSpecializesNode(const PcpNodeRef& node);
344 
345  // Private constructor for internal use.
346  PcpNodeRef(PcpPrimIndex_Graph* graph, size_t idx)
347  : _graph(graph), _nodeIdx(idx)
348  {}
349 
350  size_t _GetNodeIndex() const { return _nodeIdx; }
351 
352  inline size_t _GetParentIndex() const;
353  inline size_t _GetOriginIndex() const;
354 
355  inline void _SetInert(bool inert);
356  inline void _SetRestricted(bool restricted);
357 
358  enum class _Restricted { Yes, Unknown };
359  void _RecordRestrictionDepth(_Restricted isRestricted);
360 
361 private: // Data
362  PcpPrimIndex_Graph* _graph;
363  size_t _nodeIdx;
364 };
365 
366 /// Typedefs and support functions
367 template <typename HashState>
368 inline
369 void
370 TfHashAppend(HashState& h, const PcpNodeRef& x){
371  h.Append((size_t)(x.GetUniqueIdentifier()));
372 }
373 inline
374 size_t
376 {
377  return TfHash{}(x);
378 }
379 
381 typedef std::vector<PcpNodeRef> PcpNodeRefVector;
382 
384 public:
385  PcpNodeRef* operator->() { return &_nodeRef; }
386 private:
389  explicit PcpNodeRef_PtrProxy(const PcpNodeRef& nodeRef) : _nodeRef(nodeRef) {}
390  PcpNodeRef _nodeRef;
391 };
392 
393 /// \class PcpNodeRef_ChildrenIterator
394 ///
395 /// Object used to iterate over child nodes (not all descendant nodes) of a
396 /// node in the prim index graph in strong-to-weak order.
397 ///
399 {
400 public:
401  using iterator_category = std::forward_iterator_tag;
405  using difference_type = std::ptrdiff_t;
406 
407  /// Constructs an invalid iterator.
408  PCP_API
410 
411  /// Constructs an iterator pointing to \p node. Passing a NULL value
412  /// for \p node constructs an end iterator.
413  PCP_API
414  PcpNodeRef_ChildrenIterator(const PcpNodeRef& node, bool end = false);
415 
416  reference operator*() const { return dereference(); }
417  pointer operator->() const { return pointer(dereference()); }
418 
420  increment();
421  return *this;
422  }
423 
425  const PcpNodeRef_ChildrenIterator result = *this;
426  increment();
427  return result;
428  }
429 
430  bool operator==(const PcpNodeRef_ChildrenIterator& other) const {
431  return equal(other);
432  }
433 
434  bool operator!=(const PcpNodeRef_ChildrenIterator& other) const {
435  return !equal(other);
436  }
437 
438 private:
439  PCP_API
440  void increment();
441  bool equal(const PcpNodeRef_ChildrenIterator& other) const
442  {
443  // Note: The default constructed iterator is *not* equal to any
444  // other iterator.
445  return (_node == other._node && _index == other._index);
446  }
447  reference dereference() const
448  {
449  return reference(_node._graph, _index);
450  }
451 
452 private:
453  // Current graph node this iterator is pointing at.
454  PcpNodeRef _node;
455 
456  // Index of current child.
457  size_t _index;
458 
460 };
461 
462 /// \class PcpNodeRef_ChildrenReverseIterator
463 ///
464 /// Object used to iterate over nodes in the prim index graph in weak-to-strong
465 /// order.
466 ///
468 {
469 public:
470  using iterator_category = std::forward_iterator_tag;
474  using difference_type = std::ptrdiff_t;
475 
476  /// Constructs an invalid iterator.
477  PCP_API
479 
480  /// Constructs a reverse iterator from a forward iterator.
481  PCP_API
483 
484  /// Constructs an iterator pointing to \p node. Passing a NULL value
485  /// for \p node constructs an end iterator.
486  PCP_API
487  PcpNodeRef_ChildrenReverseIterator(const PcpNodeRef& node,bool end = false);
488 
489  reference operator*() const { return dereference(); }
490  pointer operator->() const { return pointer(dereference()); }
491 
493  increment();
494  return *this;
495  }
496 
499  increment();
500  return result;
501  }
502 
504  return equal(other);
505  }
506 
508  return !equal(other);
509  }
510 
511 private:
512  PCP_API
513  void increment();
514  bool equal(const PcpNodeRef_ChildrenReverseIterator& other) const
515  {
516  // Note: The default constructed iterator is *not* equal to any
517  // other iterator.
518  return (_node == other._node && _index == other._index);
519  }
520  reference dereference() const
521  {
522  return reference(_node._graph, _index);
523  }
524 
525 private:
526  // Current graph node this iterator is pointing at.
527  PcpNodeRef _node;
528 
529  // Index of current child.
530  size_t _index;
531 };
532 
533 template <>
534 struct Tf_IteratorInterface<PcpNodeRef::child_const_range, false> {
537  {
538  return c.first;
539  }
541  {
542  return c.second;
543  }
544 };
545 
546 template <>
547 struct Tf_IteratorInterface<PcpNodeRef::child_const_range, true> {
550  {
551  return c.second;
552  }
554  {
555  return c.first;
556  }
557 };
558 
559 template <>
560 struct Tf_ShouldIterateOverCopy<PcpNodeRef::child_const_range> :
561  std::true_type {};
562 
563 /// Support for range-based for loops for PcpNodeRef children ranges.
564 inline
567 {
568  return r.first;
569 }
570 
571 /// Support for range-based for loops for PcpNodeRef children ranges.
572 inline
575 {
576  return r.second;
577 }
578 
579 /// Support for range-based for loops for PcpNodeRef children ranges.
580 inline
583 {
584  return r.first;
585 }
586 
587 /// Support for range-based for loops for PcpNodeRef children ranges.
588 inline
591 {
592  return r.second;
593 }
594 
595 // Helper to count the non-variant path components of a path; equivalent
596 // to path.StripAllVariantSelections().GetPathElementCount() except
597 // this method avoids constructing a new SdfPath value.
599 
601 
602 #endif // PXR_USD_PCP_NODE_H
bool operator==(const PcpNodeRef_ChildrenIterator &other) const
Definition: node.h:430
Definition: arc.h:27
PcpNodeRef::child_const_iterator IteratorType
Definition: node.h:535
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:404
PCP_API SdfPermission GetPermission() const
Get the site this node represents.
TfHashSet< PcpNodeRef, PcpNodeRef::Hash > PcpNodeRefHashSet
Definition: node.h:380
PCP_API void SetIsDueToAncestor(bool isDueToAncestor)
friend class PcpPrimIndex_Graph
Definition: node.h:335
reference operator*() const
Definition: node.h:416
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
static IteratorType End(PcpNodeRef::child_const_range const &c)
Definition: node.h:540
friend class PcpNodeRef_PrivateChildrenConstReverseIterator
Definition: node.h:340
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:497
friend class PcpNodeRef_PrivateSubtreeConstIterator
Definition: node.h:341
static IteratorType End(PcpNodeRef::child_const_range const &c)
Definition: node.h:553
PcpNodeRef_PtrProxy pointer
Definition: node.h:473
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:424
PCP_API child_const_reverse_range GetChildrenReverseRange() const
PCP_API void SetSpecContributionRestrictedDepth(size_t depth)
**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:549
PCP_API int GetDepthBelowIntroduction() const
std::ptrdiff_t difference_type
Definition: node.h:474
PCP_API bool operator<(const PcpNodeRef &rhs) const
PCP_API PcpNodeRef GetOriginNode() const
int PcpNode_GetNonVariantPathElementCount(const SdfPath &path)
PCP_API friend std::ostream & operator<<(std::ostream &out, const PcpNodeRef &node)
friend class Pcp_TraversalCache
Definition: node.h:342
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:403
< returns > If no error
Definition: snippets.dox:2
Definition: hash.h:472
PcpNodeRef_ChildrenIterator & operator++()
Definition: node.h:419
std::shared_ptr< PcpErrorBase > PcpErrorBasePtr
Definition: node.h:25
TF_DECLARE_REF_PTRS(PcpPrimIndex_Graph)
PCP_API const PcpMapExpression & GetMapToRoot() const
PcpNodeRef_ChildrenReverseIterator & operator++()
Definition: node.h:492
PcpNodeRef()
Definition: node.h:56
PcpNodeRef_ChildrenIterator end(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.
Definition: node.h:574
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
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
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:503
PCP_API PcpLayerStackSite GetSite() const
Get the site this node represents.
Definition: path.h:273
friend class PcpNodeRef_PrivateChildrenConstIterator
Definition: node.h:339
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:548
bool operator!=(const PcpNodeRef_ChildrenIterator &other) const
Definition: node.h:434
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:326
PCP_API const PcpMapExpression & GetMapToParent() const
PCP_API int GetNamespaceDepth() const
GLfloat GLfloat GLfloat GLfloat h
Definition: glcorearb.h:2002
size_t hash_value(const PcpNodeRef &x)
Definition: node.h:375
std::vector< PcpNodeRef > PcpNodeRefVector
Definition: node.h:381
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1425
std::ptrdiff_t difference_type
Definition: node.h:405
std::forward_iterator_tag iterator_category
Definition: node.h:401
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
bool operator!=(const PcpNodeRef_ChildrenReverseIterator &other) const
Definition: node.h:507
pointer operator->() const
Definition: node.h:490
PCP_API bool HasSpecs() const
Get the site this node represents.
GA_API const UT_StringHolder arc
reference operator*() const
Definition: node.h:489
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:385
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:536
void TfHashAppend(HashState &h, const PcpNodeRef &x)
Typedefs and support functions.
Definition: node.h:370
PCP_API SdfPath GetIntroPath() const
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
PCP_API void SetPermission(SdfPermission perm)
std::forward_iterator_tag iterator_category
Definition: node.h:470
pointer operator->() const
Definition: node.h:417
SdfPermission
Definition: types.h:132
#define PCP_API
Definition: api.h:23
PCP_API bool HasSymmetry() const
Get the site this node represents.
PcpArcType
Definition: types.h:27
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.
Definition: node.h:566