get rid of is_a, dynamic_cast is far more powerful then #define...

This commit is contained in:
The Coriolis Project 2008-06-10 17:04:48 +00:00
parent 0cae53b843
commit 4c4c8d3553
8 changed files with 22 additions and 25 deletions

View File

@ -80,7 +80,7 @@ void DBo::remove(Property* property)
if (_propertySet.find(property) != _propertySet.end()) { if (_propertySet.find(property) != _propertySet.end()) {
_propertySet.erase(property); _propertySet.erase(property);
property->onReleasedBy(this); property->onReleasedBy(this);
if (is_a<Quark*>(this) && _propertySet.empty()) destroy(); if (dynamic_cast<Quark*>(this) && _propertySet.empty()) destroy();
} }
} }
@ -91,7 +91,7 @@ void DBo::removeProperty(const Name& name)
if (property) { if (property) {
_propertySet.erase(property); _propertySet.erase(property);
property->onReleasedBy(this); property->onReleasedBy(this);
if (is_a<Quark*>(this) && _propertySet.empty()) destroy(); if (dynamic_cast<Quark*>(this) && _propertySet.empty()) destroy();
} }
} }
@ -151,7 +151,7 @@ void DBo::_onDestroyed(Property* property)
{ {
if (property && (_propertySet.find(property) != _propertySet.end())) { if (property && (_propertySet.find(property) != _propertySet.end())) {
_propertySet.erase(property); _propertySet.erase(property);
if (is_a<Quark*>(this) && _propertySet.empty()) destroy(); if (dynamic_cast<Quark*>(this) && _propertySet.empty()) destroy();
} }
} }

View File

