28 unsigned int stage{}, lIdx{}, src{}, dst{}, nEntries{};
29 int height{},
width{};
33 for(
int l=0;l<nLinks;l++) {
34 inFile >> lIdx >> stage >> src >> dst >> height >>
width >> nEntries;
39 for(
int i=0;i<height;i++) {
41 for(
int j=0;j<width;j++) inFile >> dummy;
44 int srcvol_id = src / 1000;
45 int dstvol_id = dst / 1000;
47 bool srcIsStrip = (srcvol_id == 13 || srcvol_id == 12 || srcvol_id == 14);
48 bool dstIsStrip = (dstvol_id == 13 || dstvol_id == 12 || dstvol_id == 14);
50 if ( !srcIsStrip || !dstIsStrip) {
55 if ( srcIsStrip || dstIsStrip) {
61 std::map<int, std::vector<GNNR3_FASTRACK_CONNECTION*> >
::iterator it =
m_connMap.find(stage);
64 std::vector<GNNR3_FASTRACK_CONNECTION*> v = {pC};
65 m_connMap.insert(std::make_pair(stage, v));
66 }
else (*it).second.push_back(pC);
71 std::list<const GNNR3_FASTRACK_CONNECTION*> lConns;
73 std::map<int, std::vector<const GNNR3_FASTRACK_CONNECTION*> > newConnMap;
75 for(
const auto& conn : m_connMap) {
76 std::copy(conn.second.begin(), conn.second.end(), std::back_inserter(lConns));
81 while(!lConns.empty()) {
83 std::unordered_map<unsigned int, std::pair<int, int> > mCounter;
85 for(
const auto& conn : lConns) {
86 auto entryIt = mCounter.find(
conn->m_dst);
87 if(entryIt != mCounter.end()) {
88 (*entryIt).second.first++;
93 mCounter.insert(std::make_pair(
conn->m_dst, std::make_pair(nDst, nSrc)));
96 entryIt = mCounter.find(
conn->m_src);
97 if(entryIt != mCounter.end()) {
98 (*entryIt).second.second++;
103 mCounter.insert(std::make_pair(
conn->m_src, std::make_pair(nDst, nSrc)));
109 std::set<unsigned int> zeroLayers;
111 for(
const auto& layerCounts : mCounter) {
113 if(layerCounts.second.second!=0)
continue;
115 zeroLayers.insert(layerCounts.first);
120 std::vector<const GNNR3_FASTRACK_CONNECTION*> theStage;
122 std::list<const GNNR3_FASTRACK_CONNECTION*>::iterator cIt = lConns.begin();
124 while(cIt!=lConns.end()) {
125 if(zeroLayers.find((*cIt)->m_dst) != zeroLayers.end()) {
126 theStage.push_back(*cIt);
127 cIt = lConns.erase(cIt);
132 newConnMap.insert(std::make_pair(stageCounter, theStage));
138 int currentStage = 0;
142 for(std::map<
int, std::vector<const GNNR3_FASTRACK_CONNECTION*> >::reverse_iterator it = newConnMap.rbegin();it!=newConnMap.rend();++it, currentStage++) {
144 const std::vector<const GNNR3_FASTRACK_CONNECTION*> & vConn = (*it).second;
148 std::map<unsigned int, std::vector<const GNNR3_FASTRACK_CONNECTION*> > l1ConnMap;
150 for(
const auto* conn : vConn) {
152 unsigned int dst =
conn->m_dst;
154 std::map<unsigned int, std::vector<const GNNR3_FASTRACK_CONNECTION*> >
::iterator l1MapIt = l1ConnMap.find(dst);
155 if(l1MapIt != l1ConnMap.end())
156 (*l1MapIt).second.push_back(conn);
158 std::vector<const GNNR3_FASTRACK_CONNECTION*>
v = {
conn};
159 l1ConnMap.insert(std::make_pair(dst, v));
163 std::vector<LayerGroup> lgv;
165 lgv.reserve(l1ConnMap.size());
167 for(
const auto& l1Group : l1ConnMap) {
168 lgv.push_back(LayerGroup(l1Group.first, l1Group.second));
171 m_layerGroups.insert(std::make_pair(currentStage, lgv));