11 #include <unordered_map>
27 for(
int l=0;
l<nLinks;
l++) {
38 for(
int i=0;
i<height;
i++) {
39 for(
int j=0;j<width;j++) inFile >>
dummy;
42 int vol_id =
src / 1000;
44 if(vol_id == 13 || vol_id == 12 || vol_id == 14) {
51 if(vol_id == 13 || vol_id == 12 || vol_id == 14) {
59 std::vector<FASTRACK_CONNECTION*> v = {pC};
61 }
else (*it).second.push_back(pC);
66 std::list<const FASTRACK_CONNECTION*> lConns;
68 std::map<int, std::vector<const FASTRACK_CONNECTION*> > newConnMap;
70 for(
const auto&
conn : m_connMap) {
76 while(!lConns.empty()) {
78 std::unordered_map<unsigned int, std::pair<int, int> > mCounter;
80 for(
const auto&
conn : lConns) {
81 auto entryIt = mCounter.find(
conn->m_dst);
82 if(entryIt != mCounter.end()) {
83 (*entryIt).second.first++;
88 mCounter.insert(std::make_pair(
conn->m_dst, std::make_pair(nDst, nSrc)));
91 entryIt = mCounter.find(
conn->m_src);
92 if(entryIt != mCounter.end()) {
93 (*entryIt).second.second++;
98 mCounter.insert(std::make_pair(
conn->m_src, std::make_pair(nDst, nSrc)));
104 std::set<unsigned int> zeroLayers;
106 for(
const auto& layerCounts : mCounter) {
108 if(layerCounts.second.second!=0)
continue;
110 zeroLayers.insert(layerCounts.first);
115 std::vector<const FASTRACK_CONNECTION*> theStage;
119 while(cIt!=lConns.end()) {
120 if(zeroLayers.find((*cIt)->m_dst) != zeroLayers.end()) {
121 theStage.push_back(*cIt);
122 cIt = lConns.erase(cIt);
127 newConnMap.insert(std::make_pair(stageCounter, theStage));
133 int currentStage = 0;
137 for(std::map<
int, std::vector<const FASTRACK_CONNECTION*> >::reverse_iterator
it = newConnMap.rbegin();
it!=newConnMap.rend();++
it, currentStage++) {
139 const std::vector<const FASTRACK_CONNECTION*> & vConn = (*it).second;
143 std::map<unsigned int, std::vector<const FASTRACK_CONNECTION*> > l1ConnMap;
145 for(
const auto*
conn : vConn) {
147 unsigned int dst =
conn->m_dst;
149 std::map<unsigned int, std::vector<const FASTRACK_CONNECTION*> >
::iterator l1MapIt = l1ConnMap.find(dst);
150 if(l1MapIt != l1ConnMap.end())
151 (*l1MapIt).second.push_back(
conn);
153 std::vector<const FASTRACK_CONNECTION*>
v = {
conn};
154 l1ConnMap.insert(std::make_pair(dst,
v));
158 std::vector<LayerGroup> lgv;
160 lgv.reserve(l1ConnMap.size());
162 for(
const auto& l1Group : l1ConnMap) {
163 lgv.push_back(LayerGroup(l1Group.first, l1Group.second));
166 m_layerGroups.insert(std::make_pair(currentStage, lgv));
179 (*it).second.clear();