* ./hurricane :
- Bug: destructor of Technology was destroying some Layers twice. Destruction of Layer was done by a loop over a multimap<> that could contains more than one entry of a Layer... Now using a loop over the IntrusiveMap. - Change: Reorganization of NetExternalComponents property, all functions are now static functions members as the property name.
This commit is contained in:
parent
d877893e75
commit
b8e5f9073a
|
@ -53,6 +53,8 @@ void DataBase::_postCreate()
|
|||
void DataBase::_preDestroy()
|
||||
// ************************
|
||||
{
|
||||
cerr << "DataBase::_preDestroy()" << endl;
|
||||
|
||||
UpdateSession::open();
|
||||
Inherit::_preDestroy();
|
||||
|
||||
|
|
|
@ -202,10 +202,10 @@ namespace Hurricane {
|
|||
|
||||
void Layer::_preDestroy ()
|
||||
{
|
||||
DBo::_preDestroy();
|
||||
|
||||
_technology->_getLayerMaskMap().erase(_mask);
|
||||
_technology->_getLayerMap()._remove(this);
|
||||
|
||||
DBo::_preDestroy ();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -9,17 +9,16 @@
|
|||
// ****************************************************************************************************
|
||||
|
||||
#include "hurricane/Error.h"
|
||||
#include "hurricane/Relation.h"
|
||||
#include "hurricane/Net.h"
|
||||
|
||||
#include "hurricane/NetExternalComponents.h"
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
static Name ExternalComponentsRelationName("ExternalComponentsRelation");
|
||||
const Name NetExternalComponents::_name = "ExternalComponentsRelation";
|
||||
|
||||
static StandardRelation* getExternalComponentsRelation(const Net* net) {
|
||||
Property* property = net->getProperty(ExternalComponentsRelationName);
|
||||
StandardRelation* NetExternalComponents::getRelation(const Net* net) {
|
||||
Property* property = net->getProperty(_name);
|
||||
if (!property) {
|
||||
return NULL;
|
||||
} else {
|
||||
|
@ -35,7 +34,7 @@ Components NetExternalComponents::get(const Net* net) {
|
|||
throw Error("Impossible to retrieve external components on non external net "
|
||||
+ net->getName()._getString());
|
||||
|
||||
StandardRelation* externalComponentsRelation = getExternalComponentsRelation(net);
|
||||
StandardRelation* externalComponentsRelation = getRelation(net);
|
||||
if (!externalComponentsRelation)
|
||||
return Components();
|
||||
return externalComponentsRelation->getSlaveOwners().getSubSet<Component*>();
|
||||
|
@ -46,9 +45,9 @@ void NetExternalComponents::setExternal(Component* component) {
|
|||
if (!net->isExternal())
|
||||
throw Error("Impossible to set as external a component member of non external net "
|
||||
+ net->getName()._getString());
|
||||
StandardRelation* externalComponentsRelation = getExternalComponentsRelation(net);
|
||||
StandardRelation* externalComponentsRelation = getRelation(net);
|
||||
if (!externalComponentsRelation)
|
||||
externalComponentsRelation = StandardRelation::create(net, ExternalComponentsRelationName);
|
||||
externalComponentsRelation = StandardRelation::create(net, _name);
|
||||
component->put(externalComponentsRelation);
|
||||
}
|
||||
|
||||
|
|
|
@ -311,11 +311,14 @@ void Technology::_postCreate()
|
|||
void Technology::_preDestroy()
|
||||
// **************************
|
||||
{
|
||||
Inherit::_preDestroy();
|
||||
|
||||
for_each_layer(layer, getLayers()) layer->destroy(); end_for;
|
||||
while ( !_layerMap.isEmpty() ) {
|
||||
_layerMap.getElements().getFirst()->destroy();
|
||||
}
|
||||
//for_each_layer(layer, getLayers()) layer->destroy(); end_for;
|
||||
|
||||
_dataBase->_setTechnology(NULL);
|
||||
DBo::_preDestroy();
|
||||
}
|
||||
|
||||
void Technology::_insertInLayerMaskMap ( Layer* layer )
|
||||
|
|
|
@ -12,14 +12,19 @@
|
|||
#define HURRICANE_NET_EXTERNAL_COMPONENTS
|
||||
|
||||
#include "hurricane/Component.h"
|
||||
#include "hurricane/Relation.h"
|
||||
|
||||
namespace Hurricane {
|
||||
|
||||
class NetExternalComponents {
|
||||
class NetExternalComponents {
|
||||
public:
|
||||
static Components get(const Net* net);
|
||||
static void setExternal(Component* component);
|
||||
};
|
||||
static Components get ( const Net* );
|
||||
static void setExternal ( Component* );
|
||||
protected:
|
||||
static StandardRelation* getRelation ( const Net* );
|
||||
private:
|
||||
static const Name _name;
|
||||
};
|
||||
|
||||
} // End of Hurricane namespace.
|
||||
|
||||
|
|
Loading…
Reference in New Issue