Compute and display feed insertion statistic per row.
This commit is contained in:
parent
172bdd9240
commit
2e50ff4724
|
@ -66,6 +66,7 @@ namespace {
|
||||||
inline SliceHoles* getSliceHoles () const;
|
inline SliceHoles* getSliceHoles () const;
|
||||||
inline EtesianEngine* getEtesian () const;
|
inline EtesianEngine* getEtesian () const;
|
||||||
inline size_t getSpinSlice0 () const;
|
inline size_t getSpinSlice0 () const;
|
||||||
|
DbU::Unit getAverageChunk () const;
|
||||||
void merge ( DbU::Unit source, DbU::Unit target );
|
void merge ( DbU::Unit source, DbU::Unit target );
|
||||||
void addFeeds ( size_t islice );
|
void addFeeds ( size_t islice );
|
||||||
void fillHole ( DbU::Unit xmin, DbU::Unit xmax, DbU::Unit ybottom, size_t yspin );
|
void fillHole ( DbU::Unit xmin, DbU::Unit xmax, DbU::Unit ybottom, size_t yspin );
|
||||||
|
@ -184,6 +185,41 @@ namespace {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DbU::Unit Slice::getAverageChunk () const
|
||||||
|
{
|
||||||
|
if (_chunks.empty()) return -1;
|
||||||
|
|
||||||
|
DbU::Unit holeLength = 0;
|
||||||
|
list<Interval>::const_iterator ichunk = _chunks.begin();
|
||||||
|
list<Interval>::const_iterator ichunknext = ichunk;
|
||||||
|
++ichunknext;
|
||||||
|
|
||||||
|
// Hole before the first chunk.
|
||||||
|
if ((*ichunk).getVMin() > getXMin()) {
|
||||||
|
holeLength += (*ichunk).getVMin() - getXMin();
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ; ichunknext != _chunks.end() ; ++ichunk, ++ichunknext ) {
|
||||||
|
holeLength += (*ichunknext).getVMin() - (*ichunk).getVMax();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hole after the last chunk.
|
||||||
|
if ((*ichunk).getVMax() < getXMax()) {
|
||||||
|
holeLength += getXMax() - (*ichunk).getVMax();
|
||||||
|
}
|
||||||
|
|
||||||
|
Cell* feed = getEtesian()->getFeedCells().getBiggestFeed();
|
||||||
|
if (feed == NULL) {
|
||||||
|
cerr << Error("EtesianEngine: No feed has been registered, ignoring.") << endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
DbU::Unit feedWidth = feed->getAbutmentBox().getWidth();
|
||||||
|
|
||||||
|
return ((getXMax() - getXMin()) * feedWidth) / holeLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Slice::fillHole ( DbU::Unit xmin, DbU::Unit xmax, DbU::Unit ybottom, size_t yspin )
|
void Slice::fillHole ( DbU::Unit xmin, DbU::Unit xmax, DbU::Unit ybottom, size_t yspin )
|
||||||
{
|
{
|
||||||
Cell* feed = getEtesian()->getFeedCells().getBiggestFeed();
|
Cell* feed = getEtesian()->getFeedCells().getBiggestFeed();
|
||||||
|
@ -287,9 +323,12 @@ namespace {
|
||||||
|
|
||||||
void SliceHoles::addFeeds ()
|
void SliceHoles::addFeeds ()
|
||||||
{
|
{
|
||||||
for ( size_t islice=0 ; islice<_slices.size() ; islice++ )
|
for ( size_t islice=0 ; islice<_slices.size() ; islice++ ) {
|
||||||
|
cerr << setw(3) << islice << " | "
|
||||||
|
<< DbU::getValueString(_slices[islice]->getAverageChunk()) << endl;
|
||||||
_slices[islice]->addFeeds( islice );
|
_slices[islice]->addFeeds( islice );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} // End of anonymous namespace.
|
} // End of anonymous namespace.
|
||||||
|
|
Loading…
Reference in New Issue