17 {
18
21
22 int nLinks;
23
25
26
27 for(
int l=0;
l<nLinks;
l++) {
28
31
33
35
37
38 for(
int i=0;
i<height;
i++) {
39 for(
int j=0;j<width;j++) inFile >>
dummy;
40 }
41
42 int srcvol_id =
src / 1000;
43 int dstvol_id = dst / 1000;
44
45 bool srcIsStrip = (srcvol_id == 13 || srcvol_id == 12 || srcvol_id == 14);
46 bool dstIsStrip = (dstvol_id == 13 || dstvol_id == 12 || dstvol_id == 14);
47 if (LRTmode) {
48 if ( !srcIsStrip || !dstIsStrip) {
49 delete pC;
50 continue;
51 }
52 } else {
53 if ( srcIsStrip || dstIsStrip) {
54 delete pC;
55 continue;
56 }
57 }
58
59 std::map<int, std::vector<GNN_FASTRACK_CONNECTION*> >::iterator
it =
m_connMap.find(stage);
60
62 std::vector<GNN_FASTRACK_CONNECTION*> v = {pC};
63 m_connMap.insert(std::make_pair(stage, v));
64 } else (*it).second.push_back(pC);
65 }
66
67
68
69 std::list<const GNN_FASTRACK_CONNECTION*> lConns;
70
71 std::map<int, std::vector<const GNN_FASTRACK_CONNECTION*> > newConnMap;
72
74 std::copy(
conn.second.begin(),
conn.second.end(), std::back_inserter(lConns));
75 }
76
77 int stageCounter = 0;
78
79 while(!lConns.empty()) {
80
81 std::unordered_map<unsigned int, std::pair<int, int> > mCounter;
82
83 for(const auto& conn : lConns) {
84 auto entryIt = mCounter.find(
conn->m_dst);
85 if(entryIt != mCounter.end()) {
86 (*entryIt).second.first++;
87 }
88 else {
89 int nDst = 1;
90 int nSrc = 0;
91 mCounter.insert(std::make_pair(
conn->m_dst, std::make_pair(nDst, nSrc)));
92 }
93
94 entryIt = mCounter.find(
conn->m_src);
95 if(entryIt != mCounter.end()) {
96 (*entryIt).second.second++;
97 }
98 else {
99 int nDst = 0;
100 int nSrc = 1;
101 mCounter.insert(std::make_pair(
conn->m_src, std::make_pair(nDst, nSrc)));
102 }
103 }
104
105
106
107 std::set<unsigned int> zeroLayers;
108
109 for(const auto& layerCounts : mCounter) {
110
111 if(layerCounts.second.second!=0) continue;
112
113 zeroLayers.insert(layerCounts.first);
114 }
115
116
117
118 std::vector<const GNN_FASTRACK_CONNECTION*> theStage;
119
120 std::list<const GNN_FASTRACK_CONNECTION*>::iterator cIt = lConns.begin();
121
122 while(cIt!=lConns.end()) {
123 if(zeroLayers.find((*cIt)->m_dst) != zeroLayers.end()) {
124 theStage.push_back(*cIt);
125 cIt = lConns.erase(cIt);
126 continue;
127 }
128 ++cIt;
129 }
130 newConnMap.insert(std::make_pair(stageCounter, theStage));
131 stageCounter++;
132 }
133
134
135
136 int currentStage = 0;
137
138
139
140 for(std::map<int, std::vector<const GNN_FASTRACK_CONNECTION*> >::reverse_iterator it = newConnMap.rbegin();it!=newConnMap.rend();++it, currentStage++) {
141
142 const std::vector<const GNN_FASTRACK_CONNECTION*> & vConn = (*it).second;
143
144
145
146 std::map<unsigned int, std::vector<const GNN_FASTRACK_CONNECTION*> > l1ConnMap;
147
148 for(const auto* conn : vConn) {
149
150 unsigned int dst =
conn->m_dst;
151
152 std::map<unsigned int, std::vector<const GNN_FASTRACK_CONNECTION*> >::iterator l1MapIt = l1ConnMap.find(dst);
153 if(l1MapIt != l1ConnMap.end())
154 (*l1MapIt).second.push_back(conn);
155 else {
156 std::vector<const GNN_FASTRACK_CONNECTION*>
v = {
conn};
157 l1ConnMap.insert(std::make_pair(dst, v));
158 }
159 }
160
161 std::vector<LayerGroup> lgv;
162
163 lgv.reserve(l1ConnMap.size());
164
165 for(const auto& l1Group : l1ConnMap) {
166 lgv.push_back(
LayerGroup(l1Group.first, l1Group.second));
167 }
168
170 }
171
172 newConnMap.clear();
173
174}
struct GNN_FasTrackConnection GNN_FASTRACK_CONNECTION
std::map< int, std::vector< GNN_FASTRACK_CONNECTION * > > m_connMap
std::map< int, std::vector< struct LayerGroup > > m_layerGroups
l
Printing final latex table to .tex output file.