* ./hurricane/src/hurricane/ExtensionSlice.h
./hurricane/src/hurricane/ExtensionSlice.cpp ./hurricane/src/hurricane/ExtensionGo.h ./hurricane/src/hurricane/ExtensionGo.cpp : - New : support for user-based Gos & Slices. A normal slice is a couple (Layer,QuadTree) while a ExtensionSlice is a couple (Name,Quadtree). Note that for efficiency ExtensionSlices also uses a mask bitmap. This new feature implies modifications of the Cell QuadTrees and the Query callback/class. CellWidget & Palette also updated to allow the drawing of thoses new slices. * ./coriolis/src/crlcore/src/cyclop/DemoGo.{h,cpp} : - Example : how to construct & uses an ExtensionGo (draw a thick red box around the Cell's abutment box).
This commit is contained in:
parent
e32a20b23f
commit
48b0e4c3c6
|
@ -16,13 +16,13 @@
|
|||
hurricane/DataBase.h
|
||||
hurricane/DBo.h hurricane/DBos.h
|
||||
hurricane/DeepNet.h
|
||||
hurricane/DisplaySlot.h hurricane/DisplaySlots.h
|
||||
hurricane/DRCError.h
|
||||
hurricane/Entities.h hurricane/Entity.h
|
||||
hurricane/Error.h
|
||||
hurricane/Exception.h
|
||||
hurricane/Filter.h
|
||||
hurricane/Go.h hurricane/Gos.h
|
||||
hurricane/ExtensionGo.h hurricane/ExtensionGos.h
|
||||
hurricane/Hook.h hurricane/Hooks.h
|
||||
hurricane/Horizontal.h hurricane/Horizontals.h
|
||||
hurricane/HyperNet.h
|
||||
|
@ -64,6 +64,7 @@
|
|||
hurricane/SharedName.h
|
||||
hurricane/SharedPathes.h hurricane/SharedPath.h
|
||||
hurricane/Slice.h hurricane/Slices.h
|
||||
hurricane/ExtensionSlice.h hurricane/ExtensionSlices.h
|
||||
hurricane/SlotAdapter.h
|
||||
hurricane/Slot.h
|
||||
hurricane/Symbols.h
|
||||
|
@ -73,7 +74,6 @@
|
|||
hurricane/Transformation.h
|
||||
hurricane/DbU.h
|
||||
hurricane/UpdateSession.h
|
||||
hurricane/UserGo.h hurricane/UserGos.h
|
||||
hurricane/VectorCollection.h
|
||||
hurricane/Vertical.h hurricane/Verticals.h
|
||||
hurricane/Views.h
|
||||
|
@ -112,7 +112,7 @@
|
|||
DeepNet.cpp
|
||||
HyperNet.cpp
|
||||
Go.cpp
|
||||
UserGo.cpp
|
||||
ExtensionGo.cpp
|
||||
Hook.cpp
|
||||
Instance.cpp
|
||||
Component.cpp
|
||||
|
@ -136,10 +136,10 @@
|
|||
Occurrence.cpp
|
||||
QuadTree.cpp
|
||||
Slice.cpp
|
||||
ExtensionSlice.cpp
|
||||
UpdateSession.cpp
|
||||
Region.cpp
|
||||
Query.cpp
|
||||
DisplaySlot.cpp
|
||||
Marker.cpp
|
||||
Timer.cpp
|
||||
)
|
||||
|
|
|
@ -21,6 +21,50 @@
|
|||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
void Cell::_insertSlice ( ExtensionSlice* slice )
|
||||
{
|
||||
ExtensionSliceMap::iterator islice = _extensionSlices.find ( slice->getName() );
|
||||
if ( islice != _extensionSlices.end() )
|
||||
throw Error ( "Attempt to re-create ExtensionSlice %s in Cell %s."
|
||||
, getString(slice->getName()).c_str()
|
||||
, getString(slice->getCell()->getName()).c_str()
|
||||
);
|
||||
|
||||
_extensionSlices.insert ( pair<Name,ExtensionSlice*>(slice->getName(),slice) );
|
||||
}
|
||||
|
||||
|
||||
void Cell::_removeSlice ( ExtensionSlice* slice )
|
||||
{
|
||||
ExtensionSliceMap::iterator islice = _extensionSlices.find ( slice->getName() );
|
||||
if ( islice != _extensionSlices.end() ) {
|
||||
islice->second->_destroy ();
|
||||
_extensionSlices.erase ( islice );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ExtensionSlice* Cell::getExtensionSlice ( const Name& name ) const
|
||||
{
|
||||
ExtensionSliceMap::const_iterator islice = _extensionSlices.find ( name );
|
||||
if ( islice != _extensionSlices.end() )
|
||||
return islice->second;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
ExtensionSlice::Mask Cell::getExtensionSliceMask ( const Name& name ) const
|
||||
{
|
||||
ExtensionSliceMap::const_iterator islice = _extensionSlices.find ( name );
|
||||
if ( islice != _extensionSlices.end() )
|
||||
return islice->second->getMask();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// Cell implementation
|
||||
// ****************************************************************************************************
|
||||
|
@ -35,6 +79,7 @@ Cell::Cell(Library* library, const Name& name)
|
|||
_slaveInstanceSet(),
|
||||
_netMap(),
|
||||
_sliceMap(),
|
||||
_extensionSlices(),
|
||||
_markerSet(),
|
||||
//_viewSet(),
|
||||
_abutmentBox(),
|
||||
|
@ -215,16 +260,14 @@ void Cell::unmaterialize()
|
|||
void Cell::_postCreate()
|
||||
// *********************
|
||||
{
|
||||
_library->_getCellMap()._insert(this);
|
||||
|
||||
Inherit::_postCreate();
|
||||
|
||||
_library->_getCellMap()._insert(this);
|
||||
}
|
||||
|
||||
void Cell::_preDestroy()
|
||||
// ********************
|
||||
{
|
||||
Inherit::_preDestroy();
|
||||
|
||||
while(_slaveEntityMap.size()) {
|
||||
_slaveEntityMap.begin()->second->destroy();
|
||||
}
|
||||
|
@ -235,8 +278,11 @@ void Cell::_preDestroy()
|
|||
for_each_instance(instance, getInstances()) instance->destroy(); end_for;
|
||||
for_each_net(net, getNets()) net->destroy(); end_for;
|
||||
for_each_slice(slice, getSlices()) slice->_destroy(); end_for;
|
||||
while(!_extensionSlices.empty()) _removeSlice(_extensionSlices.begin()->second);
|
||||
|
||||
_library->_getCellMap()._remove(this);
|
||||
|
||||
Inherit::_preDestroy();
|
||||
}
|
||||
|
||||
string Cell::_getString() const
|
||||
|
|
|
@ -229,6 +229,604 @@ class Cell_ComponentsUnder : public Collection<Component*> {
|
|||
};
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::Cell::Cell_ExtensionSlices".
|
||||
|
||||
|
||||
class Cell_ExtensionSlices : public Collection<ExtensionSlice*> {
|
||||
|
||||
public:
|
||||
class Locator : public Hurricane::Locator<ExtensionSlice*> {
|
||||
public:
|
||||
Locator ();
|
||||
Locator ( const Cell* , ExtensionSlice::Mask mask=~0 );
|
||||
Locator ( const Locator& );
|
||||
Locator& operator= ( const Locator& );
|
||||
virtual ExtensionSlice* getElement () const;
|
||||
virtual Hurricane::Locator<ExtensionSlice*>*
|
||||
getClone () const;
|
||||
virtual bool isValid () const;
|
||||
virtual void progress ();
|
||||
virtual string _getString () const;
|
||||
private:
|
||||
const Cell* _cell;
|
||||
ExtensionSlice::Mask _mask;
|
||||
ExtensionSliceLocator _sliceLocator;
|
||||
|
||||
};
|
||||
|
||||
private:
|
||||
const Cell* _cell;
|
||||
ExtensionSlice::Mask _mask;
|
||||
|
||||
public:
|
||||
Cell_ExtensionSlices ();
|
||||
Cell_ExtensionSlices ( const Cell* , ExtensionSlice::Mask mask=~0 );
|
||||
Cell_ExtensionSlices ( const Cell_ExtensionSlices& );
|
||||
Cell_ExtensionSlices& operator= ( const Cell_ExtensionSlices& );
|
||||
virtual Collection<ExtensionSlice*>* getClone () const;
|
||||
virtual Hurricane::Locator<ExtensionSlice*>* getLocator() const;
|
||||
virtual string _getString () const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
Cell_ExtensionSlices::Cell_ExtensionSlices ()
|
||||
: Collection<ExtensionSlice*>()
|
||||
, _cell(NULL)
|
||||
, _mask(0)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionSlices::Cell_ExtensionSlices ( const Cell* cell, ExtensionSlice::Mask mask )
|
||||
: Collection<ExtensionSlice*>()
|
||||
, _cell(cell)
|
||||
, _mask(mask)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionSlices::Cell_ExtensionSlices ( const Cell_ExtensionSlices& slices )
|
||||
: Collection<ExtensionSlice*>()
|
||||
, _cell(slices._cell)
|
||||
, _mask(slices._mask)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionSlices& Cell_ExtensionSlices::operator= ( const Cell_ExtensionSlices& slices )
|
||||
{
|
||||
_cell = slices._cell;
|
||||
_mask = slices._mask;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Collection<ExtensionSlice*>* Cell_ExtensionSlices::getClone () const
|
||||
{
|
||||
return new Cell_ExtensionSlices(*this);
|
||||
}
|
||||
|
||||
|
||||
Locator<ExtensionSlice*>* Cell_ExtensionSlices::getLocator () const
|
||||
{
|
||||
return new Locator(_cell,_mask);
|
||||
}
|
||||
|
||||
|
||||
string Cell_ExtensionSlices::_getString () const
|
||||
{
|
||||
string s = "<" + _TName("Cell::ExtensionSlices");
|
||||
if (_cell) {
|
||||
s += " " + getString(_cell);
|
||||
//s += " " + getString(_mask);
|
||||
}
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Cell_ExtensionSlices::Locator::Locator()
|
||||
: Hurricane::Locator<ExtensionSlice*>()
|
||||
, _cell(NULL)
|
||||
, _mask(0)
|
||||
, _sliceLocator()
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionSlices::Locator::Locator ( const Cell* cell, ExtensionSlice::Mask mask )
|
||||
: Hurricane::Locator<ExtensionSlice*>()
|
||||
, _cell(cell)
|
||||
, _mask(mask)
|
||||
, _sliceLocator()
|
||||
{
|
||||
if (_cell && (_mask != 0)) {
|
||||
_sliceLocator = getCollection(_cell->getExtensionSliceMap()).getLocator();
|
||||
while (_sliceLocator.isValid() && !(_sliceLocator.getElement()->getMask() & _mask))
|
||||
_sliceLocator.progress();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Cell_ExtensionSlices::Locator::Locator ( const Locator& locator )
|
||||
: Hurricane::Locator<ExtensionSlice*>()
|
||||
, _cell(locator._cell)
|
||||
, _mask(locator._mask)
|
||||
, _sliceLocator(locator._sliceLocator)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionSlices::Locator& Cell_ExtensionSlices::Locator::operator= ( const Locator& locator )
|
||||
{
|
||||
_cell = locator._cell;
|
||||
_mask = locator._mask;
|
||||
_sliceLocator = locator._sliceLocator;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
ExtensionSlice* Cell_ExtensionSlices::Locator::getElement () const
|
||||
{
|
||||
return _sliceLocator.getElement();
|
||||
}
|
||||
|
||||
|
||||
Locator<ExtensionSlice*>* Cell_ExtensionSlices::Locator::getClone () const
|
||||
{
|
||||
return new Locator(*this);
|
||||
}
|
||||
|
||||
|
||||
bool Cell_ExtensionSlices::Locator::isValid () const
|
||||
{
|
||||
return _sliceLocator.isValid();
|
||||
}
|
||||
|
||||
|
||||
void Cell_ExtensionSlices::Locator::progress ()
|
||||
{
|
||||
if (_sliceLocator.isValid()) {
|
||||
do {
|
||||
_sliceLocator.progress();
|
||||
}
|
||||
while (_sliceLocator.isValid() && !(_sliceLocator.getElement()->getMask() & _mask));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
string Cell_ExtensionSlices::Locator::_getString () const
|
||||
{
|
||||
string s = "<" + _TName("Cell::ExtensionSlices::Locator");
|
||||
if (_cell) {
|
||||
s += " " + getString(_cell);
|
||||
//s += " " + getString(_mask);
|
||||
}
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::Cell::Cell_ExtensionGos".
|
||||
|
||||
|
||||
class Cell_ExtensionGos : public Collection<Go*> {
|
||||
|
||||
public:
|
||||
class Locator : public Hurricane::Locator<Go*> {
|
||||
|
||||
public:
|
||||
Locator ();
|
||||
Locator ( const Cell* , ExtensionSlice::Mask mask=~0 );
|
||||
Locator ( const Locator& );
|
||||
Locator& operator= ( const Locator& );
|
||||
virtual Go* getElement () const;
|
||||
virtual Hurricane::Locator<Go*>* getClone () const;
|
||||
virtual bool isValid () const;
|
||||
virtual void progress ();
|
||||
virtual string _getString () const;
|
||||
private:
|
||||
const Cell* _cell;
|
||||
ExtensionSlice::Mask _mask;
|
||||
ExtensionSliceLocator _sliceLocator;
|
||||
GoLocator _goLocator;
|
||||
Go* _go;
|
||||
};
|
||||
|
||||
public:
|
||||
Cell_ExtensionGos ();
|
||||
Cell_ExtensionGos ( const Cell* , ExtensionSlice::Mask mask=~0 );
|
||||
Cell_ExtensionGos ( const Cell_ExtensionGos& );
|
||||
Cell_ExtensionGos& operator= ( const Cell_ExtensionGos& );
|
||||
virtual Collection<Go*>* getClone () const;
|
||||
virtual Hurricane::Locator<Go*>* getLocator () const;
|
||||
virtual string _getString () const;
|
||||
private:
|
||||
const Cell* _cell;
|
||||
ExtensionSlice::Mask _mask;
|
||||
};
|
||||
|
||||
|
||||
Cell_ExtensionGos::Cell_ExtensionGos ()
|
||||
: Collection<Go*>()
|
||||
, _cell(NULL)
|
||||
, _mask(0)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGos::Cell_ExtensionGos ( const Cell* cell
|
||||
, ExtensionSlice::Mask mask
|
||||
)
|
||||
: Collection<Go*>()
|
||||
, _cell(cell)
|
||||
, _mask(mask)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGos::Cell_ExtensionGos ( const Cell_ExtensionGos& gos )
|
||||
: Collection<Go*>()
|
||||
, _cell(gos._cell)
|
||||
, _mask(gos._mask)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGos& Cell_ExtensionGos::operator= ( const Cell_ExtensionGos& gos )
|
||||
{
|
||||
_cell = gos._cell;
|
||||
_mask = gos._mask;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Collection<Go*>* Cell_ExtensionGos::getClone () const
|
||||
{
|
||||
return new Cell_ExtensionGos(*this);
|
||||
}
|
||||
|
||||
|
||||
Locator<Go*>* Cell_ExtensionGos::getLocator () const
|
||||
{
|
||||
return new Locator(_cell,_mask);
|
||||
}
|
||||
|
||||
|
||||
string Cell_ExtensionGos::_getString () const
|
||||
{
|
||||
string s = "<" + _TName("Cell::ExtensionGos");
|
||||
if (_cell) {
|
||||
s += " " + getString(_cell);
|
||||
//s += " " + getString(_mask);
|
||||
}
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Cell_ExtensionGos::Locator::Locator()
|
||||
: Hurricane::Locator<Go*>()
|
||||
, _cell(NULL)
|
||||
, _mask(0)
|
||||
, _sliceLocator()
|
||||
, _goLocator()
|
||||
, _go(NULL)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGos::Locator::Locator ( const Cell* cell
|
||||
, ExtensionSlice::Mask mask
|
||||
)
|
||||
: Hurricane::Locator<Go*>()
|
||||
, _cell(cell)
|
||||
, _mask(mask)
|
||||
, _sliceLocator()
|
||||
, _goLocator()
|
||||
, _go(NULL)
|
||||
{
|
||||
if (_cell) {
|
||||
_sliceLocator = _cell->getExtensionSlices(_mask).getLocator();
|
||||
while (!_go && _sliceLocator.isValid()) {
|
||||
ExtensionSlice* slice = _sliceLocator.getElement();
|
||||
if (slice) {
|
||||
_goLocator = slice->getGos().getLocator();
|
||||
if (_goLocator.isValid())
|
||||
_go = _goLocator.getElement();
|
||||
}
|
||||
if (!_go) _sliceLocator.progress();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Cell_ExtensionGos::Locator::Locator ( const Locator& locator )
|
||||
: Hurricane::Locator<Go*>()
|
||||
, _cell(locator._cell)
|
||||
, _mask(locator._mask)
|
||||
, _sliceLocator(locator._sliceLocator)
|
||||
, _goLocator(locator._goLocator)
|
||||
, _go(locator._go)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGos::Locator& Cell_ExtensionGos::Locator::operator= ( const Locator& locator )
|
||||
{
|
||||
_cell = locator._cell;
|
||||
_mask = locator._mask;
|
||||
_sliceLocator = locator._sliceLocator;
|
||||
_goLocator = locator._goLocator;
|
||||
_go = locator._go;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Go* Cell_ExtensionGos::Locator::getElement () const
|
||||
{
|
||||
return _go;
|
||||
}
|
||||
|
||||
|
||||
Locator<Go*>* Cell_ExtensionGos::Locator::getClone () const
|
||||
{
|
||||
return new Locator(*this);
|
||||
}
|
||||
|
||||
|
||||
bool Cell_ExtensionGos::Locator::isValid () const
|
||||
{
|
||||
return (_go != NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Cell_ExtensionGos::Locator::progress()
|
||||
{
|
||||
if (_go) {
|
||||
_go = NULL;
|
||||
_goLocator.progress();
|
||||
if (_goLocator.isValid())
|
||||
_go = _goLocator.getElement();
|
||||
else {
|
||||
do {
|
||||
_sliceLocator.progress();
|
||||
ExtensionSlice* slice = _sliceLocator.getElement();
|
||||
if (slice) {
|
||||
_goLocator = slice->getGos().getLocator();
|
||||
if (_goLocator.isValid())
|
||||
_go = _goLocator.getElement();
|
||||
}
|
||||
} while (!_go && _sliceLocator.isValid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
string Cell_ExtensionGos::Locator::_getString () const
|
||||
{
|
||||
string s = "<" + _TName("Cell::ExtensionGos::Locator");
|
||||
if (_cell) {
|
||||
s += " " + getString(_cell);
|
||||
//s += " " + getString(_mask);
|
||||
}
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::Cell::Cell_ExtensionGosUnder".
|
||||
|
||||
|
||||
class Cell_ExtensionGosUnder : public Collection<Go*> {
|
||||
|
||||
public:
|
||||
class Locator : public Hurricane::Locator<Go*> {
|
||||
|
||||
public:
|
||||
Locator ();
|
||||
Locator ( const Cell* , const Box& , ExtensionSlice::Mask mask=~0 );
|
||||
Locator ( const Locator& );
|
||||
Locator& operator= ( const Locator& );
|
||||
virtual Go* getElement () const;
|
||||
virtual Hurricane::Locator<Go*>* getClone () const;
|
||||
virtual bool isValid () const;
|
||||
virtual void progress ();
|
||||
virtual string _getString () const;
|
||||
private:
|
||||
const Cell* _cell;
|
||||
Box _area;
|
||||
ExtensionSlice::Mask _mask;
|
||||
ExtensionSliceLocator _sliceLocator;
|
||||
GoLocator _goLocator;
|
||||
Go* _go;
|
||||
};
|
||||
|
||||
public:
|
||||
Cell_ExtensionGosUnder ();
|
||||
Cell_ExtensionGosUnder ( const Cell* , const Box& , ExtensionSlice::Mask mask=~0 );
|
||||
Cell_ExtensionGosUnder ( const Cell_ExtensionGosUnder& );
|
||||
Cell_ExtensionGosUnder& operator= ( const Cell_ExtensionGosUnder& );
|
||||
virtual Collection<Go*>* getClone () const;
|
||||
virtual Hurricane::Locator<Go*>* getLocator () const;
|
||||
virtual string _getString () const;
|
||||
private:
|
||||
const Cell* _cell;
|
||||
Box _area;
|
||||
ExtensionSlice::Mask _mask;
|
||||
};
|
||||
|
||||
|
||||
Cell_ExtensionGosUnder::Cell_ExtensionGosUnder ()
|
||||
: Collection<Go*>()
|
||||
, _cell(NULL)
|
||||
, _area()
|
||||
, _mask(0)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGosUnder::Cell_ExtensionGosUnder ( const Cell* cell
|
||||
, const Box& area
|
||||
, ExtensionSlice::Mask mask
|
||||
)
|
||||
: Collection<Go*>()
|
||||
, _cell(cell)
|
||||
, _area(area)
|
||||
, _mask(mask)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGosUnder::Cell_ExtensionGosUnder ( const Cell_ExtensionGosUnder& gos )
|
||||
: Collection<Go*>()
|
||||
, _cell(gos._cell)
|
||||
, _area(gos._area)
|
||||
, _mask(gos._mask)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGosUnder& Cell_ExtensionGosUnder::operator= ( const Cell_ExtensionGosUnder& gos )
|
||||
{
|
||||
_cell = gos._cell;
|
||||
_area = gos._area;
|
||||
_mask = gos._mask;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Collection<Go*>* Cell_ExtensionGosUnder::getClone () const
|
||||
{
|
||||
return new Cell_ExtensionGosUnder(*this);
|
||||
}
|
||||
|
||||
|
||||
Locator<Go*>* Cell_ExtensionGosUnder::getLocator () const
|
||||
{
|
||||
return new Locator(_cell,_area,_mask);
|
||||
}
|
||||
|
||||
|
||||
string Cell_ExtensionGosUnder::_getString () const
|
||||
{
|
||||
string s = "<" + _TName("Cell::ExtensionGosUnder");
|
||||
if (_cell) {
|
||||
s += " " + getString(_cell);
|
||||
s += " " + getString(_area);
|
||||
//s += " " + getString(_mask);
|
||||
}
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Cell_ExtensionGosUnder::Locator::Locator()
|
||||
: Hurricane::Locator<Go*>()
|
||||
, _cell(NULL)
|
||||
, _area()
|
||||
, _mask(0)
|
||||
, _sliceLocator()
|
||||
, _goLocator()
|
||||
, _go(NULL)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGosUnder::Locator::Locator ( const Cell* cell
|
||||
, const Box& area
|
||||
, ExtensionSlice::Mask mask
|
||||
)
|
||||
: Hurricane::Locator<Go*>()
|
||||
, _cell(cell)
|
||||
, _area(area)
|
||||
, _mask(mask)
|
||||
, _sliceLocator()
|
||||
, _goLocator()
|
||||
, _go(NULL)
|
||||
{
|
||||
if (_cell && !_area.isEmpty()) {
|
||||
_sliceLocator = _cell->getExtensionSlices(_mask).getLocator();
|
||||
while (!_go && _sliceLocator.isValid()) {
|
||||
ExtensionSlice* slice = _sliceLocator.getElement();
|
||||
if (slice) {
|
||||
_goLocator = slice->getGosUnder(_area).getLocator();
|
||||
if (_goLocator.isValid())
|
||||
_go = _goLocator.getElement();
|
||||
}
|
||||
if (!_go) _sliceLocator.progress();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Cell_ExtensionGosUnder::Locator::Locator ( const Locator& locator )
|
||||
: Hurricane::Locator<Go*>()
|
||||
, _cell(locator._cell)
|
||||
, _area(locator._area)
|
||||
, _mask(locator._mask)
|
||||
, _sliceLocator(locator._sliceLocator)
|
||||
, _goLocator(locator._goLocator)
|
||||
, _go(locator._go)
|
||||
{ }
|
||||
|
||||
|
||||
Cell_ExtensionGosUnder::Locator& Cell_ExtensionGosUnder::Locator::operator= ( const Locator& locator )
|
||||
{
|
||||
_cell = locator._cell;
|
||||
_area = locator._area;
|
||||
_mask = locator._mask;
|
||||
_sliceLocator = locator._sliceLocator;
|
||||
_goLocator = locator._goLocator;
|
||||
_go = locator._go;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
Go* Cell_ExtensionGosUnder::Locator::getElement () const
|
||||
{
|
||||
return _go;
|
||||
}
|
||||
|
||||
|
||||
Locator<Go*>* Cell_ExtensionGosUnder::Locator::getClone () const
|
||||
{
|
||||
return new Locator(*this);
|
||||
}
|
||||
|
||||
|
||||
bool Cell_ExtensionGosUnder::Locator::isValid () const
|
||||
{
|
||||
return (_go != NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Cell_ExtensionGosUnder::Locator::progress()
|
||||
{
|
||||
if (_go) {
|
||||
_go = NULL;
|
||||
_goLocator.progress();
|
||||
if (_goLocator.isValid())
|
||||
_go = _goLocator.getElement();
|
||||
else {
|
||||
do {
|
||||
_sliceLocator.progress();
|
||||
ExtensionSlice* slice = _sliceLocator.getElement();
|
||||
if (slice) {
|
||||
_goLocator = slice->getGosUnder(_area).getLocator();
|
||||
if (_goLocator.isValid())
|
||||
_go = _goLocator.getElement();
|
||||
}
|
||||
} while (!_go && _sliceLocator.isValid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
string Cell_ExtensionGosUnder::Locator::_getString () const
|
||||
{
|
||||
string s = "<" + _TName("Cell::ExtensionGosUnder::Locator");
|
||||
if (_cell) {
|
||||
s += " " + getString(_cell);
|
||||
s += " " + getString(_area);
|
||||
//s += " " + getString(_mask);
|
||||
}
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// Cell_Occurrences implementation
|
||||
|
@ -1249,6 +1847,12 @@ Slices Cell::getSlices(const Layer::Mask& mask) const
|
|||
return Cell_Slices(this, mask);
|
||||
}
|
||||
|
||||
ExtensionSlices Cell::getExtensionSlices(ExtensionSlice::Mask mask) const
|
||||
// *************************************************************
|
||||
{
|
||||
return Cell_ExtensionSlices(this,mask);
|
||||
}
|
||||
|
||||
//MainViews Cell::getMainViews() const
|
||||
//// *********************************
|
||||
//{
|
||||
|
@ -1362,11 +1966,35 @@ Pathes Cell::getRecursiveSlavePathes() const
|
|||
}
|
||||
|
||||
Occurrences Cell::getHyperNetRootNetOccurrences() const
|
||||
// *********************************
|
||||
// ****************************************************
|
||||
{
|
||||
return Cell_HyperNetRootNetOccurrences(this,Path());
|
||||
}
|
||||
|
||||
Gos Cell::getExtensionGos ( const Name& name ) const
|
||||
// **********************************************************
|
||||
{
|
||||
return Cell_ExtensionGos(this,getExtensionSliceMask(name));
|
||||
}
|
||||
|
||||
Gos Cell::getExtensionGos ( ExtensionSlice::Mask mask ) const
|
||||
// ****************************************************************
|
||||
{
|
||||
return Cell_ExtensionGos(this,mask);
|
||||
}
|
||||
|
||||
Gos Cell::getExtensionGosUnder ( const Box& area, const Name& name ) const
|
||||
// ********************************************************************************
|
||||
{
|
||||
return Cell_ExtensionGosUnder(this,area,getExtensionSliceMask(name));
|
||||
}
|
||||
|
||||
Gos Cell::getExtensionGosUnder ( const Box& area, ExtensionSlice::Mask mask ) const
|
||||
// **************************************************************************************
|
||||
{
|
||||
return Cell_ExtensionGosUnder(this,area,mask);
|
||||
}
|
||||
|
||||
// ****************************************************************************************************
|
||||
// Cell_Slices implementation
|
||||
// ****************************************************************************************************
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Hurricane Software.
|
||||
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Author : Jean-Paul Chaput |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Module : "./ExtensionGo.cpp" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/Warning.h"
|
||||
#include "hurricane/Cell.h"
|
||||
#include "hurricane/ExtensionGo.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::ExtensionGo".
|
||||
|
||||
|
||||
ExtensionGo::ExtensionGo ( Cell* cell )
|
||||
: Go()
|
||||
, _cell(cell)
|
||||
{ }
|
||||
|
||||
|
||||
void ExtensionGo::materialize ()
|
||||
{
|
||||
if ( !isMaterialized() ) {
|
||||
if ( _cell ) {
|
||||
ExtensionSlice* slice = _cell->getExtensionSlice ( getName() );
|
||||
if ( !slice ) slice = ExtensionSlice::_create ( _cell, getName() );
|
||||
QuadTree* quadTree = slice->_getQuadTree ();
|
||||
quadTree->insert ( this );
|
||||
_cell->_fit ( quadTree->getBoundingBox() );
|
||||
} else {
|
||||
cerr << Warning("%s not inserted into QuadTree.",getString(this).c_str()) << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ExtensionGo::unmaterialize ()
|
||||
{
|
||||
if ( isMaterialized() ) {
|
||||
ExtensionSlice* slice = _cell->getExtensionSlice ( getName() );
|
||||
if ( slice ) {
|
||||
_cell->_unfit ( getBoundingBox() );
|
||||
slice->_getQuadTree()->remove ( this );
|
||||
if ( slice->isEmpty() ) slice->_destroy ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Cell* ExtensionGo::getCell () const
|
||||
{
|
||||
return _cell;
|
||||
}
|
||||
|
||||
|
||||
string ExtensionGo::_getTypeName () const
|
||||
{
|
||||
return "ExtensionGo";
|
||||
}
|
||||
|
||||
|
||||
string ExtensionGo::_getString () const
|
||||
{
|
||||
string s = Go::_getString();
|
||||
s.insert ( s.length() - 1, " " + getString(getName()) );
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Record* ExtensionGo::_getRecord () const
|
||||
{
|
||||
return Go::_getRecord();
|
||||
}
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
|
@ -0,0 +1,122 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Hurricane Software.
|
||||
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Author : Jean-Paul Chaput |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Module : "./ExtensionSlice.cpp" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/Cell.h"
|
||||
#include "hurricane/ExtensionSlice.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::ExtensionSlice".
|
||||
|
||||
|
||||
unsigned int ExtensionSlice::_masks = 0;
|
||||
|
||||
|
||||
ExtensionSlice::ExtensionSlice ( Cell* cell, const Name& name, ExtensionSlice::Mask mask )
|
||||
: _cell(cell)
|
||||
, _name(name)
|
||||
, _mask(mask)
|
||||
, _quadTree()
|
||||
{
|
||||
_cell->_insertSlice ( this );
|
||||
}
|
||||
|
||||
|
||||
ExtensionSlice::~ExtensionSlice ()
|
||||
{
|
||||
_cell->_removeSlice ( this );
|
||||
}
|
||||
|
||||
|
||||
ExtensionSlice* ExtensionSlice::_create ( Cell* cell, const Name& name )
|
||||
{
|
||||
if ( !cell )
|
||||
throw Error ( "ExtensionSlice::_create(): Cannot create, NULL cell argument." );
|
||||
|
||||
if ( name.isEmpty() )
|
||||
throw Error ( "ExtensionSlice::_create():\n"
|
||||
" In %s, cannot create, empty name argument."
|
||||
, getString(cell->getName()).c_str()
|
||||
);
|
||||
|
||||
if ( cell->getExtensionSlice(name) )
|
||||
throw Error ( "ExtensionSlice::_create():\n"
|
||||
" In %s, cannot create, %s already exists."
|
||||
, getString(cell->getName()).c_str()
|
||||
, getString(name).c_str()
|
||||
);
|
||||
|
||||
if ( _masks >= sizeof(unsigned long long) )
|
||||
throw Error ( "ExtensionSlice::_create():\n"
|
||||
" In %s, cannot create %s, no more free masks."
|
||||
, getString(cell->getName()).c_str()
|
||||
, getString(name).c_str()
|
||||
);
|
||||
|
||||
ExtensionSlice* slice = new ExtensionSlice(cell,name,(1<<++_masks));
|
||||
|
||||
return slice;
|
||||
}
|
||||
|
||||
|
||||
void ExtensionSlice::_destroy ()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
|
||||
string ExtensionSlice::_getTypeName () const
|
||||
{
|
||||
return _TName("ExtensionSlice");
|
||||
}
|
||||
|
||||
|
||||
string ExtensionSlice::_getString () const
|
||||
{
|
||||
string s = "<" + _getTypeName();
|
||||
s += " " + getString(_name);
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
Record* ExtensionSlice::_getRecord () const
|
||||
{
|
||||
Record* record = new Record(getString(this));
|
||||
if (record) {
|
||||
record->add(getSlot("Cell" , _cell ));
|
||||
record->add(getSlot("Name" , _name ));
|
||||
record->add(getSlot("Mask" , _mask ));
|
||||
record->add(getSlot("QuadTree",&_quadTree));
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
|
@ -105,11 +105,13 @@ namespace Hurricane {
|
|||
, const Box& area
|
||||
, const Transformation& transformation
|
||||
, const BasicLayer* basicLayer
|
||||
, ExtensionSlice::Mask mask
|
||||
, unsigned int filter
|
||||
)
|
||||
{
|
||||
_basicLayer = basicLayer;
|
||||
_filter = filter;
|
||||
_basicLayer = basicLayer;
|
||||
_filter = filter;
|
||||
_extensionMask = mask;
|
||||
|
||||
_stack.setTopCell ( cell );
|
||||
_stack.setTopArea ( area );
|
||||
|
@ -144,6 +146,18 @@ namespace Hurricane {
|
|||
}
|
||||
}
|
||||
|
||||
if ( hasExtensionGoCallback() && (_filter & DoExtensionGos) ) {
|
||||
if ( !getMasterCell()->isTerminal() || (_filter & DoTerminalCells) ) {
|
||||
forEach ( ExtensionSlice*, islice, getMasterCell()->getExtensionSlices() ) {
|
||||
if ( !( (*islice)->getMask() & _extensionMask ) ) continue;
|
||||
if ( !(*islice)->getBoundingBox().intersect(getArea()) ) continue;
|
||||
|
||||
forEach ( Go*, igo, (*islice)->getGosUnder(_stack.getArea()) )
|
||||
extensionGoCallback ( *igo );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( (_filter & DoMasterCells) && hasMasterCellCallback() )
|
||||
masterCellCallback ();
|
||||
|
||||
|
@ -158,6 +172,12 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
bool Query::hasExtensionGoCallback () const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Query::hasMasterCellCallback () const
|
||||
{
|
||||
return false;
|
||||
|
|
|
@ -1,294 +0,0 @@
|
|||
// ****************************************************************************************************
|
||||
//
|
||||
// This file is part of the Tsunami Project.
|
||||
// Copyright (c) 2001-2004 Laboratoire LIP6 - Departement ASIM
|
||||
// Universite Pierre et Marie Curie.
|
||||
//
|
||||
// File: UserGo.cpp
|
||||
// Authors: C. Alexandre
|
||||
// ****************************************************************************************************
|
||||
|
||||
#include "hurricane/Cell.h"
|
||||
#include "hurricane/UserGo.h"
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// UserGo_CellUserGos implementation
|
||||
// ****************************************************************************************************
|
||||
|
||||
class UserGo_CellUserGos : public Collection<UserGo*> {
|
||||
// **************************************************
|
||||
|
||||
// Types
|
||||
// *****
|
||||
|
||||
public: typedef Collection<UserGo*> Inherit;
|
||||
|
||||
public: class Locator : public Hurricane::Locator<UserGo*> {
|
||||
// *******************************************************
|
||||
|
||||
public: typedef Hurricane::Locator<UserGo*> Inherit;
|
||||
|
||||
private: const Cell* _cell;
|
||||
private: DisplaySlotLocator _displaySlotLocator;
|
||||
private: UserGoLocator _userGoLocator;
|
||||
|
||||
public: Locator();
|
||||
public: Locator(const Cell* cell);
|
||||
public: Locator(const Locator& locator);
|
||||
|
||||
public: Locator& operator=(const Locator& locator);
|
||||
|
||||
public: virtual UserGo* getElement() const;
|
||||
public: virtual Hurricane::Locator<UserGo*>* getClone() const;
|
||||
|
||||
public: virtual bool isValid() const;
|
||||
|
||||
public: virtual void progress();
|
||||
|
||||
public: virtual string _getString() const;
|
||||
|
||||
};
|
||||
|
||||
// Attributes
|
||||
// **********
|
||||
|
||||
private: const Cell* _cell;
|
||||
|
||||
// Constructors
|
||||
// ************
|
||||
|
||||
public: UserGo_CellUserGos();
|
||||
public: UserGo_CellUserGos(const Cell* cell);
|
||||
public: UserGo_CellUserGos(const UserGo_CellUserGos& cellusergos);
|
||||
|
||||
// Operators
|
||||
// *********
|
||||
|
||||
public: UserGo_CellUserGos& operator=(const UserGo_CellUserGos& usergos);
|
||||
|
||||
// Accessors
|
||||
// *********
|
||||
|
||||
public: virtual Collection<UserGo*>* getClone() const;
|
||||
public: virtual Hurricane::Locator<UserGo*>* getLocator() const;
|
||||
|
||||
// Others
|
||||
// ******
|
||||
|
||||
public: virtual string _getString() const;
|
||||
|
||||
};
|
||||
|
||||
// ****************************************************************************************************
|
||||
// UserGo implementation
|
||||
// ****************************************************************************************************
|
||||
|
||||
UserGo::UserGo(DisplaySlot* displaySlot)
|
||||
// *************************************
|
||||
: Inherit()
|
||||
, _displaySlot(displaySlot)
|
||||
{
|
||||
if (!_displaySlot)
|
||||
throw Error("Can't Create " + _TName("UserGo") + " null displaySlot");
|
||||
}
|
||||
|
||||
void UserGo::materialize()
|
||||
// ***********************
|
||||
{
|
||||
if (!isMaterialized()) {
|
||||
QuadTree& quadTree = _displaySlot->_getQuadTree();
|
||||
quadTree.insert(this);
|
||||
getCell()->_fit(quadTree.getBoundingBox());
|
||||
}
|
||||
}
|
||||
|
||||
void UserGo::unmaterialize()
|
||||
// *************************
|
||||
{
|
||||
if (isMaterialized()) {
|
||||
QuadTree& quadTree = _displaySlot->_getQuadTree();
|
||||
getCell()->_unfit(getBoundingBox());
|
||||
quadTree.remove(this);
|
||||
}
|
||||
}
|
||||
|
||||
string UserGo::_getString() const
|
||||
// ******************************
|
||||
{
|
||||
string s = Inherit::_getString();
|
||||
s.insert(s.length() - 1, " " + getString(_displaySlot->getName()));
|
||||
return s;
|
||||
}
|
||||
|
||||
Record* UserGo::_getRecord() const
|
||||
// *************************
|
||||
{
|
||||
Record* record = Inherit::_getRecord();
|
||||
if (record) {
|
||||
record->add(getSlot("DisplaySlot", _displaySlot));
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
||||
UserGos getUserGos(const Cell* cell)
|
||||
// *********************************
|
||||
{
|
||||
if (!cell)
|
||||
throw Error("Null pointer on cell while getting usergos");
|
||||
return UserGo_CellUserGos(cell);
|
||||
}
|
||||
|
||||
// ****************************************************************************************************
|
||||
// UserGo_CellUserGos implementation
|
||||
// ****************************************************************************************************
|
||||
|
||||
UserGo_CellUserGos::UserGo_CellUserGos()
|
||||
// *************************************
|
||||
: Inherit(),
|
||||
_cell(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
UserGo_CellUserGos::UserGo_CellUserGos(const Cell* cell)
|
||||
// *****************************************************
|
||||
: Inherit(),
|
||||
_cell(cell)
|
||||
{
|
||||
}
|
||||
|
||||
UserGo_CellUserGos::UserGo_CellUserGos(const UserGo_CellUserGos& usergos)
|
||||
// **********************************************************************
|
||||
: Inherit(),
|
||||
_cell(usergos._cell)
|
||||
{
|
||||
}
|
||||
|
||||
UserGo_CellUserGos& UserGo_CellUserGos::operator=(const UserGo_CellUserGos& usergos)
|
||||
// *********************************************************************************
|
||||
{
|
||||
_cell = usergos._cell;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Collection<UserGo*>* UserGo_CellUserGos::getClone() const
|
||||
// ******************************************************
|
||||
{
|
||||
return new UserGo_CellUserGos(*this);
|
||||
}
|
||||
|
||||
Locator<UserGo*>* UserGo_CellUserGos::getLocator() const
|
||||
// *****************************************************
|
||||
{
|
||||
return new Locator(_cell);
|
||||
}
|
||||
|
||||
string UserGo_CellUserGos::_getString() const
|
||||
// ******************************************
|
||||
{
|
||||
string s = "<" + _TName("Cell::UserGos");
|
||||
if (_cell) {
|
||||
s += " " + getString(_cell);
|
||||
}
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// UserGo_CellUserGos::Locator implementation
|
||||
// ****************************************************************************************************
|
||||
|
||||
UserGo_CellUserGos::Locator::Locator()
|
||||
// ****************************
|
||||
: Inherit(),
|
||||
_cell(NULL),
|
||||
_displaySlotLocator(),
|
||||
_userGoLocator()
|
||||
{
|
||||
}
|
||||
|
||||
UserGo_CellUserGos::Locator::Locator(const Cell* cell)
|
||||
// ***************************************************
|
||||
: Inherit(),
|
||||
_cell(cell),
|
||||
_displaySlotLocator(),
|
||||
_userGoLocator()
|
||||
{
|
||||
if (_cell) {
|
||||
_displaySlotLocator = getDisplaySlots(cell).getLocator();
|
||||
if (_displaySlotLocator.isValid())
|
||||
{
|
||||
DisplaySlot* displaySlot = _displaySlotLocator.getElement();
|
||||
_userGoLocator = displaySlot->getUserGos().getLocator();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UserGo_CellUserGos::Locator::Locator(const Locator& locator)
|
||||
// **************************************************
|
||||
: Inherit(),
|
||||
_cell(locator._cell),
|
||||
_displaySlotLocator(locator._displaySlotLocator),
|
||||
_userGoLocator(locator._userGoLocator)
|
||||
{
|
||||
}
|
||||
|
||||
UserGo_CellUserGos::Locator& UserGo_CellUserGos::Locator::operator=(const Locator& locator)
|
||||
// ****************************************************************************************
|
||||
{
|
||||
_cell = locator._cell;
|
||||
_displaySlotLocator = locator._displaySlotLocator;
|
||||
_userGoLocator =locator._userGoLocator;
|
||||
return *this;
|
||||
}
|
||||
|
||||
UserGo* UserGo_CellUserGos::Locator::getElement() const
|
||||
// ********************************************
|
||||
{
|
||||
return _userGoLocator.getElement();
|
||||
}
|
||||
|
||||
Locator<UserGo*>* UserGo_CellUserGos::Locator::getClone() const
|
||||
// ************************************************************
|
||||
{
|
||||
return new Locator(*this);
|
||||
}
|
||||
|
||||
bool UserGo_CellUserGos::Locator::isValid() const
|
||||
// ***************************************
|
||||
{
|
||||
return _userGoLocator.isValid();
|
||||
}
|
||||
|
||||
void UserGo_CellUserGos::Locator::progress()
|
||||
// *****************************************
|
||||
{
|
||||
if (_userGoLocator.isValid()) {
|
||||
_userGoLocator.progress();
|
||||
}
|
||||
else if (_displaySlotLocator.isValid()) {
|
||||
_displaySlotLocator.progress();
|
||||
if (_displaySlotLocator.isValid())
|
||||
{
|
||||
DisplaySlot* displaySlot = _displaySlotLocator.getElement();
|
||||
_userGoLocator = displaySlot->getUserGos().getLocator();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string UserGo_CellUserGos::Locator::_getString() const
|
||||
// ********************************************
|
||||
{
|
||||
string s = "<" + _TName("Cell::UserGos::Locator");
|
||||
if (_cell) {
|
||||
s += " " + getString(_cell);
|
||||
}
|
||||
s += ">";
|
||||
return s;
|
||||
}
|
||||
|
||||
} // End of Hurricane namespace.
|
|
@ -15,6 +15,7 @@
|
|||
#include "hurricane/Pin.h"
|
||||
#include "hurricane/Pins.h"
|
||||
#include "hurricane/Slices.h"
|
||||
#include "hurricane/ExtensionSlice.h"
|
||||
#include "hurricane/Rubbers.h"
|
||||
#include "hurricane/Markers.h"
|
||||
#include "hurricane/Marker.h"
|
||||
|
@ -26,6 +27,7 @@
|
|||
#include "hurricane/QuadTree.h"
|
||||
#include "hurricane/IntrusiveMap.h"
|
||||
#include "hurricane/IntrusiveSet.h"
|
||||
#include "hurricane/MapCollection.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
@ -51,6 +53,7 @@ class Cell : public Entity {
|
|||
// *****
|
||||
|
||||
public: typedef Entity Inherit;
|
||||
public: typedef map<Name,ExtensionSlice*> ExtensionSliceMap;
|
||||
|
||||
class InstanceMap : public IntrusiveMap<Name, Instance> {
|
||||
// ****************************************************
|
||||
|
@ -145,6 +148,7 @@ class Cell : public Entity {
|
|||
private: NetMap _netMap;
|
||||
private: PinMap _pinMap;
|
||||
private: SliceMap _sliceMap;
|
||||
private: ExtensionSliceMap _extensionSlices;
|
||||
private: MarkerSet _markerSet;
|
||||
private: Box _abutmentBox;
|
||||
private: Box _boundingBox;
|
||||
|
@ -177,6 +181,7 @@ class Cell : public Entity {
|
|||
public: NetMap& _getNetMap() {return _netMap;};
|
||||
public: PinMap& _getPinMap() {return _pinMap;};
|
||||
public: SliceMap& _getSliceMap() {return _sliceMap;};
|
||||
public: ExtensionSliceMap& _getExtensionSliceMap() {return _extensionSlices;};
|
||||
public: MarkerSet& _getMarkerSet() {return _markerSet;};
|
||||
public: Cell* _getNextOfLibraryCellMap() const {return _nextOfLibraryCellMap;};
|
||||
public: Cell* _getNextOfSymbolCellSet() const {return _nextOfSymbolCellSet;};
|
||||
|
@ -191,6 +196,8 @@ class Cell : public Entity {
|
|||
public: void _removeSlaveEntity(Entity* entity, Entity* slaveEntity);
|
||||
public: void _getSlaveEntities(SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
|
||||
public: void _getSlaveEntities(Entity* entity, SlaveEntityMap::iterator& begin, SlaveEntityMap::iterator& end);
|
||||
public: void _insertSlice ( ExtensionSlice* );
|
||||
public: void _removeSlice ( ExtensionSlice* );
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -239,6 +246,9 @@ class Cell : public Entity {
|
|||
public: Pins getPins() const {return _pinMap.getElements();};
|
||||
public: Slice* getSlice(const Layer* layer) const {return _sliceMap.getElement(layer);};
|
||||
public: Slices getSlices(const Layer::Mask& mask = ~0) const;
|
||||
public: const ExtensionSliceMap& getExtensionSliceMap() const { return _extensionSlices; };
|
||||
public: ExtensionSlice* getExtensionSlice(const Name& name) const;
|
||||
public: ExtensionSlices getExtensionSlices(ExtensionSlice::Mask mask=~0) const;
|
||||
public: Rubbers getRubbers() const;
|
||||
public: Rubbers getRubbersUnder(const Box& area) const;
|
||||
public: Markers getMarkers() const {return _markerSet.getElements();};
|
||||
|
@ -255,6 +265,11 @@ class Cell : public Entity {
|
|||
public: Occurrences getComponentOccurrences(const Layer::Mask& mask = ~0) const;
|
||||
public: Occurrences getComponentOccurrencesUnder(const Box& area, const Layer::Mask& mask = ~0) const;
|
||||
public: Occurrences getHyperNetRootNetOccurrences() const;
|
||||
public: ExtensionSlice::Mask getExtensionSliceMask ( const Name& name ) const;
|
||||
public: Gos getExtensionGos ( const Name& name ) const;
|
||||
public: Gos getExtensionGos ( ExtensionSlice::Mask mask = ~0 ) const;
|
||||
public: Gos getExtensionGosUnder ( const Box& area, const Name& name ) const;
|
||||
public: Gos getExtensionGosUnder ( const Box& area, ExtensionSlice::Mask mask = ~0 ) const;
|
||||
public: Cells getSubCells() const;
|
||||
public: Pathes getRecursiveSlavePathes() const;
|
||||
public: const Box& getAbutmentBox() const {return _abutmentBox;};
|
||||
|
|
|
@ -533,24 +533,24 @@ inline Hurricane::Record* getRecord ( const std::multiset<Element,Compare>* s )
|
|||
|
||||
|
||||
# define IOSTREAM_POINTER_SUPPORT(Data) \
|
||||
inline std::ostream& operator<< ( std::ostream& o, Data* d ) \
|
||||
{ \
|
||||
if (!d) return o << "NULL"; \
|
||||
return o << "&" << getString<Data*>(d); \
|
||||
} \
|
||||
inline std::ostream& operator<< ( std::ostream& o, const Data* d ) \
|
||||
{ \
|
||||
if (!d) return o << "NULL"; \
|
||||
return o << "&" << getString<const Data*>(d); \
|
||||
inline std::ostream& operator<< ( std::ostream& o, Data* d ) \
|
||||
{ \
|
||||
if (!d) return o << "NULL"; \
|
||||
return o << "&" << getString<Data*>(d); \
|
||||
} \
|
||||
inline std::ostream& operator<< ( std::ostream& o, const Data* d ) \
|
||||
{ \
|
||||
if (!d) return o << "NULL"; \
|
||||
return o << "&" << getString<const Data*>(d); \
|
||||
}
|
||||
|
||||
|
||||
# define GETRECORD_POINTER_SUPPORT(Data) \
|
||||
template<> inline Hurricane::Record* getRecord<Data*>( Data* data ) \
|
||||
{ if (!data) return NULL; return data->_getRecord(); } \
|
||||
\
|
||||
template<> inline Hurricane::Record* getRecord<const Data*>( const Data* data ) \
|
||||
{ if (!data) return NULL; return data->_getRecord(); } \
|
||||
template<> inline Hurricane::Record* getRecord<Data*>( Data* data ) \
|
||||
{ if (!data) return NULL; return data->_getRecord(); } \
|
||||
\
|
||||
template<> inline Hurricane::Record* getRecord<const Data*>( const Data* data ) \
|
||||
{ if (!data) return NULL; return data->_getRecord(); }
|
||||
|
||||
|
||||
# define GETSTRING_REFERENCE_SUPPORT(Data) \
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Hurricane Software.
|
||||
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Author : Jean-Paul Chaput |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Header : "./ExtensionGo.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
#ifndef __HURRICANE_EXTENSION_GO__
|
||||
#define __HURRICANE_EXTENSION_GO__
|
||||
|
||||
#include "hurricane/Name.h"
|
||||
#include "hurricane/Go.h"
|
||||
#include "hurricane/ExtensionGos.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
class ExtensionGo : public Go {
|
||||
|
||||
public:
|
||||
// Methods.
|
||||
virtual void materialize ();
|
||||
virtual void unmaterialize ();
|
||||
virtual const Name& getName () const = 0;
|
||||
virtual Cell* getCell () const;
|
||||
// Hurricane Managment.
|
||||
virtual string _getTypeName () const;
|
||||
virtual string _getString () const;
|
||||
virtual Record* _getRecord () const;
|
||||
|
||||
protected:
|
||||
// Internal: Attributes.
|
||||
Cell* _cell;
|
||||
|
||||
protected:
|
||||
// Internal: Constructor.
|
||||
ExtensionGo ( Cell* );
|
||||
};
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
#endif // __HURRICANE_EXTENSION_GO__
|
||||
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Hurricane Software.
|
||||
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Author : Jean-Paul Chaput |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Header : "./ExtensionGos.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
#ifndef __HURRICANE_EXTENSION_GOS__
|
||||
#define __HURRICANE_EXTENSION_GOS__
|
||||
|
||||
|
||||
#include "hurricane/Collection.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
class ExtensionGo;
|
||||
|
||||
|
||||
typedef GenericCollection<ExtensionGo*> ExtensionGos;
|
||||
typedef GenericLocator<ExtensionGo*> ExtensionGoLocator;
|
||||
typedef GenericFilter<ExtensionGo*> ExtensionGoFilter;
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
#endif // __HURRICANE_EXTENSION_GOS__
|
|
@ -0,0 +1,94 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Hurricane Software.
|
||||
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Author : Jean-Paul Chaput |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Header : "./ExtensionSlice.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
#ifndef __HURRICANE_EXTENSION_SLICE__
|
||||
#define __HURRICANE_EXTENSION_SLICE__
|
||||
|
||||
#include "hurricane/Name.h"
|
||||
#include "hurricane/ExtensionSlices.h"
|
||||
#include "hurricane/QuadTree.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
class Cell;
|
||||
|
||||
|
||||
class ExtensionSlice {
|
||||
|
||||
public:
|
||||
typedef unsigned long long Mask;
|
||||
public:
|
||||
// Constructor & Destructor.
|
||||
static ExtensionSlice* _create ( Cell* , const Name& );
|
||||
void _destroy ();
|
||||
// Methods.
|
||||
inline bool isEmpty () const;
|
||||
inline Cell* getCell () const;
|
||||
inline const Name& getName () const;
|
||||
inline Mask getMask () const;
|
||||
inline const Box& getBoundingBox () const;
|
||||
inline Gos getGos () const;
|
||||
inline Gos getGosUnder ( const Box& area ) const;
|
||||
inline QuadTree* _getQuadTree ();
|
||||
// Hurricane Managment.
|
||||
string _getTypeName () const;
|
||||
string _getString () const;
|
||||
Record* _getRecord () const;
|
||||
|
||||
private:
|
||||
// Internal: Attributes.
|
||||
static unsigned int _masks;
|
||||
Cell* _cell;
|
||||
Name _name;
|
||||
Mask _mask;
|
||||
QuadTree _quadTree;
|
||||
|
||||
protected:
|
||||
// Internal: Constructors & Destructors.
|
||||
ExtensionSlice ( Cell* , const Name&, Mask );
|
||||
~ExtensionSlice ();
|
||||
private:
|
||||
ExtensionSlice ( const ExtensionSlice& );
|
||||
ExtensionSlice& operator= ( const ExtensionSlice& );
|
||||
};
|
||||
|
||||
|
||||
// Inline Functions.
|
||||
inline bool ExtensionSlice::isEmpty () const { return _quadTree.isEmpty(); }
|
||||
inline Cell* ExtensionSlice::getCell () const { return _cell; }
|
||||
inline const Name& ExtensionSlice::getName () const { return _name; }
|
||||
inline ExtensionSlice::Mask ExtensionSlice::getMask () const { return _mask; }
|
||||
inline const Box& ExtensionSlice::getBoundingBox () const { return _quadTree.getBoundingBox(); }
|
||||
inline Gos ExtensionSlice::getGos () const { return _quadTree.getGos(); }
|
||||
inline Gos ExtensionSlice::getGosUnder ( const Box& area ) const {return _quadTree.getGosUnder(area); }
|
||||
inline QuadTree* ExtensionSlice::_getQuadTree () { return &_quadTree; }
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
# endif // __HURRICANE_EXTENSION_SLICE__
|
|
@ -0,0 +1,47 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Hurricane Software.
|
||||
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Author : Jean-Paul Chaput |
|
||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Header : "./ExtensionSlices.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
#ifndef __HURRICANE_EXTENSION_SLICES__
|
||||
#define __HURRICANE_EXTENSION_SLICES__
|
||||
|
||||
|
||||
#include "hurricane/Collection.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
class ExtensionSlice;
|
||||
|
||||
|
||||
typedef GenericCollection<ExtensionSlice*> ExtensionSlices;
|
||||
typedef GenericLocator<ExtensionSlice*> ExtensionSliceLocator;
|
||||
typedef GenericFilter<ExtensionSlice*> ExtensionSliceFilter;
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
#endif // __HURRICANE_EXTENSION_SLICES__
|
|
@ -45,13 +45,13 @@ template<class Key, class Element, class Compare = less<Key> >
|
|||
if (_elementMap) _iterator = _elementMap->begin();
|
||||
};
|
||||
|
||||
public: virtual Element GetElement() const
|
||||
public: virtual Element getElement() const
|
||||
// ***************************************
|
||||
{
|
||||
return (isValid()) ? (*_iterator).second : Element();
|
||||
};
|
||||
|
||||
public: virtual Hurricane::Locator<Element>* GetClone() const
|
||||
public: virtual Hurricane::Locator<Element>* getClone() const
|
||||
// **********************************************************
|
||||
{
|
||||
return new Locator(_elementMap);
|
||||
|
@ -113,13 +113,13 @@ template<class Key, class Element, class Compare = less<Key> >
|
|||
// Accessors
|
||||
// *********
|
||||
|
||||
public: virtual Collection<Element>* GetClone() const
|
||||
public: virtual Collection<Element>* getClone() const
|
||||
// **************************************************
|
||||
{
|
||||
return new MapCollection(*this);
|
||||
}
|
||||
|
||||
public: virtual Hurricane::Locator<Element>* GetLocator() const
|
||||
public: virtual Hurricane::Locator<Element>* getLocator() const
|
||||
// ************************************************************
|
||||
{
|
||||
// return (_elementMap) ? new Locator<Key, Element, Compare>(_elementMap) : NULL;
|
||||
|
@ -127,7 +127,7 @@ template<class Key, class Element, class Compare = less<Key> >
|
|||
return (_elementMap) ? new Locator(_elementMap) : NULL;
|
||||
}
|
||||
|
||||
public: virtual unsigned GetSize() const
|
||||
public: virtual unsigned getSize() const
|
||||
// *************************************
|
||||
{
|
||||
return (_elementMap) ? _elementMap->size() : 0;
|
||||
|
@ -136,34 +136,34 @@ template<class Key, class Element, class Compare = less<Key> >
|
|||
// Others
|
||||
// ******
|
||||
|
||||
public: virtual string _GetTypeName() const
|
||||
public: virtual string _getTypeName() const
|
||||
// **************************************
|
||||
{
|
||||
return _TName("MapCollection");
|
||||
};
|
||||
|
||||
public: virtual string _GetString() const
|
||||
public: virtual string _getString() const
|
||||
// **************************************
|
||||
{
|
||||
if (!_elementMap)
|
||||
return "<" + _GetTypeName() + " unbound>";
|
||||
return "<" + _getTypeName() + " unbound>";
|
||||
else {
|
||||
if (_elementMap->empty())
|
||||
return "<" + _GetTypeName() + " empty>";
|
||||
return "<" + _getTypeName() + " empty>";
|
||||
else
|
||||
return "<" + _GetTypeName() + " " + GetString(_elementMap->size()) + ">";
|
||||
return "<" + _getTypeName() + " " + getString(_elementMap->size()) + ">";
|
||||
}
|
||||
};
|
||||
|
||||
Record* _GetRecord() const
|
||||
Record* _getRecord() const
|
||||
// ********************
|
||||
{
|
||||
Record* record = NULL;
|
||||
if (!_elementMap->empty()) {
|
||||
record = new Record(_GetString());
|
||||
record = new Record(_getString());
|
||||
typename map<Key, Element, Compare>::const_iterator iterator = _elementMap->begin(); // AD
|
||||
while (iterator != _elementMap->end()) {
|
||||
record->add(getSlot<Element>(GetString((*iterator).first), (*iterator).second));
|
||||
record->add(getSlot<Element>(getString((*iterator).first), (*iterator).second));
|
||||
++iterator;
|
||||
}
|
||||
}
|
||||
|
@ -179,14 +179,14 @@ template<class Key, class Element, class Compare = less<Key> >
|
|||
// ****************************************************************************************************
|
||||
|
||||
template<class Key, class Element, class Compare>
|
||||
inline GenericCollection<Element> GetCollection(const map<Key, Element, Compare>& elementMap)
|
||||
inline GenericCollection<Element> getCollection(const map<Key, Element, Compare>& elementMap)
|
||||
// *********************************************************************************************
|
||||
{
|
||||
return MapCollection<Key, Element, Compare>(elementMap);
|
||||
}
|
||||
|
||||
template<class Key, class Element, class Compare>
|
||||
inline GenericCollection<Element> GetCollection(const map<Key, Element, Compare>* elementMap)
|
||||
inline GenericCollection<Element> getCollection(const map<Key, Element, Compare>* elementMap)
|
||||
// *********************************************************************************************
|
||||
{
|
||||
return MapCollection<Key, Element, Compare>(elementMap);
|
||||
|
|
|
@ -307,48 +307,55 @@ namespace Hurricane {
|
|||
enum QueryFilter { DoMasterCells = 1
|
||||
, DoTerminalCells = 2
|
||||
, DoComponents = 4
|
||||
, DoExtensionGos = 8
|
||||
, DoAll = DoMasterCells
|
||||
| DoTerminalCells
|
||||
| DoComponents
|
||||
| DoExtensionGos
|
||||
};
|
||||
public:
|
||||
// Constructors & Destructors.
|
||||
Query ();
|
||||
virtual ~Query ();
|
||||
Query ();
|
||||
virtual ~Query ();
|
||||
// Accessors.
|
||||
inline unsigned int getStartLevel () const;
|
||||
inline unsigned int getStopLevel () const;
|
||||
inline size_t getDepth () const;
|
||||
inline const Transformation& getTransformation () const;
|
||||
inline const Box& getArea () const;
|
||||
inline const BasicLayer* getBasicLayer () const;
|
||||
inline Cell* getMasterCell ();
|
||||
inline Instance* getInstance ();
|
||||
//inline const Tabulation& getTab () const;
|
||||
virtual bool hasGoCallback () const;
|
||||
virtual bool hasMasterCellCallback () const;
|
||||
virtual void goCallback ( Go* go ) = 0;
|
||||
virtual void masterCellCallback () = 0;
|
||||
inline unsigned int getStartLevel () const;
|
||||
inline unsigned int getStopLevel () const;
|
||||
inline size_t getDepth () const;
|
||||
inline const Transformation& getTransformation () const;
|
||||
inline const Box& getArea () const;
|
||||
inline const BasicLayer* getBasicLayer () const;
|
||||
inline Cell* getMasterCell ();
|
||||
inline Instance* getInstance ();
|
||||
//inline const Tabulation& getTab () const;
|
||||
virtual bool hasGoCallback () const;
|
||||
virtual bool hasExtensionGoCallback () const;
|
||||
virtual bool hasMasterCellCallback () const;
|
||||
virtual void goCallback ( Go* go ) = 0;
|
||||
virtual void extensionGoCallback ( Go* go ) = 0;
|
||||
virtual void masterCellCallback () = 0;
|
||||
// Modifiers.
|
||||
void setQuery ( Cell* cell
|
||||
, const Box& area
|
||||
, const Transformation& transformation
|
||||
, const BasicLayer* basicLayer
|
||||
, unsigned int filter
|
||||
);
|
||||
inline void setCell ( Cell* cell );
|
||||
inline void setArea ( const Box& area );
|
||||
inline void setTransformation ( const Transformation& transformation );
|
||||
inline void setBasicLayer ( const BasicLayer* basicLayer );
|
||||
inline void setFilter ( unsigned int mode );
|
||||
inline void setStartLevel ( unsigned int level );
|
||||
inline void setStopLevel ( unsigned int level );
|
||||
void doQuery ();
|
||||
void setQuery ( Cell* cell
|
||||
, const Box& area
|
||||
, const Transformation& transformation
|
||||
, const BasicLayer* basicLayer
|
||||
, ExtensionSlice::Mask extensionMask
|
||||
, unsigned int filter
|
||||
);
|
||||
inline void setCell ( Cell* cell );
|
||||
inline void setArea ( const Box& area );
|
||||
inline void setTransformation ( const Transformation& transformation );
|
||||
inline void setBasicLayer ( const BasicLayer* basicLayer );
|
||||
inline void setExtensionMask ( ExtensionSlice::Mask mode );
|
||||
inline void setFilter ( unsigned int mode );
|
||||
inline void setStartLevel ( unsigned int level );
|
||||
inline void setStopLevel ( unsigned int level );
|
||||
void doQuery ();
|
||||
|
||||
protected:
|
||||
// Internal: Attributes.
|
||||
QueryStack _stack;
|
||||
const BasicLayer* _basicLayer;
|
||||
ExtensionSlice::Mask _extensionMask;
|
||||
unsigned int _filter;
|
||||
};
|
||||
|
||||
|
@ -360,6 +367,7 @@ namespace Hurricane {
|
|||
inline void Query::setTransformation ( const Transformation& transformation ) { _stack.setTopTransformation(transformation); }
|
||||
inline void Query::setBasicLayer ( const BasicLayer* basicLayer ) { _basicLayer = basicLayer; }
|
||||
inline void Query::setFilter ( unsigned int filter ) { _filter = filter; }
|
||||
inline void Query::setExtensionMask ( ExtensionSlice::Mask mask ) { _extensionMask = mask; }
|
||||
inline void Query::setStartLevel ( unsigned int level ) { _stack.setStartLevel(level); }
|
||||
inline void Query::setStopLevel ( unsigned int level ) { _stack.setStopLevel(level); }
|
||||
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
// ****************************************************************************************************
|
||||
//
|
||||
// This file is part of the Tsunami Project.
|
||||
// Copyright (c) 2001-2004 Laboratoire LIP6 - Departement ASIM
|
||||
// Universite Pierre et Marie Curie.
|
||||
//
|
||||
// File: UserGo.h
|
||||
// Authors: C. Alexandre
|
||||
// ****************************************************************************************************
|
||||
|
||||
#ifndef HURRICANE_USER_GO
|
||||
#define HURRICANE_USER_GO
|
||||
|
||||
#include "hurricane/Go.h"
|
||||
#include "hurricane/UserGos.h"
|
||||
#include "hurricane/DisplaySlot.h"
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
// ****************************************************************************************************
|
||||
// UserGo declaration
|
||||
// ****************************************************************************************************
|
||||
|
||||
class UserGo : public Go {
|
||||
// *********************
|
||||
|
||||
// Types
|
||||
// *****
|
||||
|
||||
public: typedef Go Inherit;
|
||||
|
||||
// Attributes
|
||||
// **********
|
||||
protected: DisplaySlot* _displaySlot;
|
||||
|
||||
// Constructors
|
||||
// ************
|
||||
|
||||
protected: UserGo(DisplaySlot* displaySlot);
|
||||
|
||||
// Updators
|
||||
// ********
|
||||
|
||||
public: virtual void materialize();
|
||||
public: virtual void unmaterialize();
|
||||
|
||||
// Others
|
||||
// ******
|
||||
|
||||
public: virtual string _getTypeName() const {return _TName("UserGo");};
|
||||
public: virtual string _getString() const;
|
||||
public: virtual Record* _getRecord() const;
|
||||
};
|
||||
|
||||
UserGos getUserGos(const Cell* cell);
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
#endif // HURRICANE_USER_GO
|
|
@ -1,61 +0,0 @@
|
|||
// ****************************************************************************************************
|
||||
//
|
||||
// This file is part of the Tsunami Project.
|
||||
// Copyright (c) 2001-2004 Laboratoire LIP6 - Departement ASIM
|
||||
// Universite Pierre et Marie Curie.
|
||||
//
|
||||
// File: UserGos.h
|
||||
// Authors: C. Alexandre
|
||||
// ****************************************************************************************************
|
||||
|
||||
#ifndef HURRICANE_USER_GOS
|
||||
#define HURRICANE_USER_GOS
|
||||
|
||||
#include "hurricane/Collection.h"
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
class UserGo;
|
||||
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// UserGosdeclaration
|
||||
// ****************************************************************************************************
|
||||
|
||||
typedef GenericCollection<UserGo*> UserGos;
|
||||
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// UserGoLocator declaration
|
||||
// ****************************************************************************************************
|
||||
|
||||
typedef GenericLocator<UserGo*> UserGoLocator;
|
||||
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// UserGoFilter declaration
|
||||
// ****************************************************************************************************
|
||||
|
||||
typedef GenericFilter<UserGo*> UserGoFilter;
|
||||
|
||||
|
||||
|
||||
// ****************************************************************************************************
|
||||
// for_each_usergo declaration
|
||||
// ****************************************************************************************************
|
||||
|
||||
#define for_each_user_go(userGo, userGos)\
|
||||
/***************************************/\
|
||||
{\
|
||||
UserGoLocator _locator = userGos.getLocator();\
|
||||
while (_locator.isValid()) {\
|
||||
UserGo* userGo = _locator.getElement();\
|
||||
_locator.progress();
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
#endif // HURRICANE_USER_GOS
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
set ( mocincludes hurricane/viewer/HPaletteEntry.h
|
||||
hurricane/viewer/LayerPaletteEntry.h
|
||||
hurricane/viewer/HExtensionPaletteEntry.h
|
||||
hurricane/viewer/GroupPaletteEntry.h
|
||||
hurricane/viewer/ViewerPaletteEntry.h
|
||||
hurricane/viewer/HPalette.h
|
||||
|
@ -57,6 +58,7 @@
|
|||
HGraphics.cpp
|
||||
HPaletteEntry.cpp
|
||||
LayerPaletteEntry.cpp
|
||||
HExtensionPaletteEntry.cpp
|
||||
GroupPaletteEntry.cpp
|
||||
ViewerPaletteEntry.cpp
|
||||
HPalette.cpp
|
||||
|
|
|
@ -284,10 +284,25 @@ namespace Hurricane {
|
|||
|
||||
CellWidget::DrawingQuery::DrawingQuery ( CellWidget* widget )
|
||||
: Query()
|
||||
,_cellWidget(widget)
|
||||
, _cellWidget(widget)
|
||||
, _drawExtensionGo(NULL)
|
||||
{ }
|
||||
|
||||
|
||||
void CellWidget::DrawingQuery::setDrawExtensionGo ( const Name& name )
|
||||
{
|
||||
map<Name,pair<InitDrawExtension_t*,DrawExtensionGo_t*> >::iterator idraw
|
||||
= _drawExtensionGos.find ( name );
|
||||
|
||||
if ( idraw != _drawExtensionGos.end() ) {
|
||||
_drawExtensionGo = idraw->second.second;
|
||||
if ( idraw->second.first )
|
||||
idraw->second.first ( _cellWidget );
|
||||
} else
|
||||
_drawExtensionGo = NULL;
|
||||
}
|
||||
|
||||
|
||||
bool CellWidget::DrawingQuery::hasMasterCellCallback () const
|
||||
{
|
||||
return true;
|
||||
|
@ -344,6 +359,19 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
bool CellWidget::DrawingQuery::hasExtensionGoCallback () const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void CellWidget::DrawingQuery::extensionGoCallback ( Go* go )
|
||||
{
|
||||
if ( _drawExtensionGo )
|
||||
_drawExtensionGo ( _cellWidget, go, getBasicLayer(), getArea(), getTransformation() );
|
||||
}
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::CellWidget::TextDrawingQuery".
|
||||
|
||||
|
@ -383,6 +411,14 @@ namespace Hurricane {
|
|||
{ }
|
||||
|
||||
|
||||
bool CellWidget::TextDrawingQuery::hasExtensionGoCallback () const
|
||||
{ return false; }
|
||||
|
||||
|
||||
void CellWidget::TextDrawingQuery::extensionGoCallback ( Go* go )
|
||||
{ }
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Class : "Hurricane::CellWidget".
|
||||
|
||||
|
@ -449,7 +485,8 @@ namespace Hurricane {
|
|||
detachFromPalette ();
|
||||
_palette = palette;
|
||||
|
||||
connect ( _palette, SIGNAL(paletteChanged()), this, SLOT(redraw()) );
|
||||
connect ( _palette, SIGNAL(paletteChanged()) , this , SLOT(redraw()) );
|
||||
connect ( this , SIGNAL(cellChanged(Cell*)), _palette, SLOT(updateExtensions(Cell*)));
|
||||
}
|
||||
|
||||
|
||||
|
@ -550,6 +587,7 @@ namespace Hurricane {
|
|||
|
||||
Box redrawBox = displayToDbuBox ( redrawArea );
|
||||
|
||||
_drawingQuery.setExtensionMask ( 0 );
|
||||
_drawingQuery.setArea ( redrawBox );
|
||||
_drawingQuery.setTransformation ( Transformation() );
|
||||
|
||||
|
@ -557,13 +595,13 @@ namespace Hurricane {
|
|||
_drawingPlanes.setPen ( Graphics::getPen ((*iLayer)->getName(),darkening) );
|
||||
_drawingPlanes.setBrush ( Graphics::getBrush((*iLayer)->getName(),darkening) );
|
||||
|
||||
if ( isDrawable((*iLayer)->getName()) ) {
|
||||
if ( isDrawableLayer((*iLayer)->getName()) ) {
|
||||
_drawingQuery.setBasicLayer ( *iLayer );
|
||||
_drawingQuery.setFilter ( _queryFilter & ~Query::DoMasterCells );
|
||||
_drawingQuery.doQuery ();
|
||||
}
|
||||
}
|
||||
if ( isDrawable("boundaries") ) {
|
||||
if ( isDrawableLayer("boundaries") ) {
|
||||
_drawingPlanes.setPen ( Graphics::getPen ("boundaries",darkening) );
|
||||
_drawingPlanes.setBrush ( Graphics::getBrush("boundaries",darkening) );
|
||||
|
||||
|
@ -572,7 +610,7 @@ namespace Hurricane {
|
|||
_drawingQuery.doQuery ();
|
||||
}
|
||||
|
||||
if ( isDrawable("text.instance") ) {
|
||||
if ( isDrawableLayer("text.instance") ) {
|
||||
_drawingPlanes.setPen ( Graphics::getPen ("text.instance",darkening) );
|
||||
_drawingPlanes.setBrush ( Graphics::getBrush("text.instance",darkening) );
|
||||
_drawingPlanes.setBackground ( Graphics::getBrush("boundaries" ,darkening) );
|
||||
|
@ -580,6 +618,16 @@ namespace Hurricane {
|
|||
_textDrawingQuery.setTransformation ( Transformation() );
|
||||
_textDrawingQuery.doQuery ();
|
||||
}
|
||||
|
||||
_drawingQuery.setFilter ( _queryFilter & ~Query::DoMasterCells );
|
||||
|
||||
forEach ( ExtensionSlice*, islice, _cell->getExtensionSlices() ) {
|
||||
if ( isDrawableLayer((*islice)->getName()) ) {
|
||||
_drawingQuery.setExtensionMask ( (*islice)->getMask() );
|
||||
_drawingQuery.setDrawExtensionGo ( (*islice)->getName() );
|
||||
_drawingQuery.doQuery ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_drawingPlanes.painterEnd ();
|
||||
|
@ -615,7 +663,7 @@ namespace Hurricane {
|
|||
Box redrawBox = displayToDbuBox ( redrawArea );
|
||||
|
||||
for_each_basic_layer ( basicLayer, _technology->getBasicLayers() ) {
|
||||
//if ( !isDrawable(basicLayer->getName()) ) continue;
|
||||
//if ( !isDrawableLayer(basicLayer->getName()) ) continue;
|
||||
|
||||
_drawingPlanes.setPen ( Graphics::getPen (basicLayer->getName()) );
|
||||
_drawingPlanes.setBrush ( Graphics::getBrush(basicLayer->getName()) );
|
||||
|
@ -652,7 +700,7 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
bool CellWidget::isDrawable ( const Name& entryName )
|
||||
bool CellWidget::isDrawableLayer ( const Name& entryName )
|
||||
{
|
||||
HPaletteEntry* entry = (_palette) ? _palette->find(entryName) : NULL;
|
||||
|
||||
|
@ -661,6 +709,14 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
bool CellWidget::isDrawableExtension ( const Name& entryName )
|
||||
{
|
||||
HPaletteEntry* entry = (_palette) ? _palette->find(entryName) : NULL;
|
||||
|
||||
return (!entry || entry->isChecked());
|
||||
}
|
||||
|
||||
|
||||
void CellWidget::drawBox ( const Box& box )
|
||||
{
|
||||
_redrawRectCount++;
|
||||
|
@ -975,8 +1031,8 @@ namespace Hurricane {
|
|||
for ( size_t i=0 ; i<_commands.size() ; i++ )
|
||||
_commands[i]->draw ( this );
|
||||
|
||||
if ( isDrawable("grid") ) drawGrid ();
|
||||
if ( isDrawable("spot") ) _spot.moveTo ( _mousePosition );
|
||||
if ( isDrawableLayer("grid") ) drawGrid ();
|
||||
if ( isDrawableLayer("spot") ) _spot.moveTo ( _mousePosition );
|
||||
|
||||
_drawingPlanes.painterEnd ( 2 );
|
||||
}
|
||||
|
@ -1115,6 +1171,8 @@ namespace Hurricane {
|
|||
_drawingQuery.setCell ( cell );
|
||||
_textDrawingQuery.setCell ( cell );
|
||||
|
||||
emit cellChanged ( cell );
|
||||
|
||||
fitToContents ();
|
||||
}
|
||||
|
||||
|
|
|
@ -50,12 +50,12 @@
|
|||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
# include <QPushButton>
|
||||
# include <QHBoxLayout>
|
||||
#include <QPushButton>
|
||||
#include <QHBoxLayout>
|
||||
|
||||
# include "hurricane/viewer/Graphics.h"
|
||||
# include "hurricane/viewer/GroupPaletteEntry.h"
|
||||
# include "hurricane/viewer/HPalette.h"
|
||||
#include "hurricane/viewer/Graphics.h"
|
||||
#include "hurricane/viewer/GroupPaletteEntry.h"
|
||||
#include "hurricane/viewer/HPalette.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
@ -115,6 +115,12 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
bool GroupPaletteEntry::isExtension () const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const Name& GroupPaletteEntry::getName () const
|
||||
{
|
||||
return _name;
|
||||
|
|
|
@ -0,0 +1,119 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Coriolis Software.
|
||||
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Author : Jean-Paul CHAPUT |
|
||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Module : "./HExtensionPaletteEntry.cpp" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
#include <QCheckBox>
|
||||
#include <QHBoxLayout>
|
||||
|
||||
#include "hurricane/viewer/Graphics.h"
|
||||
#include "hurricane/viewer/HExtensionPaletteEntry.h"
|
||||
#include "hurricane/viewer/HPalette.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
HExtensionPaletteEntry::HExtensionPaletteEntry ( HPalette* entry, const Name& name )
|
||||
: HPaletteEntry(entry)
|
||||
, _name(name)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
HExtensionPaletteEntry* HExtensionPaletteEntry::create ( HPalette* palette, const Name& name )
|
||||
{
|
||||
HExtensionPaletteEntry* entry = new HExtensionPaletteEntry ( palette, name );
|
||||
|
||||
entry->_postCreate ();
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
||||
|
||||
void HExtensionPaletteEntry::_postCreate ()
|
||||
{
|
||||
QHBoxLayout* layout = new QHBoxLayout ();
|
||||
layout->setContentsMargins ( 0, 0, 0, 0 );
|
||||
|
||||
_checkBox = new QCheckBox ( this );
|
||||
_checkBox->setChecked ( true );
|
||||
_checkBox->setText ( getString(getName()).c_str() );
|
||||
_checkBox->setFont ( Graphics::getFixedFont() );
|
||||
layout->addWidget ( _checkBox );
|
||||
|
||||
setLayout ( layout );
|
||||
|
||||
connect ( _checkBox, SIGNAL(clicked()), this, SLOT(toggle()) );
|
||||
}
|
||||
|
||||
|
||||
bool HExtensionPaletteEntry::isGroup () const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool HExtensionPaletteEntry::isBasicLayer () const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool HExtensionPaletteEntry::isExtension () const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const Name& HExtensionPaletteEntry::getName () const
|
||||
{
|
||||
return _name;
|
||||
}
|
||||
|
||||
|
||||
BasicLayer* HExtensionPaletteEntry::getBasicLayer ()
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
bool HExtensionPaletteEntry::isChecked () const
|
||||
{
|
||||
return _checkBox->isChecked ();
|
||||
}
|
||||
|
||||
|
||||
void HExtensionPaletteEntry::setChecked ( bool state )
|
||||
{
|
||||
_checkBox->setChecked ( state );
|
||||
}
|
||||
|
||||
|
||||
void HExtensionPaletteEntry::toggle ()
|
||||
{
|
||||
_palette->redrawCellWidget();
|
||||
}
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
|
@ -50,26 +50,28 @@
|
|||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
# include <vector>
|
||||
#include <vector>
|
||||
|
||||
# include <QHBoxLayout>
|
||||
# include <QVBoxLayout>
|
||||
# include <QCheckBox>
|
||||
# include <QPushButton>
|
||||
#include <QHBoxLayout>
|
||||
#include <QVBoxLayout>
|
||||
#include <QCheckBox>
|
||||
#include <QPushButton>
|
||||
|
||||
# include "hurricane/Name.h"
|
||||
# include "hurricane/DataBase.h"
|
||||
# include "hurricane/Technology.h"
|
||||
# include "hurricane/BasicLayer.h"
|
||||
# include "hurricane/BasicLayers.h"
|
||||
#include "hurricane/Name.h"
|
||||
#include "hurricane/DataBase.h"
|
||||
#include "hurricane/Technology.h"
|
||||
#include "hurricane/BasicLayer.h"
|
||||
#include "hurricane/BasicLayers.h"
|
||||
#include "hurricane/ExtensionSlice.h"
|
||||
#include "hurricane/Cell.h"
|
||||
|
||||
# include "hurricane/viewer/Graphics.h"
|
||||
# include "hurricane/viewer/HPaletteEntry.h"
|
||||
# include "hurricane/viewer/LayerPaletteEntry.h"
|
||||
# include "hurricane/viewer/GroupPaletteEntry.h"
|
||||
# include "hurricane/viewer/ViewerPaletteEntry.h"
|
||||
# include "hurricane/viewer/HPalette.h"
|
||||
# include "hurricane/viewer/CellWidget.h"
|
||||
#include "hurricane/viewer/Graphics.h"
|
||||
#include "hurricane/viewer/HPaletteEntry.h"
|
||||
#include "hurricane/viewer/LayerPaletteEntry.h"
|
||||
#include "hurricane/viewer/HExtensionPaletteEntry.h"
|
||||
#include "hurricane/viewer/GroupPaletteEntry.h"
|
||||
#include "hurricane/viewer/ViewerPaletteEntry.h"
|
||||
#include "hurricane/viewer/HPalette.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
@ -77,15 +79,32 @@ namespace Hurricane {
|
|||
|
||||
|
||||
HPalette::HPalette ( QWidget* parent ) : QScrollArea(parent)
|
||||
, _entries()
|
||||
, _showAll(NULL)
|
||||
, _hideAll(NULL)
|
||||
, _entries()
|
||||
, _showAll(NULL)
|
||||
, _hideAll(NULL)
|
||||
{
|
||||
setWidgetResizable ( true );
|
||||
|
||||
QWidget* adaptator = new QWidget ();
|
||||
QVBoxLayout* layout = new QVBoxLayout ();
|
||||
|
||||
_showAll = new QPushButton ( this );
|
||||
_showAll->setIcon ( QIcon(":/images/palette_show_all.png") );
|
||||
_showAll->setFlat ( true );
|
||||
|
||||
_hideAll = new QPushButton ( this );
|
||||
_hideAll->setIcon ( QIcon(":/images/palette_hide_all.png") );
|
||||
_hideAll->setFlat ( true );
|
||||
|
||||
connect ( _showAll, SIGNAL(clicked()), this, SLOT(showAll()) );
|
||||
connect ( _hideAll, SIGNAL(clicked()), this, SLOT(hideAll()) );
|
||||
|
||||
QHBoxLayout* topEntry = new QHBoxLayout ();
|
||||
topEntry->setContentsMargins ( 0, 0, 0, 0 );
|
||||
topEntry->addWidget ( _showAll );
|
||||
topEntry->addWidget ( _hideAll );
|
||||
layout->addLayout ( topEntry );
|
||||
|
||||
//layout->setContentsMargins ( 0, 0, 0, 0 );
|
||||
|
||||
vector<DrawingGroup*> groups = Graphics::getStyle()->getDrawingGroups();
|
||||
|
@ -133,8 +152,8 @@ namespace Hurricane {
|
|||
gentry->setChecked ( false );
|
||||
}
|
||||
bool unmatched = false;
|
||||
for_each_basic_layer ( basicLayer, technology->getBasicLayers() ) {
|
||||
if ( !find(basicLayer->getName()) ) {
|
||||
forEach ( BasicLayer*, basicLayer, technology->getBasicLayers() ) {
|
||||
if ( !find((*basicLayer)->getName()) ) {
|
||||
if ( !unmatched ) {
|
||||
unmatched = true;
|
||||
gentry = GroupPaletteEntry::create ( this, "Unmatcheds" );
|
||||
|
@ -142,36 +161,19 @@ namespace Hurricane {
|
|||
layout->addSpacing ( -5 );
|
||||
_entries.push_back ( gentry );
|
||||
}
|
||||
LayerPaletteEntry* entry = LayerPaletteEntry::create ( this, basicLayer );
|
||||
LayerPaletteEntry* entry = LayerPaletteEntry::create ( this, *basicLayer );
|
||||
layout->addWidget ( entry, 0, Qt::AlignLeft );
|
||||
_entries.push_back ( entry );
|
||||
|
||||
cerr << "[WARNING] BasicLayer \"" << basicLayer->getName()
|
||||
cerr << "[WARNING] BasicLayer \"" << (*basicLayer)->getName()
|
||||
<< "\" has no associated DisplayStyle." << endl;
|
||||
}
|
||||
end_for;
|
||||
}
|
||||
if ( unmatched )
|
||||
gentry->setChecked ( false );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
_showAll = new QPushButton ( this );
|
||||
_showAll->setIcon ( QIcon(":/images/palette_show_all.png") );
|
||||
_showAll->setFlat ( true );
|
||||
|
||||
_hideAll = new QPushButton ( this );
|
||||
_hideAll->setIcon ( QIcon(":/images/palette_hide_all.png") );
|
||||
_hideAll->setFlat ( true );
|
||||
|
||||
connect ( _showAll, SIGNAL(clicked()), this, SLOT(showAll()) );
|
||||
connect ( _hideAll, SIGNAL(clicked()), this, SLOT(hideAll()) );
|
||||
|
||||
QHBoxLayout* bottomEntry = new QHBoxLayout ();
|
||||
bottomEntry->setContentsMargins ( 0, 0, 0, 0 );
|
||||
bottomEntry->addWidget ( _showAll );
|
||||
bottomEntry->addWidget ( _hideAll );
|
||||
layout->addLayout ( bottomEntry );
|
||||
layout->addStretch ();
|
||||
|
||||
adaptator->setLayout ( layout );
|
||||
|
@ -182,6 +184,40 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
void HPalette::updateExtensions ( Cell* cell )
|
||||
{
|
||||
QVBoxLayout* layout = qobject_cast<QVBoxLayout*> ( widget()->layout() );
|
||||
const Name extensionName = "Extensions";
|
||||
|
||||
for ( size_t ientry=0 ; ientry<_entries.size() ; ) {
|
||||
if ( ( _entries[ientry]->getName() == extensionName )
|
||||
|| _entries[ientry]->isExtension() ) {
|
||||
layout->removeWidget ( _entries[ientry] );
|
||||
_entries[ientry]->deleteLater ();
|
||||
|
||||
for ( size_t j=ientry+1 ; j<_entries.size() ; j++ )
|
||||
_entries[j-1] = _entries[j];
|
||||
_entries.pop_back ();
|
||||
} else
|
||||
ientry++;
|
||||
}
|
||||
|
||||
if ( !cell ) return;
|
||||
|
||||
GroupPaletteEntry* gentry = GroupPaletteEntry::create ( this, extensionName );
|
||||
layout->insertWidget ( -1, gentry, 0, Qt::AlignLeft );
|
||||
layout->addSpacing ( -5 );
|
||||
_entries.push_back ( gentry );
|
||||
|
||||
forEach ( ExtensionSlice*, extension, cell->getExtensionSlices() ) {
|
||||
HExtensionPaletteEntry* entry = HExtensionPaletteEntry::create ( this, (*extension)->getName() );
|
||||
layout->insertWidget ( -1, entry, 0, Qt::AlignLeft );
|
||||
_entries.push_back ( entry );
|
||||
}
|
||||
gentry->setChecked ( false );
|
||||
}
|
||||
|
||||
|
||||
bool HPalette::isDrawable ( size_t index )
|
||||
{
|
||||
if ( index < _entries.size() )
|
||||
|
|
|
@ -111,6 +111,12 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
bool LayerPaletteEntry::isExtension () const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const Name& LayerPaletteEntry::getName () const
|
||||
{
|
||||
return _basicLayer->getName();
|
||||
|
|
|
@ -110,6 +110,12 @@ namespace Hurricane {
|
|||
}
|
||||
|
||||
|
||||
bool ViewerPaletteEntry::isExtension () const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
const Name& ViewerPaletteEntry::getName () const
|
||||
{
|
||||
return _name;
|
||||
|
|
|
@ -108,7 +108,14 @@ namespace Hurricane {
|
|||
|
||||
private:
|
||||
class DrawingPlanes;
|
||||
|
||||
public:
|
||||
typedef void ( DrawExtensionGo_t ) ( CellWidget*
|
||||
, const Go*
|
||||
, const BasicLayer*
|
||||
, const Box&
|
||||
, const Transformation&
|
||||
);
|
||||
typedef void ( InitDrawExtension_t )( CellWidget* );
|
||||
public:
|
||||
// Constructor & Destructor.
|
||||
CellWidget ( QWidget* parent=NULL );
|
||||
|
@ -128,9 +135,11 @@ namespace Hurricane {
|
|||
inline void setStartLevel ( int level );
|
||||
inline void setStopLevel ( int level );
|
||||
inline void setQueryFilter ( int filter );
|
||||
inline void addDrawExtensionGo ( const Name&, InitDrawExtension_t*, DrawExtensionGo_t* );
|
||||
// Painter control & Hurricane objects drawing primitives.
|
||||
inline float getScale () const;
|
||||
bool isDrawable ( const Name& entryName );
|
||||
bool isDrawableLayer ( const Name& );
|
||||
bool isDrawableExtension ( const Name& );
|
||||
void drawBox ( const Box& );
|
||||
void drawLine ( const Point&, const Point& );
|
||||
void drawText ( const Point&, const Name&, int angle=0, bool reverse=false );
|
||||
|
@ -169,6 +178,7 @@ namespace Hurricane {
|
|||
void mousePressEvent ( QMouseEvent* );
|
||||
void mouseReleaseEvent ( QMouseEvent* );
|
||||
signals:
|
||||
void cellChanged ( Cell* );
|
||||
void mousePositionChanged ( const Point& position );
|
||||
void selectionChanged ( const set<Selector*>&, Cell* );
|
||||
void occurrenceToggled ( Occurrence );
|
||||
|
@ -267,37 +277,50 @@ namespace Hurricane {
|
|||
private:
|
||||
class DrawingQuery : public Query {
|
||||
public:
|
||||
DrawingQuery ( CellWidget* widget );
|
||||
inline void setQuery ( const Box& area
|
||||
, const Transformation& transformation
|
||||
, const BasicLayer* basicLayer
|
||||
, unsigned int filter
|
||||
);
|
||||
virtual bool hasMasterCellCallback () const;
|
||||
virtual bool hasGoCallback () const;
|
||||
virtual void masterCellCallback ();
|
||||
virtual void goCallback ( Go* go );
|
||||
void drawGo ( const Go* go
|
||||
, const BasicLayer* basicLayer
|
||||
, const Box& area
|
||||
, const Transformation& transformation
|
||||
);
|
||||
DrawingQuery ( CellWidget* widget );
|
||||
inline void setQuery ( const Box& area
|
||||
, const Transformation& transformation
|
||||
, const BasicLayer* basicLayer
|
||||
, ExtensionSlice::Mask extensionMask
|
||||
, unsigned int filter
|
||||
);
|
||||
inline void addDrawExtensionGo ( const Name&
|
||||
, InitDrawExtension_t*
|
||||
, DrawExtensionGo_t*
|
||||
);
|
||||
void setDrawExtensionGo ( const Name& );
|
||||
virtual bool hasMasterCellCallback () const;
|
||||
virtual bool hasGoCallback () const;
|
||||
virtual bool hasExtensionGoCallback () const;
|
||||
virtual void masterCellCallback ();
|
||||
virtual void goCallback ( Go* go );
|
||||
virtual void extensionGoCallback ( Go* go );
|
||||
void drawGo ( const Go* go
|
||||
, const BasicLayer* basicLayer
|
||||
, const Box& area
|
||||
, const Transformation& transformation
|
||||
);
|
||||
|
||||
protected:
|
||||
CellWidget* _cellWidget;
|
||||
CellWidget* _cellWidget;
|
||||
DrawExtensionGo_t* _drawExtensionGo;
|
||||
map<Name,pair<InitDrawExtension_t*,DrawExtensionGo_t*> >
|
||||
_drawExtensionGos;
|
||||
};
|
||||
|
||||
private:
|
||||
class TextDrawingQuery : public Query {
|
||||
public:
|
||||
TextDrawingQuery ( CellWidget* widget );
|
||||
inline void setQuery ( const Box& area
|
||||
, const Transformation& transformation
|
||||
);
|
||||
virtual bool hasMasterCellCallback () const;
|
||||
virtual bool hasGoCallback () const;
|
||||
virtual void masterCellCallback ();
|
||||
virtual void goCallback ( Go* go );
|
||||
TextDrawingQuery ( CellWidget* widget );
|
||||
inline void setQuery ( const Box& area
|
||||
, const Transformation& transformation
|
||||
);
|
||||
virtual bool hasMasterCellCallback () const;
|
||||
virtual bool hasGoCallback () const;
|
||||
virtual bool hasExtensionGoCallback () const;
|
||||
virtual void masterCellCallback ();
|
||||
virtual void extensionGoCallback ( Go* go );
|
||||
virtual void goCallback ( Go* go );
|
||||
|
||||
protected:
|
||||
CellWidget* _cellWidget;
|
||||
|
@ -339,9 +362,25 @@ namespace Hurricane {
|
|||
inline void CellWidget::DrawingQuery::setQuery ( const Box& area
|
||||
, const Transformation& transformation
|
||||
, const BasicLayer* basicLayer
|
||||
, ExtensionSlice::Mask extensionMask
|
||||
, unsigned int filter
|
||||
)
|
||||
{ Query::setQuery ( _cellWidget->getCell(), area, transformation, basicLayer, filter ); }
|
||||
{
|
||||
Query::setQuery ( _cellWidget->getCell()
|
||||
, area
|
||||
, transformation
|
||||
, basicLayer
|
||||
, extensionMask
|
||||
, filter
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
inline void CellWidget::DrawingQuery::addDrawExtensionGo ( const Name& name
|
||||
, InitDrawExtension_t* initDrawExtension
|
||||
, DrawExtensionGo_t* drawExtensionGo
|
||||
)
|
||||
{ _drawExtensionGos[name] = make_pair(initDrawExtension,drawExtensionGo); }
|
||||
|
||||
|
||||
inline bool CellWidget::DrawingPlanes::getLineMode () const
|
||||
|
@ -421,6 +460,13 @@ namespace Hurricane {
|
|||
{ copyToScreen ( 0, 0, width(), height() ); }
|
||||
|
||||
|
||||
inline void CellWidget::addDrawExtensionGo ( const Name& name
|
||||
, InitDrawExtension_t* initDrawExtension
|
||||
, DrawExtensionGo_t* drawExtensionGo
|
||||
)
|
||||
{ _drawingQuery.addDrawExtensionGo ( name, initDrawExtension, drawExtensionGo ); }
|
||||
|
||||
|
||||
inline void CellWidget::setStartLevel ( int level )
|
||||
{ _drawingQuery.setStartLevel ( level ); }
|
||||
|
||||
|
|
|
@ -50,15 +50,14 @@
|
|||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
# ifndef __GROUP_HPALETTE_ENTRY_H__
|
||||
# define __GROUP_HPALETTE_ENTRY_H__
|
||||
#ifndef __GROUP_HPALETTE_ENTRY__
|
||||
#define __GROUP_HPALETTE_ENTRY__
|
||||
|
||||
|
||||
class QPushButton;
|
||||
|
||||
# include "hurricane/Name.h"
|
||||
|
||||
# include "hurricane/viewer/HPaletteEntry.h"
|
||||
#include "hurricane/Name.h"
|
||||
#include "hurricane/viewer/HPaletteEntry.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
@ -75,6 +74,7 @@ namespace Hurricane {
|
|||
public:
|
||||
virtual bool isGroup () const;
|
||||
virtual bool isBasicLayer () const;
|
||||
virtual bool isExtension () const;
|
||||
virtual const Name& getName () const;
|
||||
virtual BasicLayer* getBasicLayer ();
|
||||
virtual bool isChecked () const;
|
||||
|
@ -106,4 +106,4 @@ namespace Hurricane {
|
|||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
# endif
|
||||
#endif // __GROUP_HPALETTE_ENTRY__
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
//
|
||||
// This file is part of the Coriolis Software.
|
||||
// Copyright (c) UPMC/LIP6 2008-2008, All Rights Reserved
|
||||
//
|
||||
// ===================================================================
|
||||
//
|
||||
// $Id$
|
||||
//
|
||||
// x-----------------------------------------------------------------x
|
||||
// | |
|
||||
// | H U R R I C A N E |
|
||||
// | V L S I B a c k e n d D a t a - B a s e |
|
||||
// | |
|
||||
// | Author : Jean-Paul CHAPUT |
|
||||
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
|
||||
// | =============================================================== |
|
||||
// | C++ Header : "./HExtensionPaletteEntry.h" |
|
||||
// | *************************************************************** |
|
||||
// | U p d a t e s |
|
||||
// | |
|
||||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
#ifndef __HURRICANE_EXTENSION_PALETTE_ENTRY__
|
||||
#define __HURRICANE_EXTENSION_PALETTE_ENTRY__
|
||||
|
||||
|
||||
class QCheckBox;
|
||||
|
||||
#include "hurricane/Name.h"
|
||||
#include "hurricane/viewer/HPaletteEntry.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
|
||||
class HExtensionPaletteEntry : public HPaletteEntry {
|
||||
Q_OBJECT;
|
||||
|
||||
// Constructor.
|
||||
public:
|
||||
static HExtensionPaletteEntry* create ( HPalette* , const Name& );
|
||||
|
||||
// Methods.
|
||||
public:
|
||||
virtual bool isGroup () const;
|
||||
virtual bool isBasicLayer () const;
|
||||
virtual bool isExtension () const;
|
||||
virtual const Name& getName () const;
|
||||
virtual BasicLayer* getBasicLayer ();
|
||||
virtual bool isChecked () const;
|
||||
virtual void setChecked ( bool );
|
||||
|
||||
// Slots.
|
||||
public slots:
|
||||
virtual void toggle ();
|
||||
|
||||
// Internal - Attributes.
|
||||
protected:
|
||||
QCheckBox* _checkBox;
|
||||
Name _name;
|
||||
|
||||
// Internal - Constructor.
|
||||
HExtensionPaletteEntry ( HPalette* , const Name& );
|
||||
HExtensionPaletteEntry ( const HExtensionPaletteEntry& );
|
||||
HExtensionPaletteEntry& operator= ( const HExtensionPaletteEntry& );
|
||||
virtual void _postCreate ();
|
||||
|
||||
};
|
||||
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
#endif // __LAYER_PALETTE_ENTRY__
|
|
@ -50,15 +50,15 @@
|
|||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
# ifndef __HPALETTE__
|
||||
# define __HPALETTE__
|
||||
#ifndef __HURRICANE_PALETTE__
|
||||
#define __HURRICANE_PALETTE__
|
||||
|
||||
# include <vector>
|
||||
# include <QWidget>
|
||||
# include <QScrollArea>
|
||||
# include <QPixmap>
|
||||
#include <vector>
|
||||
#include <QWidget>
|
||||
#include <QScrollArea>
|
||||
#include <QPixmap>
|
||||
|
||||
# include "hurricane/Commons.h"
|
||||
#include "hurricane/Commons.h"
|
||||
|
||||
|
||||
class QCheckBox;
|
||||
|
@ -73,8 +73,9 @@ namespace Hurricane {
|
|||
|
||||
class Name;
|
||||
class BasicLayer;
|
||||
class HPaletteEntry;
|
||||
class Cell;
|
||||
class CellWidget;
|
||||
class HPaletteEntry;
|
||||
|
||||
|
||||
class HPalette : public QScrollArea {
|
||||
|
@ -94,6 +95,7 @@ namespace Hurricane {
|
|||
void paletteChanged ();
|
||||
public slots:
|
||||
// Slots.
|
||||
void updateExtensions ( Cell* cell );
|
||||
void showAll ();
|
||||
void hideAll ();
|
||||
|
||||
|
@ -116,4 +118,4 @@ namespace Hurricane {
|
|||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
# endif
|
||||
#endif // __HURRICANE_PALETTE__
|
||||
|
|
|
@ -50,17 +50,17 @@
|
|||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
# ifndef __PALETTE_ENTRY_H__
|
||||
# define __PALETTE_ENTRY_H__
|
||||
#ifndef __HURRICANE_PALETTE_ENTRY__
|
||||
#define __HURRICANE_PALETTE_ENTRY__
|
||||
|
||||
# include <QPixmap>
|
||||
# include <QWidget>
|
||||
# include <QFont>
|
||||
#include <QPixmap>
|
||||
#include <QWidget>
|
||||
#include <QFont>
|
||||
|
||||
class QPaintEvent;
|
||||
class QCheckBox;
|
||||
|
||||
# include "hurricane/Commons.h"
|
||||
#include "hurricane/Commons.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
@ -99,6 +99,7 @@ namespace Hurricane {
|
|||
virtual const Name& getName () const = 0;
|
||||
virtual bool isGroup () const = 0;
|
||||
virtual bool isBasicLayer () const = 0;
|
||||
virtual bool isExtension () const = 0;
|
||||
virtual BasicLayer* getBasicLayer () = 0;
|
||||
virtual bool isChecked () const = 0;
|
||||
virtual void setChecked ( bool state ) = 0;
|
||||
|
@ -123,4 +124,4 @@ namespace Hurricane {
|
|||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
# endif
|
||||
# endif // __HURRICANE_PALETTE_ENTRY__
|
||||
|
|
|
@ -50,13 +50,13 @@
|
|||
// x-----------------------------------------------------------------x
|
||||
|
||||
|
||||
# ifndef __LAYER_PALETTE_ENTRY_H__
|
||||
# define __LAYER_PALETTE_ENTRY_H__
|
||||
#ifndef __LAYER_PALETTE_ENTRY__
|
||||
#define __LAYER_PALETTE_ENTRY__
|
||||
|
||||
|
||||
class QCheckBox;
|
||||
|
||||
# include "hurricane/viewer/HPaletteEntry.h"
|
||||
#include "hurricane/viewer/HPaletteEntry.h"
|
||||
|
||||
|
||||
namespace Hurricane {
|
||||
|
@ -73,6 +73,7 @@ namespace Hurricane {
|
|||
public:
|
||||
virtual bool isGroup () const;
|
||||
virtual bool isBasicLayer () const;
|
||||
virtual bool isExtension () const;
|
||||
virtual const Name& getName () const;
|
||||
virtual BasicLayer* getBasicLayer ();
|
||||
virtual bool isChecked () const;
|
||||
|
@ -99,4 +100,4 @@ namespace Hurricane {
|
|||
} // End of Hurricane namespace.
|
||||
|
||||
|
||||
# endif
|
||||
#endif // __LAYER_PALETTE_ENTRY__
|
||||
|
|
|
@ -74,6 +74,7 @@ namespace Hurricane {
|
|||
public:
|
||||
virtual bool isGroup () const;
|
||||
virtual bool isBasicLayer () const;
|
||||
virtual bool isExtension () const;
|
||||
virtual const Name& getName () const;
|
||||
virtual BasicLayer* getBasicLayer ();
|
||||
virtual bool isChecked () const;
|
||||
|
|
Loading…
Reference in New Issue