@ -252,15 +252,15 @@ HyperNet::HyperNet(const Occurrence& occurrence)
{ {
if (occurrence.isValid()) { if (occurrence.isValid()) {
Entity* entity = occurrence.getEntity(); Entity* entity = occurrence.getEntity();
if (is_a<Net*>(entity)) if (dynamic_cast<Net*>(entity))
_netOccurrence = occurrence; _netOccurrence = occurrence;
else { else {
if (is_a<Rubber*>(entity)) { if (dynamic_cast<Rubber*>(entity)) {
Rubber* rubber = (Rubber*)entity; Rubber* rubber = (Rubber*)entity;
_netOccurrence = Occurrence(rubber->getNet(), occurrence.getPath()); _netOccurrence = Occurrence(rubber->getNet(), occurrence.getPath());
} }
else { else {
if (is_a<Component*>(entity)) { if (dynamic_cast<Component*>(entity)) {
Component* component = (Component*)entity; Component* component = (Component*)entity;
_netOccurrence = Occurrence(component->getNet(), occurrence.getPath()); _netOccurrence = Occurrence(component->getNet(), occurrence.getPath());
} }
@ -533,12 +533,12 @@ void HyperNet_NetOccurrences::Locator::progress()
if (_doExtraction) { if (_doExtraction) {
Cell* cell = netOccurrence.getOwnerCell(); Cell* cell = netOccurrence.getOwnerCell();
for_each_component(component, net->getComponents()) { for_each_component(component, net->getComponents()) {
if (!is_a<Plug*>(component)) { if (!dynamic_cast<Plug*>(component)) {
//if (_allowInterruption && !((i++) % 200)) gtk_check_for_interruption(); //if (_allowInterruption && !((i++) % 200)) gtk_check_for_interruption();
Occurrence occurrence = Occurrence(component, path); Occurrence occurrence = Occurrence(component, path);
Box area = occurrence.getBoundingBox(); Box area = occurrence.getBoundingBox();
for_each_occurrence(occurrence2, cell->getOccurrencesUnder(area)) { for_each_occurrence(occurrence2, cell->getOccurrencesUnder(area)) {
if (is_a<Component*>(occurrence2.getEntity())) { if (dynamic_cast<Component*>(occurrence2.getEntity())) {
Component* component2 = (Component*)occurrence2.getEntity(); Component* component2 = (Component*)occurrence2.getEntity();
if (IsConnex(occurrence, occurrence2)) { if (IsConnex(occurrence, occurrence2)) {
Occurrence net2Occurrence = Occurrence net2Occurrence =
@ -768,15 +768,15 @@ void HyperNet_NetOccurrencesUnder::Locator::progress()
Box area = occurrence.getBoundingBox(); Box area = occurrence.getBoundingBox();
if (! area.intersect (_area)) { if (! area.intersect (_area)) {
// Outside useful area // Outside useful area
} else if (is_a<Plug*>(component)) { } else if (dynamic_cast<Plug*>(component)) {
// Will be processed below // Will be processed below
} else if (is_a<Rubber*>(component)) { } else if (dynamic_cast<Rubber*>(component)) {
// Don't go through the Rubbers (go only trough connecting layers) // Don't go through the Rubbers (go only trough connecting layers)
} else { } else {
//if (_allowInterruption && !((i++) % 200)) gtk_check_for_interruption(); //if (_allowInterruption && !((i++) % 200)) gtk_check_for_interruption();
Box under = area.getIntersection (_area); Box under = area.getIntersection (_area);
for_each_occurrence(occurrence2, cell->getOccurrencesUnder(under)) { for_each_occurrence(occurrence2, cell->getOccurrencesUnder(under)) {
if (is_a<Component*>(occurrence2.getEntity())) { if (dynamic_cast<Component*>(occurrence2.getEntity())) {
Component* component2 = (Component*)occurrence2.getEntity(); Component* component2 = (Component*)occurrence2.getEntity();
if (IsConnex(occurrence, occurrence2)) { if (IsConnex(occurrence, occurrence2)) {
Occurrence net2Occurrence = Occurrence net2Occurrence =

View File

@ -621,7 +621,7 @@ void Net::_preDestroy()
} }
for_each_component(component, getComponents()) { for_each_component(component, getComponents()) {
if (!is_a<Plug*>(component)) if (!dynamic_cast<Plug*>(component))
component->destroy(); component->destroy();
else else
((Plug*)component)->setNet(NULL); ((Plug*)component)->setNet(NULL);

View File

@ -312,7 +312,7 @@ void RoutingPad::setExternalComponent(Component* component)
Occurrence RoutingPad::getPlugOccurrence() Occurrence RoutingPad::getPlugOccurrence()
// *************************************** // ***************************************
{ {
if (is_a<Plug*>(_occurrence.getEntity())) if (dynamic_cast<Plug*>(_occurrence.getEntity()))
return _occurrence; return _occurrence;
Component* component= static_cast<Component*>(_occurrence.getEntity()); Component* component= static_cast<Component*>(_occurrence.getEntity());
Net* net=component->getNet(); Net* net=component->getNet();

View File

@ -123,21 +123,21 @@ BasicLayer* Technology::getBasicLayer(const Name& name) const
// ********************************************************** // **********************************************************
{ {
Layer* layer = getLayer(name); Layer* layer = getLayer(name);
return (layer && is_a<BasicLayer*>(layer)) ? (BasicLayer*)layer : NULL; return (layer && dynamic_cast<BasicLayer*>(layer)) ? (BasicLayer*)layer : NULL;
} }
RegularLayer* Technology::getRegularLayer(const Name& name) const RegularLayer* Technology::getRegularLayer(const Name& name) const
// ********************************************************** // **********************************************************
{ {
Layer* layer = getLayer(name); Layer* layer = getLayer(name);
return (layer && is_a<RegularLayer*>(layer)) ? (RegularLayer*)layer : NULL; return (layer && dynamic_cast<RegularLayer*>(layer)) ? (RegularLayer*)layer : NULL;
} }
ViaLayer* Technology::getViaLayer(const Name& name) const ViaLayer* Technology::getViaLayer(const Name& name) const
// ****************************************************************** // ******************************************************************
{ {
Layer* layer = getLayer(name); Layer* layer = getLayer(name);
return (layer && is_a<ViaLayer*>(layer)) ? (ViaLayer*)layer : NULL; return (layer && dynamic_cast<ViaLayer*>(layer)) ? (ViaLayer*)layer : NULL;
} }
BasicLayers Technology::getBasicLayers() const BasicLayers Technology::getBasicLayers() const

View File

@ -76,7 +76,7 @@ void UpdateSession::_preDestroy()
UPDATOR_STACK->pop(); UPDATOR_STACK->pop();
for_each_dbo(owner, getOwners()) { for_each_dbo(owner, getOwners()) {
if (is_a<Go*>(owner)) ((Go*)owner)->materialize(); if (dynamic_cast<Go*>(owner)) ((Go*)owner)->materialize();
end_for; end_for;
} }
@ -101,7 +101,7 @@ Record* UpdateSession::_getRecord() const
void UpdateSession::onCapturedBy(DBo* owner) void UpdateSession::onCapturedBy(DBo* owner)
// ***************************************** // *****************************************
{ {
if (!is_a<Go*>(owner)) if (!dynamic_cast<Go*>(owner))
throw Error("Bad update session capture : not a graphic object"); throw Error("Bad update session capture : not a graphic object");
Inherit::onCapturedBy(owner); Inherit::onCapturedBy(owner);
@ -130,7 +130,7 @@ void Go::invalidate(bool propagateFlag)
Property* property = getProperty(UpdateSession::getPropertyName()); Property* property = getProperty(UpdateSession::getPropertyName());
if (property) { if (property) {
if (!is_a<UpdateSession*>(property)) if (!dynamic_cast<UpdateSession*>(property))
throw Error("Can't invalidate go : bad update session type"); throw Error("Can't invalidate go : bad update session type");
} }
else { else {

View File

@ -461,7 +461,7 @@ template<class Type, class SubType> class SubTypeCollection : public Collection<
: Inherit(), : Inherit(),
_locator(collection.getLocator()) _locator(collection.getLocator())
{ {
while (_locator.isValid() && !is_a<SubType>(_locator.getElement())) while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()))
_locator.progress(); _locator.progress();
} }
@ -470,7 +470,7 @@ template<class Type, class SubType> class SubTypeCollection : public Collection<
: Inherit(), : Inherit(),
_locator(genericLocator.getClone()) _locator(genericLocator.getClone())
{ {
while (_locator.isValid() && !is_a<SubType>(_locator.getElement())) while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()))
_locator.progress(); _locator.progress();
} }
@ -515,7 +515,7 @@ template<class Type, class SubType> class SubTypeCollection : public Collection<
if (_locator.isValid()) { if (_locator.isValid()) {
do { do {
_locator.progress(); _locator.progress();
} while (_locator.isValid() && !is_a<SubType>(_locator.getElement())); } while (_locator.isValid() && !dynamic_cast<SubType>(_locator.getElement()));
} }
} }

View File

@ -49,9 +49,6 @@
// | Macros Definition | // | Macros Definition |
// x-----------------------------------------------------------------x // x-----------------------------------------------------------------x
#define is_a (bool)dynamic_cast
using namespace std; using namespace std;