150 Tilewire nodeTilewire = inNode->getTilewire();
152 unsigned int childCount = 0;
153 unsigned int parentCount = 0;
155 for (
unsigned int i = 0 ; i < outArcs.size(); i++) {
160 for (
unsigned int i = 0; i < inArcs.size(); i++) {
165 if (childCount == 0) {
167 std::cout <<
"FOUND A SINK NODE: " << nodeTilewire << std::endl;
169 if (parentCount == 0) {
171 std::cout <<
"FOUND A SOURCE NODE: " << nodeTilewire << std::endl;
173 if (childCount > 1 || parentCount > 1) {
175 std::cout <<
"FOUND A BRANCH NODE: " << nodeTilewire
176 <<
" children: " << childCount <<
" parents: " << parentCount << std::endl;
181 if (childCount == 1 && parentCount == 1) {
189 traceSinks = !isBranch;
192 traceSources = !isBranch;
197 for (
unsigned int i = 0; i < outArcs.size(); i++) {
198 const Tilewire& sinkTilewire = outArcs[i].getSinkTilewire();
203 TraceNode* arcNode =
getNode(sinkTilewire);
208 activeSinks.push_back(arcNode);
212 inNode->addChild(arcNode);
213 arcNode->addParent(inNode);
224 for (
unsigned int i = 0; i < inArcs.size(); i++) {
225 const Tilewire& sourceTilewire = inArcs[i].getSourceTilewire();
230 TraceNode* arcNode =
getNode(sourceTilewire);
235 activeSources.push_back(arcNode);
239 arcNode->addChild(inNode);
240 inNode->addParent(arcNode);
253 for (
unsigned int i = 0; i < activeSinks.size(); i++) {
261 for (
unsigned int i = 0; i < activeSources.size(); i++) {
TraceNode * createNode(Tilewire inTilewire)
Create a TraceNode and update auxiliary structures.
void traceWorker(TraceNode *inNode, ETraceMode inMode)
Recursively traces from the specified TraceNode in the specified mode.
std::map< TraceNode *, std::map< TraceNode *, Arc > > mTraceNodesToArc
Map of TraceNode pointers to Arc that connects them.
architecture::ArcVector ArcVector
void expandSegmentSinks(const Tilewire &inTilewire, ArcVector &outSinks, EExpandDirection inExpandDirection=eExpandDirectionNone, bool inUseTied=true, bool inUseRegular=true, bool inUseIrregular=true, bool inUseRoutethrough=true)
Expands all sink arcs for the given tilewire's segment.
std::vector< TraceNode * > TraceNodePtrVector
Vector of TraceNode pointer.
TraceNode * getNode(Tilewire inTilewire)
Get a TraceNode based on its owning Tilewire.
ArcUsage & mArcUsage
ArcUsage reference.
TraceNodePtrVector mBranchPoints
Vector of net branch nodes.
TraceNodePtrVector mSources
Vector of net source nodes.
architecture::Tilewire Tilewire
void expandSegmentSources(const Tilewire &inTilewire, ArcVector &outSources, EExpandDirection inExpandDirection=eExpandDirectionNone, bool inUseTied=true, bool inUseRegular=true, bool inUseIrregular=true, bool inUseRoutethrough=true)
Expands all source arcs for the given tilewire's segment.
TraceNodePtrVector mSinks
Vector of net sink nodes.
Arc findArc(TraceNode *source, TraceNode *sink)
Find a traced Arc from the nodes that it connects.
DDB & mDB
Database reference.
bool isUsed(const Arc &inArc)
Determines whether the specified arc is in use.