6#ifndef MATERIALX_TRAVERSAL_H
7#define MATERIALX_TRAVERSAL_H
35 _elemConnect(elemConnect),
41 bool operator==(
const Edge& rhs)
const
43 return _elemDown == rhs._elemDown &&
44 _elemConnect == rhs._elemConnect &&
45 _elemUp == rhs._elemUp;
47 bool operator!=(
const Edge& rhs)
const
49 return !(*
this == rhs);
51 bool operator<(
const Edge& rhs)
const
53 return std::tie(_elemDown, _elemConnect, _elemUp) < std::tie(rhs._elemDown, rhs._elemConnect, rhs._elemUp);
56 operator bool()
const;
77 string getName()
const;
101 using StackFrame = std::pair<ElementPtr, size_t>;
106 return _elem == rhs._elem &&
107 _stack == rhs._stack &&
108 _prune == rhs._prune;
112 return !(*
this == rhs);
142 return _stack.size();
172 _holdCount = holdCount;
183 vector<StackFrame> _stack;
200 _pathElems.insert(elem);
205 using ElementSet = std::set<ElementPtr>;
206 using StackFrame = std::pair<ElementPtr, size_t>;
211 return _upstreamElem == rhs._upstreamElem &&
212 _stack == rhs._stack &&
213 _prune == rhs._prune;
217 return !(*
this == rhs);
223 return Edge(getDownstreamElement(),
224 getConnectingElement(),
225 getUpstreamElement());
238 return !_stack.empty() ? _stack.back().first :
ElementPtr();
244 return _connectingElem;
250 return _upstreamElem;
257 return !_stack.empty() ? _stack.back().second : 0;
268 return _stack.size();
273 size_t getNodeDepth()
const;
308 _holdCount = holdCount;
319 void returnPathDownstream(
ElementPtr upstreamElem);
324 ElementSet _pathElems;
325 vector<StackFrame> _stack;
341 _pathElems.insert(elem);
346 using ConstElementSet = std::set<ConstElementPtr>;
351 return _elem == rhs._elem;
355 return !(*
this == rhs);
373 _holdCount = holdCount;
382 ConstElementSet _pathElems;
391 using Exception::Exception;
394extern MX_CORE_API
const Edge NULL_EDGE;
396extern MX_CORE_API
const TreeIterator NULL_TREE_ITERATOR;
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition: Element.h:31
shared_ptr< const Element > ConstElementPtr
A shared pointer to a const Element.
Definition: Element.h:33
An edge between two connected Elements, returned during graph traversal.
Definition: Traversal.h:31
ElementPtr getDownstreamElement() const
Return the downstream element of the edge.
Definition: Traversal.h:59
ElementPtr getConnectingElement() const
Return the connecting element of the edge, if any.
Definition: Traversal.h:65
ElementPtr getUpstreamElement() const
Return the upstream element of the edge.
Definition: Traversal.h:71
An exception that is thrown when a traversal call encounters a cycle.
Definition: Traversal.h:389
The base class for exceptions that are propagated from the MaterialX library to the client applicatio...
Definition: Exception.h:23
An iterator object representing the state of an upstream graph traversal.
Definition: Traversal.h:193
ElementPtr getDownstreamElement() const
Return the downstream element of the current edge.
Definition: Traversal.h:236
size_t getUpstreamIndex() const
Return the index of the current edge within the range of upstream edges available to the downstream e...
Definition: Traversal.h:255
bool getPruneSubgraph() const
Return the prune subgraph flag, which controls whether the current subgraph is pruned from traversal.
Definition: Traversal.h:289
Edge operator*() const
Dereference this iterator, returning the current edge in the traversal.
Definition: Traversal.h:221
ElementPtr getConnectingElement() const
Return the connecting element, if any, of the current edge.
Definition: Traversal.h:242
ElementPtr getUpstreamElement() const
Return the upstream element of the current edge.
Definition: Traversal.h:248
void setPruneSubgraph(bool prune)
Set the prune subgraph flag, which controls whether the current subgraph is pruned from traversal.
Definition: Traversal.h:282
size_t getElementDepth() const
Return the element depth of the current traversal, where a single edge between two elements represent...
Definition: Traversal.h:266
GraphIterator & begin(size_t holdCount=0)
Interpret this object as an iteration range, and return its begin iterator.
Definition: Traversal.h:300
An iterator object representing the current state of an inheritance traversal.
Definition: Traversal.h:335
InheritanceIterator & begin(size_t holdCount=0)
Interpret this object as an iteration range, and return its begin iterator.
Definition: Traversal.h:371
ConstElementPtr operator*() const
Dereference this iterator, returning the current element in the traversal.
Definition: Traversal.h:360
An iterator object representing the state of a tree traversal.
Definition: Traversal.h:90
TreeIterator & begin(size_t holdCount=0)
Interpret this object as an iteration range, and return its begin iterator.
Definition: Traversal.h:170
ElementPtr operator*() const
Dereference this iterator, returning the current element in the traversal.
Definition: Traversal.h:117
void setPruneSubtree(bool prune)
Set the prune subtree flag, which controls whether the current subtree is pruned from traversal.
Definition: Traversal.h:152
ElementPtr getElement() const
Return the current element in the traversal.
Definition: Traversal.h:129
size_t getElementDepth() const
Return the element depth of the current traversal, where the starting element represents a depth of z...
Definition: Traversal.h:140
bool getPruneSubtree() const
Return the prune subtree flag, which controls whether the current subtree is pruned from traversal.
Definition: Traversal.h:159