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