diff --git a/alliance/src/ocp/src/placer/PDetSubRow.cpp b/alliance/src/ocp/src/placer/PDetSubRow.cpp index faa10622..f6fba282 100644 --- a/alliance/src/ocp/src/placer/PDetSubRow.cpp +++ b/alliance/src/ocp/src/placer/PDetSubRow.cpp @@ -4,6 +4,13 @@ #include "PDetPlacement.h" #include +PDetSubRow::~PDetSubRow() +{ + for (PDetInsVector::iterator iit = _detInsVector.begin(); + iit != _detInsVector.end(); iit++) + delete *iit; +} + PDetSubRow::PDetSubRow(PSubRow& subrow): PContainer(subrow.GetBBox()), _orientation(subrow.GetOrientation()) @@ -14,7 +21,7 @@ PDetSubRow::PDetSubRow(PSubRow& subrow): bit != subrow.GetBins().end(); bit++) { - nbins += bit->GetToPlaceInss().size(); + nbins += (*bit)->GetToPlaceInss().size(); } _detInsVector.reserve(nbins); @@ -23,11 +30,11 @@ PDetSubRow::PDetSubRow(PSubRow& subrow): bit != subrow.GetBins().end(); bit++) { - for (PBin::PToPlaceInss::iterator iit = bit->GetToPlaceInss().begin(); - iit != bit->GetToPlaceInss().end(); + for (PBin::PToPlaceInss::iterator iit = (*bit)->GetToPlaceInss().begin(); + iit != (*bit)->GetToPlaceInss().end(); iit++) { - _detInsVector.push_back(PDetToPlaceIns(*iit)); + _detInsVector.push_back(new PDetToPlaceIns(*iit)); } } } @@ -41,7 +48,7 @@ PDetSubRow::ExpandInstances(const bool eqmargin) iit != _detInsVector.end(); iit++) { - totalinssize += iit->GetWidth(); + totalinssize += (*iit)->GetWidth(); } //xtof: 06 05 2002 //changing the white space repartition @@ -67,26 +74,26 @@ PDetSubRow::ExpandInstances(const bool eqmargin) iit != _detInsVector.end(); iit++) { - iit->SetMarginWidth(iit->GetWidth() + inswhitespace); + (*iit)->SetMarginWidth((*iit)->GetWidth() + inswhitespace); } PDetInsVector::iterator iit = _detInsVector.begin(); if (eqmargin) { while (whitespaceremain-- > 0.0) { - (iit++)->AddWhiteSpace(); + (*iit++)->AddWhiteSpace(); } } else { while (whitespaceremain >= 2.0) { - (iit++)->AddDoubleWhiteSpace(); + (*iit++)->AddDoubleWhiteSpace(); whitespaceremain -= 2.0; } if (whitespaceremain > 0.0) { - (iit)->AddWhiteSpace(); + (*iit)->AddWhiteSpace(); } } @@ -95,8 +102,8 @@ PDetSubRow::ExpandInstances(const bool eqmargin) iit != _detInsVector.end(); iit++) { - iit->SetLeftCornerX(XPos); - XPos += iit->GetMarginWidth(); + (*iit)->SetLeftCornerX(XPos); + XPos += (*iit)->GetMarginWidth(); } } @@ -126,7 +133,7 @@ PDetSubRow::FinalOptimize() for (PDetInsVector::iterator iit = _detInsVector.begin(); iit != _detInsVector.end(); iit++) { - insvector.push_back(&(*iit)); + insvector.push_back(*iit); } sort(insvector.begin(), insvector.end(), CompareInsPosition(insvector)); PDetPlacement::Problem problem; diff --git a/alliance/src/ocp/src/placer/PDetSubRow.h b/alliance/src/ocp/src/placer/PDetSubRow.h index 93cc3942..feea1df9 100644 --- a/alliance/src/ocp/src/placer/PDetSubRow.h +++ b/alliance/src/ocp/src/placer/PDetSubRow.h @@ -12,7 +12,7 @@ class PSubRow; class PDetSubRow : public PContainer { public: - typedef vector PDetInsVector; + typedef vector PDetInsVector; private: @@ -22,6 +22,7 @@ class PDetSubRow : public PContainer { public: PDetSubRow(PSubRow& subrow); + ~PDetSubRow(); bool GetOrientation() const { return _orientation; } PDetInsVector& GetInssVector() { return _detInsVector; } const PDetInsVector& GetConstInssVector() const { return _detInsVector; } diff --git a/alliance/src/ocp/src/placer/PElem.h b/alliance/src/ocp/src/placer/PElem.h index e8bdb345..056b27a5 100644 --- a/alliance/src/ocp/src/placer/PElem.h +++ b/alliance/src/ocp/src/placer/PElem.h @@ -30,7 +30,7 @@ class PElem { double GetPosY() const { return GetPos().GetY(); } virtual ostream& Print(ostream& os) const = 0; - void DescribeOn(ostream& os) const; + void DescribeOn(ostream& os) const; }; static inline ostream& operator<<(ostream& os, const PElem& elem) { diff --git a/alliance/src/ocp/src/placer/PPlacement.cpp b/alliance/src/ocp/src/placer/PPlacement.cpp index c018294a..eaf3935c 100644 --- a/alliance/src/ocp/src/placer/PPlacement.cpp +++ b/alliance/src/ocp/src/placer/PPlacement.cpp @@ -54,6 +54,20 @@ PPlacement::~PPlacement() { delete *nit; } + + for (PRows::iterator rit = _rows.begin(); + rit != _rows.end(); + rit++) + { + delete *rit; + } + + for (PDetSubRows::iterator srit = _detSubRows.begin(); + srit != _detSubRows.end(); + srit++) + { + delete *srit; + } } void @@ -391,7 +405,7 @@ PPlacement::Init(lofig* fig, int NbRows) // Insertion of instances on rows vector::iterator iptfirst = ClassedInss.begin(); PRows::iterator rfirst = _rows.begin(); - PRow::PSubRows::iterator subrfirst = rfirst->GetSubRows().begin(); + PRow::PSubRows::iterator subrfirst = (*rfirst)->GetSubRows().begin(); PIns* InsInserting = *iptfirst; while(1) { @@ -405,10 +419,10 @@ PPlacement::Init(lofig* fig, int NbRows) // end of insertion } - if (subrfirst == rfirst->GetSubRows().end() + if (subrfirst == (*rfirst)->GetSubRows().end() && (++rfirst != _rows.end())) { - subrfirst = rfirst->GetSubRows().begin(); + subrfirst = (*rfirst)->GetSubRows().begin(); } if (rfirst == _rows.end()) @@ -417,21 +431,21 @@ PPlacement::Init(lofig* fig, int NbRows) { InsInserting = *iptfirst; rfirst = _rows.begin(); - subrfirst = rfirst->GetSubRows().begin(); + subrfirst = (*rfirst)->GetSubRows().begin(); } else { // insertion of instances with respect of Bins margin // did not succed, inserting what's left. rfirst = _rows.begin(); - subrfirst = rfirst->GetSubRows().begin(); - NbOfBins = subrfirst->GetNBins(); + subrfirst = (*rfirst)->GetSubRows().begin(); + NbOfBins = (*subrfirst)->GetNBins(); BinNumber = 0; while (iptfirst != ClassedInss.end()) { if ((*iptfirst)->GetWidth() <= - subrfirst->GetWidth() - subrfirst->GetSize()) + (*subrfirst)->GetWidth() - (*subrfirst)->GetSize()) { - subrfirst->ForceIns(**(iptfirst++), BinNumber++); + (*subrfirst)->ForceIns(**(iptfirst++), BinNumber++); } else BinNumber++; @@ -439,15 +453,15 @@ PPlacement::Init(lofig* fig, int NbRows) { subrfirst++; BinNumber = 0; - if (subrfirst != rfirst->GetSubRows().end()) - NbOfBins = subrfirst->GetNBins(); + if (subrfirst != (*rfirst)->GetSubRows().end()) + NbOfBins = (*subrfirst)->GetNBins(); } - if (subrfirst == rfirst->GetSubRows().end() + if (subrfirst == (*rfirst)->GetSubRows().end() && (++rfirst != _rows.end())) { - subrfirst = rfirst->GetSubRows().begin(); - NbOfBins = subrfirst->GetNBins(); + subrfirst = (*rfirst)->GetSubRows().begin(); + NbOfBins = (*subrfirst)->GetNBins(); } if (rfirst == _rows.end()) @@ -462,19 +476,19 @@ PPlacement::Init(lofig* fig, int NbRows) exit(1); } rfirst = _rows.begin(); - subrfirst = rfirst->GetSubRows().begin(); + subrfirst = (*rfirst)->GetSubRows().begin(); InsInserting = *iptfirst; } } } } - NbOfBins = subrfirst->GetNBins(); + NbOfBins = (*subrfirst)->GetNBins(); BinNumber = 0; while ((iptfirst != ClassedInss.end()) && (BinNumber < NbOfBins) - && ((*iptfirst)->GetWidth() <= subrfirst->GetCapa() - subrfirst->GetSize())) + && ((*iptfirst)->GetWidth() <= (*subrfirst)->GetCapa() - (*subrfirst)->GetSize())) { - if (subrfirst->InsertIns(**iptfirst, BinNumber++)) + if ((*subrfirst)->InsertIns(**iptfirst, BinNumber++)) { iptfirst++; } @@ -839,9 +853,9 @@ PPlacement::PlotInstances(ofstream& out) const { out << "#rows" << endl; - for (PRows::const_iterator RowIt=_rows.begin(); RowIt!=_rows.end(); RowIt++) + for (PRows::const_iterator rit=_rows.begin(); rit!=_rows.end(); rit++) { - RowIt->Plot(out); + (*rit)->Plot(out); } out << "EOF" << endl; out << "#to place instances" << endl; @@ -885,9 +899,9 @@ PPlacement::PlotAll(char* output) const PlotInstances(out); out << "#nets" << endl; - for (PONets::const_iterator NetIt=_nets.begin(); NetIt!=_nets.end(); NetIt++) + for (PONets::const_iterator nit=_nets.begin(); nit!=_nets.end(); nit++) { - (*NetIt)->Plot(out); + (*nit)->Plot(out); } out << "EOF" << endl << "pause -1 'press any key'" << endl; } @@ -924,33 +938,33 @@ PPlacement::PlotFinal(char* output) const out << "EOF" << endl; out << "#subrows" << endl; - for (PDetSubRows::const_iterator SRowIt = _detSubRows.begin() ; - SRowIt != _detSubRows.end() ; - SRowIt++) + for (PDetSubRows::const_iterator srit = _detSubRows.begin() ; + srit != _detSubRows.end() ; + srit++) { - SRowIt->Plot(out); + (*srit)->Plot(out); } out << "EOF" << endl; out << "#instances" << endl; - for (PDetSubRows::const_iterator SRowIt = _detSubRows.begin() ; - SRowIt != _detSubRows.end() ; - SRowIt++) + for (PDetSubRows::const_iterator srit = _detSubRows.begin() ; + srit != _detSubRows.end() ; + srit++) { - for (PDetSubRow::PDetInsVector::const_iterator InsIt = SRowIt->GetConstInssVector().begin() ; - InsIt != SRowIt->GetConstInssVector().end() ; - InsIt++) + for (PDetSubRow::PDetInsVector::const_iterator iit = (*srit)->GetConstInssVector().begin() ; + iit != (*srit)->GetConstInssVector().end() ; + iit++) { - InsIt->Plot(out); + (*iit)->Plot(out); } } out << "EOF" << endl; out << "#nets" << endl; - for (PONets::const_iterator NetIt=_nets.begin(); NetIt!=_nets.end(); NetIt++) + for (PONets::const_iterator nit=_nets.begin(); nit!=_nets.end(); nit++) { - (*NetIt)->Plot(out); + (*nit)->Plot(out); } out << "EOF" << endl << "pause -1 'press any key'" << endl; } @@ -996,24 +1010,24 @@ PPlacement::PlotOnlyBins(char* output) const if (_totalMoves != 0) { - for (PRows::const_iterator RowIt=_rows.begin(); RowIt!=_rows.end(); RowIt++) + for (PRows::const_iterator rit=_rows.begin(); rit!=_rows.end(); rit++) { - RowIt->PlotLabel(out, _totalMoves); + (*rit)->PlotLabel(out, _totalMoves); } } out << "plot [:][:] '-' w l 1, '-' w l 2" << endl << "#bins" << endl; - for (PRows::const_iterator RowIt=_rows.begin(); RowIt!=_rows.end(); RowIt++) + for (PRows::const_iterator rit=_rows.begin(); rit!=_rows.end(); rit++) { - RowIt->Plot(out); + (*rit)->Plot(out); } out << "EOF" << endl; out << "#preplaced instances" << endl; - for (PFixedInss::const_iterator insit = _fixedInss.begin(); - insit != _fixedInss.end(); insit++) + for (PFixedInss::const_iterator iit = _fixedInss.begin(); + iit != _fixedInss.end(); iit++) { - (*insit)->Plot(out); + (*iit)->Plot(out); } out << "EOF" << endl; out << "pause -1 'press any key'" << endl; @@ -1233,27 +1247,27 @@ PPlacement::InitPlace(int NbRows) _rowZeroOrientation = RowOrientation; for (int i = 0; i < NRows; i++) { - _rows.push_back(PRow(1)); + _rows.push_back(new PRow(1)); double XMin = 0.0; - _rows.back().Init(Y, XMin, *this, RowOrientation); + _rows.back()->Init(Y, XMin, *this, RowOrientation); _rowsYMax[Y + ROWHEIGHT] = rowidx; _rowsYMinInv[Y] = rowidx; ++rowidx; - PSubRow& subrow = _rows.back()._subRows[0]; - subrow.Init(&(_rows.back()), Y, XMin, rowwidth, _margin, + PSubRow& subrow = *(_rows.back()->_subRows[0]); + subrow.Init(_rows.back(), Y, XMin, rowwidth, _margin, _binsMaxWidth, _binsMinWidth); - _rows.back()._subRowsXMax[rowwidth + XMin] = 0; - _rows.back()._subRowsXMaxInv[rowwidth + XMin] = 0; + _rows.back()->_subRowsXMax[rowwidth + XMin] = 0; + _rows.back()->_subRowsXMaxInv[rowwidth + XMin] = 0; Y += ROWHEIGHT; RowOrientation = !RowOrientation; } // Computing Placement BBox double MaxX = 0.0, MaxY = 0.0, RowMaxX, RowMaxY; - for (PRows::iterator rfirst = _rows.begin(); rfirst != _rows.end(); rfirst++) + for (PRows::iterator rit = _rows.begin(); rit != _rows.end(); rit++) { - RowMaxX = rfirst->GetMaxX(); - RowMaxY = rfirst->GetMaxY(); + RowMaxX = (*rit)->GetMaxX(); + RowMaxY = (*rit)->GetMaxY(); if (MaxX < RowMaxX) MaxX = RowMaxX; if (MaxY < RowMaxY) @@ -1414,11 +1428,11 @@ PPlacement::InitPlaceWithPrePlace() int numsubrows = CheckCreateRow(tabpreplace, yit, Width); if (numsubrows > 0) { - _rows.push_back(PRow(*this, (double)(yit * ROWHEIGHT), Width, numsubrows, orientation)); + _rows.push_back(new PRow(*this, (double)(yit * ROWHEIGHT), Width, numsubrows, orientation)); _rowsYMax[(yit + 1) * ROWHEIGHT] = numrows; _rowsYMinInv[yit * ROWHEIGHT] = numrows; ++numrows; - CreateSubRows(&_rows.back(), tabpreplace, yit, numsubrows, Width); + CreateSubRows(_rows.back(), tabpreplace, yit, numsubrows, Width); } orientation = !orientation; } @@ -1459,7 +1473,7 @@ PPlacement::CreateSubRows(PRow* row, PrePlaceTab& tabpreplace, if ( (xmax - xmin) >= _binsMinWidth) { - row->_subRows[subrowscreated].Init(row, (double)(coordy * ROWHEIGHT), (double)xmin,(double)xmax, + row->_subRows[subrowscreated]->Init(row, (double)(coordy * ROWHEIGHT), (double)xmin,(double)xmax, (double)_margin, _binsMaxWidth, _binsMinWidth); row->_subRowsXMax[(double)xmax] = subrowscreated; ++subrowscreated; @@ -1529,5 +1543,5 @@ PPlacement::GetRow(const PRow* row, const double dist) PRowsYMax::iterator rsup = _rowsYMinInv.upper_bound(bornesup); unsigned randidx = rinf->second + (unsigned)((double)(rsup->second - rinf->second + 1) * (rand() / (RAND_MAX+1.0))); - return _rows[randidx]; + return *_rows[randidx]; } diff --git a/alliance/src/ocp/src/placer/PPlacement.h b/alliance/src/ocp/src/placer/PPlacement.h index 2dab6a05..ff0c7324 100644 --- a/alliance/src/ocp/src/placer/PPlacement.h +++ b/alliance/src/ocp/src/placer/PPlacement.h @@ -27,14 +27,14 @@ struct eqstr class PPlacement { public: - typedef vector PRows; + typedef vector PRows; typedef vector PONets; typedef vector PToPlaceInss; typedef vector PFixedInss; typedef vector PCons; typedef vector PrePlaceRow; typedef vector PrePlaceTab; - typedef vector PDetSubRows; + typedef vector PDetSubRows; private: typedef map > PRowsYMax; @@ -47,8 +47,8 @@ class PPlacement { typedef hash_map, eqstr> PDetInsMap; PBBox BBox; - int _dx; - int _dy; + int _dx; + int _dy; lofig* _fig; phfig* _prePlaceFig; diff --git a/alliance/src/ocp/src/placer/PPlacementFinal.cpp b/alliance/src/ocp/src/placer/PPlacementFinal.cpp index 3e09f686..c048f9cf 100644 --- a/alliance/src/ocp/src/placer/PPlacementFinal.cpp +++ b/alliance/src/ocp/src/placer/PPlacementFinal.cpp @@ -69,11 +69,11 @@ PPlacement::FinalInitialize() unsigned nbsubrows = 0; for (PRows::iterator rit = _rows.begin(); rit != _rows.end(); rit++) { - for (PRow::PSubRows::iterator srit = rit->GetSubRows().begin(); - srit != rit->GetSubRows().end(); + for (PRow::PSubRows::iterator srit = (*rit)->GetSubRows().begin(); + srit != (*rit)->GetSubRows().end(); srit++) { - if (srit->GetNIns() > 0) + if ((*srit)->GetNIns() > 0) ++nbsubrows; } } @@ -81,12 +81,12 @@ PPlacement::FinalInitialize() for (PRows::iterator rit = _rows.begin(); rit != _rows.end(); rit++) { - for (PRow::PSubRows::iterator srit = rit->GetSubRows().begin(); - srit != rit->GetSubRows().end(); + for (PRow::PSubRows::iterator srit = (*rit)->GetSubRows().begin(); + srit != (*rit)->GetSubRows().end(); srit++) { - if (srit->GetNIns() > 0) - _detSubRows.push_back(PDetSubRow(*srit)); + if ((*srit)->GetNIns() > 0) + _detSubRows.push_back(new PDetSubRow(**srit)); } } @@ -95,11 +95,12 @@ PPlacement::FinalInitialize() for (PDetSubRows::iterator dsrit = _detSubRows.begin(); dsrit != _detSubRows.end(); dsrit++) { - for (PDetSubRow::PDetInsVector::iterator it = dsrit->GetInssVector().begin(); - it != dsrit->GetInssVector().end(); it++) + for (PDetSubRow::PDetInsVector::iterator it = (*dsrit)->GetInssVector().begin(); + it != (*dsrit)->GetInssVector().end(); + it++) { - pdetinsmap[it->GetInstance()->INSNAME] = &(*it); - it->SetSubRow(&(*dsrit)); + pdetinsmap[(*it)->GetInstance()->INSNAME] = *it; + (*it)->SetSubRow(*dsrit); } } @@ -144,7 +145,7 @@ PPlacement::FinalInitialize() for (PDetSubRows::iterator dsrit = _detSubRows.begin(); dsrit != _detSubRows.end(); dsrit++) { - dsrit->ExpandInstances(_eqMargin); + (*dsrit)->ExpandInstances(_eqMargin); } // Updating All _nets BBoxs @@ -195,7 +196,7 @@ PPlacement::FinalOptimize() for (PDetSubRows::iterator dsrit = _detSubRows.begin(); dsrit != _detSubRows.end(); dsrit++) { - if (dsrit->FinalOptimize()) + if ((*dsrit)->FinalOptimize()) { ContinueCondition = true; OptimizationResult = true; @@ -238,10 +239,10 @@ PPlacement::Save() for (PDetSubRows::iterator dsrit = _detSubRows.begin(); dsrit != _detSubRows.end(); dsrit++) { - for (PDetSubRow::PDetInsVector::iterator it = dsrit->GetInssVector().begin(); - it != dsrit->GetInssVector().end(); it++) + for (PDetSubRow::PDetInsVector::iterator it = (*dsrit)->GetInssVector().begin(); + it != (*dsrit)->GetInssVector().end(); it++) { - it->Save(physicalfig, _dx, _dy); + (*it)->Save(physicalfig, _dx, _dy); } } diff --git a/alliance/src/ocp/src/placer/PPlacementGlobal.cpp b/alliance/src/ocp/src/placer/PPlacementGlobal.cpp index ac040725..e5252bc5 100644 --- a/alliance/src/ocp/src/placer/PPlacementGlobal.cpp +++ b/alliance/src/ocp/src/placer/PPlacementGlobal.cpp @@ -88,9 +88,9 @@ double PPlacement::GetRowCost() { double RowCost = 0.0; - for (PRows::iterator RowIt = _rows.begin(); RowIt != _rows.end(); RowIt++) + for (PRows::iterator rit = _rows.begin(); rit != _rows.end(); rit++) { - RowCost += RowIt->GetSubRowCost(); + RowCost += (*rit)->GetSubRowCost(); } return RowCost; } @@ -100,9 +100,9 @@ PPlacement::GetBinCost() { double BinCost = 0.0; - for (PRows::iterator RowIt = _rows.begin(); RowIt != _rows.end(); RowIt++) + for (PRows::iterator rit = _rows.begin(); rit != _rows.end(); rit++) { - BinCost += RowIt->GetBinCost(); + BinCost += (*rit)->GetBinCost(); } return BinCost; } diff --git a/alliance/src/ocp/src/placer/PRow.cpp b/alliance/src/ocp/src/placer/PRow.cpp index 574f6530..8510d9e0 100644 --- a/alliance/src/ocp/src/placer/PRow.cpp +++ b/alliance/src/ocp/src/placer/PRow.cpp @@ -6,6 +6,12 @@ PRow::PRow(unsigned nbofsubrows) : PContainer(), _subRows(nbofsubrows) { + for (PSubRows::iterator srit=_subRows.begin(); + srit!=_subRows.end(); + srit++) + { + *srit = new PSubRow(); + } } PRow::PRow(PPlacement& placement, @@ -17,6 +23,18 @@ PRow::PRow(PPlacement& placement, _subRows(nbofsubrows), _orientation(orientation) { + for (PSubRows::iterator srit=_subRows.begin(); + srit!=_subRows.end(); + srit++) + *srit = new PSubRow(); +} + +PRow::~PRow() +{ + for (PSubRows::iterator srit=_subRows.begin(); + srit!=_subRows.end(); + srit++) + delete *srit; } void @@ -41,7 +59,7 @@ PRow::GetBinCost() const double bincost = 0.0; for (PSubRows::const_iterator srit = _subRows.begin(); srit != _subRows.end(); srit++) { - bincost += srit->GetBinCost(); + bincost += (*srit)->GetBinCost(); } return bincost; } @@ -52,7 +70,7 @@ PRow::GetSubRowCost() const double subrowcost = 0.0; for (PSubRows::const_iterator srit = _subRows.begin(); srit != _subRows.end(); srit++) { - subrowcost += Abs(srit->GetSize() - srit->GetCapa()); + subrowcost += Abs((*srit)->GetSize() - (*srit)->GetCapa()); } return subrowcost; } @@ -62,7 +80,7 @@ PRow::GetSubRow(const double X) { // s'il y a un seul subrow on le renvoie direct if (_subRows.size() == 1) - return _subRows[0]; + return *_subRows[0]; // si il n'y a rien a droite PSubRowsXMax::iterator right = _subRowsXMax.lower_bound(X); @@ -71,33 +89,33 @@ PRow::GetSubRow(const double X) if (right == _subRowsXMax.end()) { assert(left != _subRowsXMaxInv.end()); - return _subRows[left->second]; + return *_subRows[left->second]; } // si on est tombe direct dans un subrow... - double rightminx = _subRows[right->second].GetMinX(); + double rightminx = _subRows[right->second]->GetMinX(); if (X > rightminx) - return _subRows[right->second]; + return *_subRows[right->second]; // si il n'y a rien a gauche... if (left == _subRowsXMaxInv.end()) { assert(right != _subRowsXMax.end()); - return _subRows[right->second]; + return *_subRows[right->second]; } // on est au milieu de deux subrows, on // renvoie le plus proche. - if ((X - _subRows[left->second].GetMaxX()) - > (_subRows[right->second].GetMinX() - X)) + if ((X - _subRows[left->second]->GetMaxX()) + > (_subRows[right->second]->GetMinX() - X)) { - return _subRows[right->second]; + return *_subRows[right->second]; } else { - return _subRows[left->second]; + return *_subRows[left->second]; } } @@ -106,7 +124,7 @@ PRow::Plot(ofstream& out) const { for (PSubRows::const_iterator srit=_subRows.begin(); srit!=_subRows.end(); srit++) { - srit->Plot(out); + (*srit)->Plot(out); } return out; } @@ -115,10 +133,10 @@ ofstream& PRow::PlotLabel(ofstream& out, unsigned TotalMoves) const { for (PSubRows::const_iterator srit=_subRows.begin(); srit!=_subRows.end(); srit++) - { - srit->PlotLabel(out, TotalMoves); - } - return out; + { + (*srit)->PlotLabel(out, TotalMoves); + } + return out; } ostream& PRow::Print(ostream& os) const diff --git a/alliance/src/ocp/src/placer/PRow.h b/alliance/src/ocp/src/placer/PRow.h index 8b22ce3c..947c8e85 100644 --- a/alliance/src/ocp/src/placer/PRow.h +++ b/alliance/src/ocp/src/placer/PRow.h @@ -17,7 +17,7 @@ class PRow : public PContainer friend class PPlacement; public: - typedef vector PSubRows; + typedef vector PSubRows; typedef map > PSubRowsXMax; typedef map > PSubRowsXMaxInv; @@ -32,6 +32,7 @@ class PRow : public PContainer PRow(unsigned nbofsubrows); PRow(PPlacement& placement, const double ymin, const double xmax, const unsigned nbofsubrows, const bool orientation); + ~PRow(); void Init(double Y, double MinX, PPlacement &Placement, const bool RowOrientation); bool GetOrientation() const { return _orientation; } diff --git a/alliance/src/ocp/src/placer/PSubRow.cpp b/alliance/src/ocp/src/placer/PSubRow.cpp index 81946406..2311cda3 100644 --- a/alliance/src/ocp/src/placer/PSubRow.cpp +++ b/alliance/src/ocp/src/placer/PSubRow.cpp @@ -9,7 +9,12 @@ PSubRow::PSubRow() {} PSubRow::~PSubRow() -{} +{ + for (PBins::iterator bit = _bins.begin(); + bit !=_bins.end(); + bit++) + delete *bit; +} unsigned PSubRow::GetNBins() const @@ -52,21 +57,21 @@ PSubRow::Init(PRow* row, double y, double minx, double maxx, double margin, doub _bins.reserve(_nBins); for (unsigned binnumber = 0; binnumber < _nBins; binnumber++) { - _bins.push_back(PBin()); + _bins.push_back(new PBin()); binbbox.SetMinX(xpos); if (modulo > 0) { - xpos += (binswidth+1); - binbbox.SetMaxX(xpos); - modulo--; + xpos += (binswidth+1); + binbbox.SetMaxX(xpos); + modulo--; } else { - xpos += binswidth; - binbbox.SetMaxX(xpos); + xpos += binswidth; + binbbox.SetMaxX(xpos); } _binsXMax[xpos] = binnumber; - _bins.back().Init(binbbox, binscapa, *this); + _bins.back()->Init(binbbox, binscapa, *this); } _row->MergeBBox(_bBox); } @@ -74,25 +79,25 @@ PSubRow::Init(PRow* row, double y, double minx, double maxx, double margin, doub PBin& PSubRow::GetBin(const double X) { - if (X >= _bins.rbegin()->GetMaxX()) - return *(_bins.rbegin()); + if (X >= (*_bins.rbegin())->GetMaxX()) + return **(_bins.rbegin()); - if (X <= _bins.begin()->GetMinX()) - return *(_bins.begin()); + if (X <= (*_bins.begin())->GetMinX()) + return **(_bins.begin()); PBinsXMax::iterator srpos = _binsXMax.upper_bound(X); - return _bins[srpos->second]; + return *_bins[srpos->second]; } bool PSubRow::InsertIns(PToPlaceIns& Ins, int BinNumber) { - if ((_bins[BinNumber].GetCapa() - _bins[BinNumber].GetSize()) + if ((_bins[BinNumber]->GetCapa() - _bins[BinNumber]->GetSize()) < Ins.GetWidth()) return false; else { - _bins[BinNumber].AddIns(&Ins); + _bins[BinNumber]->AddIns(&Ins); return true; } } @@ -101,15 +106,15 @@ unsigned PSubRow::GetNIns() const { unsigned nins = 0; - for (PBins::const_iterator BinIt=_bins.begin(); BinIt!=_bins.end(); BinIt++) - nins += BinIt->GetNIns(); + for (PBins::const_iterator bit =_bins.begin(); bit !=_bins.end(); bit++) + nins += (*bit)->GetNIns(); return nins; } void PSubRow::ForceIns(PToPlaceIns& Ins, int BinNumber) { - _bins[BinNumber].AddIns(&Ins); + _bins[BinNumber]->AddIns(&Ins); } #ifndef Abs @@ -119,9 +124,9 @@ double PSubRow::GetBinCost() const { double BinCost = 0.0; - for (PBins::const_iterator BinIt = _bins.begin(); BinIt != _bins.end(); BinIt++) + for (PBins::const_iterator bit = _bins.begin(); bit != _bins.end(); bit++) { - BinCost += Abs(BinIt->GetSize() - BinIt->GetCapa()); + BinCost += Abs((*bit)->GetSize() - (*bit)->GetCapa()); } return BinCost; } @@ -129,9 +134,9 @@ PSubRow::GetBinCost() const ofstream& PSubRow::Plot(ofstream& out) const { - for (PBins::const_iterator BinIt=_bins.begin(); BinIt!=_bins.end(); BinIt++) + for (PBins::const_iterator bit=_bins.begin(); bit!=_bins.end(); bit++) { - BinIt->Plot(out); + (*bit)->Plot(out); } return out; } @@ -139,11 +144,11 @@ PSubRow::Plot(ofstream& out) const ofstream& PSubRow::PlotLabel(ofstream& out, unsigned TotalMoves) const { - for (PBins::const_iterator BinIt=_bins.begin(); BinIt!=_bins.end(); BinIt++) - { - BinIt->PlotLabel(out, TotalMoves); - } - return out; + for (PBins::const_iterator bit=_bins.begin(); bit!=_bins.end(); bit++) + { + (*bit)->PlotLabel(out, TotalMoves); + } + return out; } ostream& diff --git a/alliance/src/ocp/src/placer/PSubRow.h b/alliance/src/ocp/src/placer/PSubRow.h index 663d8f0b..88a819de 100644 --- a/alliance/src/ocp/src/placer/PSubRow.h +++ b/alliance/src/ocp/src/placer/PSubRow.h @@ -16,7 +16,7 @@ class PSubRow : public PContainer { friend class PRow; public: - typedef vector PBins; + typedef vector PBins; typedef map PBinsXMax; private: