From e2fcfcb699d9c7cfcf863c83dd88e802f335f4c9 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 10 Jun 2015 15:49:58 +0200 Subject: [PATCH] Rationalization of Cell's flags. Compilation warnings hunt. * New: In Hurricane, dedicated class BaseFlags to wrap a set of flags. Similar to the Mask class, only with a slightly different semantic. Encapsulation of . Also provide support for the Inspector, to have a human-readable display of the flags. * Change: In Hurricane, in Cell, regroup all the flags under a Flags sub-class of Cell. No more mixing between booleans and bit flags. (first use of BaseClass). * In Hurricane, CRL Core & Knik, many small corrections to suppress annoying warning messages at compile time. Most noticeably, Bison errors in VstParserGrammar generated by rules and token with mismatched return value type. This was not problematic because the badly defined return value where not used. But still... --- crlcore/src/ccore/ToolEngine.cpp | 2 +- crlcore/src/ccore/Utilities.cpp | 12 +- crlcore/src/ccore/alliance/ap/ApParser.cpp | 2 +- .../ccore/alliance/vst/VstParserGrammar.yy | 42 ++--- crlcore/src/pyCRL/PyBanner.cpp | 20 ++- crlcore/src/pyCRL/PyEnvironment.cpp | 2 +- crlcore/src/pyCRL/PyToolEngine.cpp | 2 +- etesian/src/EtesianEngine.cpp | 4 +- hurricane/src/hurricane/CMakeLists.txt | 2 + hurricane/src/hurricane/Cell.cpp | 122 ++++++++++----- hurricane/src/hurricane/DeepNet.cpp | 8 +- hurricane/src/hurricane/Flags.cpp | 59 ++++++++ hurricane/src/hurricane/UpdateSession.cpp | 4 +- hurricane/src/hurricane/hurricane/Cell.h | 70 +++++---- .../src/hurricane/hurricane/Collection.h | 35 +++-- hurricane/src/hurricane/hurricane/Flags.h | 143 ++++++++++++++++++ hurricane/src/hurricane/hurricane/Mask.h | 28 ++-- hurricane/src/isobar/PyHurricane.cpp | 8 +- hurricane/src/isobar/PyNet.cpp | 4 +- hurricane/src/viewer/CellViewer.cpp | 9 +- hurricane/src/viewer/PyDisplayStyle.cpp | 17 ++- hurricane/src/viewer/PyDrawingGroup.cpp | 16 +- kite/src/KiteEngine.cpp | 12 +- kite/src/RoutingEvent.cpp | 2 +- kite/src/kite/RoutingEvent.h | 2 +- knik/src/GraphicKnikEngine.cpp | 4 +- knik/src/flute-3.1/src/flute.cpp | 50 +++--- knik/src/flute-3.1/src/flute_mst.cpp | 2 - knik/src/flute-3.1/src/heap.cpp | 2 +- knik/src/flute-3.1/src/neighbors.cpp | 2 +- vlsisapd/src/utilities/src/Path.cpp | 5 +- 31 files changed, 490 insertions(+), 202 deletions(-) create mode 100644 hurricane/src/hurricane/Flags.cpp create mode 100644 hurricane/src/hurricane/hurricane/Flags.h diff --git a/crlcore/src/ccore/ToolEngine.cpp b/crlcore/src/ccore/ToolEngine.cpp index e2b6555c..a8759d48 100644 --- a/crlcore/src/ccore/ToolEngine.cpp +++ b/crlcore/src/ccore/ToolEngine.cpp @@ -227,7 +227,7 @@ namespace CRL { remove( relation ); } DBo::_preDestroy(); - _cell->notify( Cell::CellChanged ); + _cell->notify( Cell::Flags::CellChanged ); } diff --git a/crlcore/src/ccore/Utilities.cpp b/crlcore/src/ccore/Utilities.cpp index 5cec10d2..d19730ea 100644 --- a/crlcore/src/ccore/Utilities.cpp +++ b/crlcore/src/ccore/Utilities.cpp @@ -446,10 +446,10 @@ namespace CRL { } #endif - bool systemConfFound = false; + //bool systemConfFound = false; Utilities::Path systemConfFile = pythonSitePackages / "crlcore" / "coriolisInit.py"; if ( systemConfFile.exists() ) { - systemConfFound = true; + //systemConfFound = true; //cout << " o Reading python dot configuration:" << endl; //cout << " - <" << systemConfFile.string() << ">." << endl; @@ -461,18 +461,18 @@ namespace CRL { ,systemConfFile.toString().c_str()) << endl; } - bool homeConfFound = false; + //bool homeConfFound = false; Utilities::Path homeConfFile = getPath("home"); homeConfFile /= ".coriolis2.configuration.xml"; if ( homeConfFile.exists() ) { - homeConfFound = true; + //homeConfFound = true; conf->readFromFile ( homeConfFile.toString() ); } - bool dotConfFound = false; + //bool dotConfFound = false; Utilities::Path dotConfFile = "./.coriolis2.configuration.xml"; if ( dotConfFile.exists() ) { - dotConfFound = true; + //dotConfFound = true; conf->readFromFile ( dotConfFile.toString() ); } diff --git a/crlcore/src/ccore/alliance/ap/ApParser.cpp b/crlcore/src/ccore/alliance/ap/ApParser.cpp index d36de617..ef6f2ffb 100644 --- a/crlcore/src/ccore/alliance/ap/ApParser.cpp +++ b/crlcore/src/ccore/alliance/ap/ApParser.cpp @@ -846,7 +846,7 @@ namespace { break; } } - if (isPlaced) _cell->setFlags( Cell::Placed ); + if (isPlaced) _cell->setFlags( Cell::Flags::Placed ); fileStream.close (); } diff --git a/crlcore/src/ccore/alliance/vst/VstParserGrammar.yy b/crlcore/src/ccore/alliance/vst/VstParserGrammar.yy index 340795f1..e13df406 100644 --- a/crlcore/src/ccore/alliance/vst/VstParserGrammar.yy +++ b/crlcore/src/ccore/alliance/vst/VstParserGrammar.yy @@ -70,6 +70,14 @@ namespace Vst { void checkForIeee ( bool ieeeEnabled ); + enum TokenConstants { VhdlTo = 1 + , VhdlDownto = 2 + , VhdlPlus = 3 + , VhdlMinus = 4 + , VhdlBus = 5 + }; + + class Constraint { private: int _from; @@ -81,7 +89,7 @@ namespace Vst { int getFrom () const { return _from; } int getTo () const { return _to; } bool IsSet () const { return _set; } - void Set ( int from, int direction, int to ); + void Set ( int from, unsigned int direction, int to ); void UnSet () { _set = false; } void Init ( int& index ) { index = _from; }; void Next ( int& index ); @@ -89,7 +97,7 @@ namespace Vst { }; - void Constraint::Set ( int from, int direction, int to ) + void Constraint::Set ( int from, unsigned int direction, int to ) { _set = true; _from = from; @@ -117,8 +125,6 @@ namespace Vst { typedef map CellVectorMap; - - class YaccState { public: string _vhdFileName; @@ -210,9 +216,9 @@ namespace Vst { %token RightParen %token DoubleStar %token Star -%token Plus +%token <_flag> Plus %token Comma -%token Minus +%token <_flag> Minus %token VarAsgn %token Colon %token Semicolon @@ -261,7 +267,7 @@ namespace Vst { %token CONSTANT %token CONVERT %token DISCONNECT -%token DOWNTO +%token <_value> DOWNTO %token ELSE %token ELSIF %token _END @@ -324,7 +330,7 @@ namespace Vst { %token STRING %token SUBTYPE %token THEN -%token TO +%token <_value> TO %token TRANSPORT %token _TYPE %token UNITS @@ -506,8 +512,8 @@ range ; direction - : TO - | DOWNTO + : TO { $$ = Vst::VhdlTo; } + | DOWNTO { $$ = Vst::VhdlDownto; } ; .port_clause. @@ -858,9 +864,9 @@ generic_simple_expression ; .sign. - : /*empty*/ - | Plus - | Minus + : /*empty*/ { $$ = (char)0; } + | Plus { $$ = (char)Vst::VhdlPlus; } + | Minus { $$ = (char)Vst::VhdlMinus; } ; generic_term @@ -1092,20 +1098,20 @@ factor primary : aggregate | type_convertion - | name + | name { $$ = $1; } ; aggregate : LeftParen expression - RightParen_ERR + RightParen_ERR { $$ = $2; } ; type_convertion : CONVERT LeftParen expression - RightParen_ERR + RightParen_ERR { $$ = $3; } ; @@ -1149,8 +1155,8 @@ type_mark ; .BUS. - : /*empty*/ - | BUS + : /*empty*/ { $$ = 0; } + | BUS { $$ = Vst::VhdlBus; } ; identifier_list diff --git a/crlcore/src/pyCRL/PyBanner.cpp b/crlcore/src/pyCRL/PyBanner.cpp index bbbacbde..cff665bb 100644 --- a/crlcore/src/pyCRL/PyBanner.cpp +++ b/crlcore/src/pyCRL/PyBanner.cpp @@ -63,14 +63,20 @@ extern "C" { HTRY if ( pyBanner ) { - char* name = ""; - char* version = ""; - char* purpose = ""; - char* date = ""; - char* authors = ""; - char* contributors = ""; + char* name = (char*)""; + char* version = (char*)""; + char* purpose = (char*)""; + char* date = (char*)""; + char* authors = (char*)""; + char* contributors = (char*)""; - static char* keywords[] = { "name", "version", "purpose", "date", "authors", "contributors", NULL }; + static char* keywords[] = { (char*)"name" + , (char*)"version" + , (char*)"purpose" + , (char*)"date" + , (char*)"authors" + , (char*)"contributors" + , NULL }; if (PyArg_ParseTupleAndKeywords( args , kwArgs diff --git a/crlcore/src/pyCRL/PyEnvironment.cpp b/crlcore/src/pyCRL/PyEnvironment.cpp index 9b713eb7..5b6347f1 100644 --- a/crlcore/src/pyCRL/PyEnvironment.cpp +++ b/crlcore/src/pyCRL/PyEnvironment.cpp @@ -74,7 +74,7 @@ extern "C" { char* libName = NULL; int addMode = Environment::Append; - static char* keywords[] = { "library", "libName", "mode", NULL }; + static char* keywords[] = { (char*)"library", (char*)"libName", (char*)"mode", NULL }; if (PyArg_ParseTupleAndKeywords( args , kwArgs diff --git a/crlcore/src/pyCRL/PyToolEngine.cpp b/crlcore/src/pyCRL/PyToolEngine.cpp index bc0cf603..05aa584d 100644 --- a/crlcore/src/pyCRL/PyToolEngine.cpp +++ b/crlcore/src/pyCRL/PyToolEngine.cpp @@ -52,7 +52,7 @@ extern "C" { PyObject* pyCell = NULL; char* name = NULL; - static char* keywords[] = { "cell", "name", NULL }; + static char* keywords[] = { (char*)"cell", (char*)"name", NULL }; if (PyArg_ParseTupleAndKeywords( args , kwArgs diff --git a/etesian/src/EtesianEngine.cpp b/etesian/src/EtesianEngine.cpp index f7a84630..7cb82de3 100644 --- a/etesian/src/EtesianEngine.cpp +++ b/etesian/src/EtesianEngine.cpp @@ -451,7 +451,7 @@ namespace Etesian { DbU::Unit pitch = getPitch(); cmess1 << " - Building RoutingPads (transhierarchical) ..." << endl; - getCell()->flattenNets( Cell::BuildRings|Cell::NoClockFlatten ); + getCell()->flattenNets( Cell::Flags::BuildRings|Cell::Flags::NoClockFlatten ); // Coloquinte circuit description data-structures. size_t instancesNb = getCell()->getLeafInstanceOccurrences().getSize(); @@ -918,7 +918,7 @@ namespace Etesian { _placed = true; - getCell()->setFlags( Cell::Placed ); + getCell()->setFlags( Cell::Flags::Placed ); } diff --git a/hurricane/src/hurricane/CMakeLists.txt b/hurricane/src/hurricane/CMakeLists.txt index 654de379..abb9a7c2 100644 --- a/hurricane/src/hurricane/CMakeLists.txt +++ b/hurricane/src/hurricane/CMakeLists.txt @@ -3,6 +3,7 @@ ${Boost_INCLUDE_DIRS} ) set ( includes hurricane/Mask.h + hurricane/Flags.h hurricane/DebugSession.h hurricane/Backtrace.h hurricane/Observer.h @@ -93,6 +94,7 @@ set ( cpps Record.cpp Slot.cpp Commons.cpp + Flags.cpp Backtrace.cpp Exception.cpp Bug.cpp diff --git a/hurricane/src/hurricane/Cell.cpp b/hurricane/src/hurricane/Cell.cpp index f498197f..a831f98d 100644 --- a/hurricane/src/hurricane/Cell.cpp +++ b/hurricane/src/hurricane/Cell.cpp @@ -165,14 +165,11 @@ Cell::Cell(Library* library, const Name& name) //_viewSet(), _abutmentBox(), _boundingBox(), - _isTerminal(true), - _isFlattenLeaf(false), - _isPad(false), _nextOfLibraryCellMap(NULL), _nextOfSymbolCellSet(NULL), _slaveEntityMap(), _observers(), - _flags(0) + _flags(Flags::Terminal) { if (!_library) throw Error("Can't create " + _TName("Cell") + " : null library"); @@ -282,7 +279,7 @@ void Cell::setAbutmentBox(const Box& abutmentBox) DeepNet* Cell::getDeepNet ( Path path, const Net* leafNet ) const // ************************************************************** { - if (not (_flags & FlattenedNets)) return NULL; + if (not (_flags.isset(Flags::FlattenedNets))) return NULL; Occurrence rootNetOccurrence ( getHyperNetRootNetOccurrence(Occurrence(leafNet,path)) ); @@ -305,7 +302,7 @@ void Cell::flattenNets(unsigned int flags) UpdateSession::open(); - _flags |= FlattenedNets; + _flags |= Flags::FlattenedNets; vector hyperNets; vector topHyperNets; @@ -313,7 +310,7 @@ void Cell::flattenNets(unsigned int flags) forEach ( Occurrence, ioccurrence, getHyperNetRootNetOccurrences() ) { Net* net = static_cast((*ioccurrence).getEntity()); - if (net->isClock() and (flags & NoClockFlatten)) continue; + if (net->isClock() and (flags & Flags::NoClockFlatten)) continue; HyperNet hyperNet ( *ioccurrence ); if ( not (*ioccurrence).getPath().isEmpty() ) { @@ -353,10 +350,10 @@ void Cell::flattenNets(unsigned int flags) bool buildRing = false; if (net->isGlobal()) { - if ( (flags & Cell::BuildClockRings ) and net->isClock () ) buildRing = true; - else if ( (flags & Cell::BuildSupplyRings) and net->isSupply() ) buildRing = true; + if ( (flags & Cell::Flags::BuildClockRings ) and net->isClock () ) buildRing = true; + else if ( (flags & Cell::Flags::BuildSupplyRings) and net->isSupply() ) buildRing = true; } else { - buildRing = flags & Cell::BuildRings; + buildRing = flags & Cell::Flags::BuildRings; } forEach ( Component*, icomponent, net->getComponents() ) { @@ -375,7 +372,7 @@ void Cell::flattenNets(unsigned int flags) currentRp = RoutingPad::create( net, *iplugOccurrence, RoutingPad::BiggestArea ); currentRp->materialize(); - if (flags & WarnOnUnplacedInstances) + if (flags & Flags::WarnOnUnplacedInstances) currentRp->isPlacedOccurrence( RoutingPad::ShowWarning ); if (buildRing) { @@ -439,17 +436,17 @@ Cell* Cell::getClone() clone->setPad ( isPad () ); clone->setAbutmentBox( getAbutmentBox() ); - forEach( Net*, inet, getNets() ) { - if (dynamic_cast(*inet)) continue; + for ( Net* inet : getNets() ) { + if (dynamic_cast(inet)) continue; inet->getClone( clone ); } bool isPlaced = true; - forEach( Instance*, iinstance, getInstances() ) { + for ( Instance* iinstance : getInstances() ) { if (iinstance->getClone(clone)->getPlacementStatus() == Instance::PlacementStatus::UNPLACED) isPlaced = false; } - if (isPlaced) clone->setFlags( Placed ); + if (isPlaced) clone->setFlags( Flags::Placed ); UpdateSession::close(); @@ -463,13 +460,13 @@ void Cell::uniquify(unsigned int depth) vector toUniquify; set masterCells; - forEach ( Instance*, iinstance, getInstances() ) { + for ( Instance* iinstance : getInstances() ) { Cell* masterCell = iinstance->getMasterCell(); if (masterCell->isTerminal()) continue; masterCells.insert( masterCell ); if (masterCell->getSlaveInstances().getSize() > 1) { - toUniquify.push_back( *iinstance ); + toUniquify.push_back( iinstance ); } } @@ -549,21 +546,20 @@ Record* Cell::_getRecord() const { Record* record = Inherit::_getRecord(); if (record) { - record->add(getSlot("_library", _library)); - record->add(getSlot("_name", &_name)); - record->add(getSlot("_instances", &_instanceMap)); - record->add(getSlot("_quadTree", &_quadTree)); - record->add(getSlot("_slaveInstances", &_slaveInstanceSet)); - record->add(getSlot("_netMap", &_netMap)); - record->add(getSlot("_netAliasSet", &_netAliasSet)); - record->add(getSlot("_pinMap", &_pinMap)); - record->add(getSlot("_sliceMap", &_sliceMap)); - record->add(getSlot("_markerSet", &_markerSet)); - record->add(getSlot("_slaveEntityMap", &_slaveEntityMap)); - record->add(getSlot("_abutmentBox", &_abutmentBox)); - record->add(getSlot("_boundingBox", &_boundingBox)); - record->add(getSlot("_isTerminal", &_isTerminal)); - record->add(getSlot("_isFlattenLeaf", &_isFlattenLeaf)); + record->add( getSlot("_library" , _library ) ); + record->add( getSlot("_name" , &_name ) ); + record->add( getSlot("_instances" , &_instanceMap ) ); + record->add( getSlot("_quadTree" , &_quadTree ) ); + record->add( getSlot("_slaveInstances", &_slaveInstanceSet) ); + record->add( getSlot("_netMap" , &_netMap ) ); + record->add( getSlot("_netAliasSet" , &_netAliasSet ) ); + record->add( getSlot("_pinMap" , &_pinMap ) ); + record->add( getSlot("_sliceMap" , &_sliceMap ) ); + record->add( getSlot("_markerSet" , &_markerSet ) ); + record->add( getSlot("_slaveEntityMap", &_slaveEntityMap ) ); + record->add( getSlot("_abutmentBox" , &_abutmentBox ) ); + record->add( getSlot("_boundingBox" , &_boundingBox ) ); + record->add( getSlot("_flags" , &_flags ) ); } return record; } @@ -575,9 +571,8 @@ void Cell::_fit(const Box& box) if (_boundingBox.isEmpty()) return; if (_boundingBox.contains(box)) return; _boundingBox.merge(box); - for_each_instance(instance, getSlaveInstances()) { - instance->getCell()->_fit(instance->getTransformation().getBox(box)); - end_for; + for ( Instance* iinstance : getSlaveInstances() ) { + iinstance->getCell()->_fit(iinstance->getTransformation().getBox(box)); } } @@ -588,9 +583,8 @@ void Cell::_unfit(const Box& box) if (_boundingBox.isEmpty()) return; if (!_boundingBox.isConstrainedBy(box)) return; _boundingBox.makeEmpty(); - for_each_instance(instance, getSlaveInstances()) { - instance->getCell()->_unfit(instance->getTransformation().getBox(box)); - end_for; + for ( Instance* iinstance : getSlaveInstances() ) { + iinstance->getCell()->_unfit(iinstance->getTransformation().getBox(box)); } } @@ -650,6 +644,58 @@ void Cell::notify(unsigned flags) _observers.notify(flags); } + +// **************************************************************************************************** +// Cell::Flags implementation +// **************************************************************************************************** + + Cell::Flags::Flags ( unsigned int flags) + : BaseFlags(flags) + { } + + + Cell::Flags::~Flags () + { } + + + string Cell::Flags::_getTypeName () const + { return _TName("Cell::Flags"); } + + + string Cell::Flags::_getString () const + { + if (not _flags) return ""; + + string s = "<"; + if (_flags & Pad) { + s += "Pad"; + } + if (_flags & Terminal) { + if (s.size() > 1) s += "|"; + s += "Terminal"; + } + if (_flags & FlattenLeaf) { + if (s.size() > 1) s += "|"; + s += "FlattenLeaf"; + } + if (_flags & FlattenedNets) { + if (s.size() > 1) s += "|"; + s += "FlattenedNets"; + } + if (_flags & Placed) { + if (s.size() > 1) s += "|"; + s += "Placed"; + } + if (_flags & Routed) { + if (s.size() > 1) s += "|"; + s += "Routed"; + } + s += ">"; + + return s; + } + + // **************************************************************************************************** // Cell::ClonedSet implementation // **************************************************************************************************** diff --git a/hurricane/src/hurricane/DeepNet.cpp b/hurricane/src/hurricane/DeepNet.cpp index d2003026..7a2f5f4f 100644 --- a/hurricane/src/hurricane/DeepNet.cpp +++ b/hurricane/src/hurricane/DeepNet.cpp @@ -89,17 +89,17 @@ namespace Hurricane { nbRoutingPads++; currentRp = RoutingPad::create( this, *ioccurrence, RoutingPad::BiggestArea ); - if (flags & Cell::WarnOnUnplacedInstances) + if (flags & Cell::Flags::WarnOnUnplacedInstances) currentRp->isPlacedOccurrence ( RoutingPad::ShowWarning ); if (nbRoutingPads == 1) { Net* net = currentRp->getNet(); if (net->isGlobal()) { - if ( (flags & Cell::BuildClockRings ) and net->isClock () ) buildRing = true; - else if ( (flags & Cell::BuildSupplyRings) and net->isSupply() ) buildRing = true; + if ( (flags & Cell::Flags::BuildClockRings ) and net->isClock () ) buildRing = true; + else if ( (flags & Cell::Flags::BuildSupplyRings) and net->isSupply() ) buildRing = true; } else { - buildRing = flags & Cell::BuildRings; + buildRing = flags & Cell::Flags::BuildRings; } //cerr << "_createRoutingPads on " << net->getName() << " buildRing:" << buildRing << endl; diff --git a/hurricane/src/hurricane/Flags.cpp b/hurricane/src/hurricane/Flags.cpp new file mode 100644 index 00000000..a81928e9 --- /dev/null +++ b/hurricane/src/hurricane/Flags.cpp @@ -0,0 +1,59 @@ +// -*- C++ -*- +// +// Copyright (c) BULL S.A. 2000-2015, All Rights Reserved +// +// This file is part of Hurricane. +// +// Hurricane is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// Hurricane is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- +// TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU +// General Public License for more details. +// +// You should have received a copy of the Lesser GNU General Public +// License along with Hurricane. If not, see +// . +// +// +-----------------------------------------------------------------+ +// | 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 : "./BaseFlags.cpp" | +// +-----------------------------------------------------------------+ + + +#include +#include +#include "hurricane/Flags.h" + + +namespace Hurricane { + + + BaseFlags::~BaseFlags () + { } + + + string BaseFlags::_getTypeName () const + { return "Flags"; } + + + string BaseFlags::_getString () const + { + static size_t width = sizeof(unsigned int) * CHAR_BIT; + + std::ostringstream formatted; + formatted << "0x" << std::hex << std::setw(width) << std::setfill('0') << _flags; + return formatted.str(); + } + + + +} // Hurricane namespace. diff --git a/hurricane/src/hurricane/UpdateSession.cpp b/hurricane/src/hurricane/UpdateSession.cpp index 58356709..e931ab06 100644 --- a/hurricane/src/hurricane/UpdateSession.cpp +++ b/hurricane/src/hurricane/UpdateSession.cpp @@ -105,7 +105,7 @@ void UpdateSession::_destroy() // They also should be sorted according to their hierarchical depth and // revalidated bottom-up (TODO). for ( auto icell : changedCells ) { - icell->notify( Cell::CellChanged ); + icell->notify( Cell::Flags::CellChanged ); } Inherit::_preDestroy(); @@ -179,7 +179,7 @@ void UpdateSession::onNotOwned() // Put the cell in the UpdateSession relation, but *do not* unmaterialize it. //cerr << "Notify Cell::CellAboutToChange to: " << getCell() << endl; getCell()->put ( UPDATOR_STACK->top() ); - getCell()->notify( Cell::CellAboutToChange ); + getCell()->notify( Cell::Flags::CellAboutToChange ); forEach( Instance*, iinstance, getCell()->getSlaveInstances() ) { iinstance->invalidate( false ); } diff --git a/hurricane/src/hurricane/hurricane/Cell.h b/hurricane/src/hurricane/hurricane/Cell.h index bd88435d..4afc0713 100644 --- a/hurricane/src/hurricane/hurricane/Cell.h +++ b/hurricane/src/hurricane/hurricane/Cell.h @@ -21,6 +21,7 @@ #define HURRICANE_CELL_H #include +#include "hurricane/Flags.h" #include "hurricane/Observer.h" #include "hurricane/Relation.h" #include "hurricane/Pathes.h" @@ -68,22 +69,36 @@ class Cell : public Entity { // Types // ***** - public: enum Flag { BuildRings = 0x0001 - , BuildClockRings = 0x0002 - , BuildSupplyRings = 0x0004 - , NoClockFlatten = 0x0008 - , WarnOnUnplacedInstances = 0x0010 - // Flags set for Observers. - , CellAboutToChange = 0x0001 - , CellChanged = 0x0002 - // Cell states - , FlattenedNets = 0x0001 - , Placed = 0x0002 - , Routed = 0x0004 - }; public: typedef Entity Inherit; public: typedef map ExtensionSliceMap; + public: class Flags : public BaseFlags { + public: + enum Flag { NoFlags = 0x00000000 + , BuildRings = 0x00000001 + , BuildClockRings = 0x00000002 + , BuildSupplyRings = 0x00000004 + , NoClockFlatten = 0x00000008 + , WarnOnUnplacedInstances = 0x00000010 + // Flags set for Observers. + , CellAboutToChange = 0x00000100 + , CellChanged = 0x00000200 + // Cell states + , Terminal = 0x00001000 + , FlattenLeaf = 0x00002000 + , Pad = 0x00004000 + , FlattenedNets = 0x00008000 + , Placed = 0x00010000 + , Routed = 0x00020000 + }; + + public: + Flags ( unsigned int flags = NoFlags ); + virtual ~Flags (); + virtual std::string _getTypeName () const; + virtual std::string _getString () const; + }; + class UniquifyRelation : public Relation { public: static UniquifyRelation* create ( Cell* ); @@ -225,15 +240,12 @@ class Cell : public Entity { private: MarkerSet _markerSet; private: Box _abutmentBox; private: Box _boundingBox; - private: bool _isTerminal; - private: bool _isFlattenLeaf; - private: bool _isPad; private: Cell* _nextOfLibraryCellMap; private: Cell* _nextOfSymbolCellSet; private: SlaveEntityMap _slaveEntityMap; private: AliasNameSet _netAliasSet; private: Observable _observers; - private: unsigned int _flags; + private: Flags _flags; // Constructors // ************ @@ -250,6 +262,9 @@ class Cell : public Entity { public: virtual string _getTypeName() const {return _TName("Cell");}; public: virtual string _getString() const; public: virtual Record* _getRecord() const; + public: static string getFlagString( unsigned int ); + public: static Record* getFlagRecord( unsigned int ); + public: static Slot* getFlagSlot( unsigned int ); public: InstanceMap& _getInstanceMap() {return _instanceMap;}; public: QuadTree* _getQuadTree() {return &_quadTree;}; @@ -360,13 +375,13 @@ class Cell : public Entity { // ********** public: bool isCalledBy(Cell* cell) const; - public: bool isTerminal() const {return _isTerminal;}; - public: bool isFlattenLeaf() const {return _isFlattenLeaf;}; + public: bool isTerminal() const {return _flags.isset(Flags::Terminal);}; + public: bool isFlattenLeaf() const {return _flags.isset(Flags::FlattenLeaf);}; public: bool isLeaf() const; - public: bool isPad() const {return _isPad;}; - public: bool isFlattenedNets() const {return _flags & FlattenedNets;}; - public: bool isPlaced() const {return _flags & Placed;}; - public: bool isRouted() const {return _flags & Routed;}; + public: bool isPad() const {return _flags.isset(Flags::Pad);}; + public: bool isFlattenedNets() const {return _flags.isset(Flags::FlattenedNets);}; + public: bool isPlaced() const {return _flags.isset(Flags::Placed);}; + public: bool isRouted() const {return _flags.isset(Flags::Routed);}; public: bool isNetAlias(const Name& name) const; // Updators @@ -374,10 +389,10 @@ class Cell : public Entity { public: void setName(const Name& name); public: void setAbutmentBox(const Box& abutmentBox); - public: void setTerminal(bool isTerminal) {_isTerminal = isTerminal;}; - public: void setFlattenLeaf(bool isFlattenLeaf) {_isFlattenLeaf = isFlattenLeaf;}; - public: void setPad(bool isPad) {_isPad = isPad;}; - public: void flattenNets(unsigned int flags=BuildRings); + public: void setTerminal(bool isTerminal) {_flags.set(Flags::Terminal,isTerminal);}; + public: void setFlattenLeaf(bool isFlattenLeaf) {_flags.set(Flags::FlattenLeaf,isFlattenLeaf);}; + public: void setPad(bool isPad) {_flags.set(Flags::Pad,isPad);}; + public: void flattenNets(unsigned int flags=Flags::BuildRings); public: void setFlags(unsigned int flags) { _flags |= flags; } public: void resetFlags(unsigned int flags) { _flags &= ~flags; } public: void materialize(); @@ -411,6 +426,7 @@ inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other ) INSPECTOR_P_SUPPORT(Hurricane::Cell); +INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags); INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap); INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet); INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap); diff --git a/hurricane/src/hurricane/hurricane/Collection.h b/hurricane/src/hurricane/hurricane/Collection.h index 58c30ea1..f1192376 100644 --- a/hurricane/src/hurricane/hurricane/Collection.h +++ b/hurricane/src/hurricane/hurricane/Collection.h @@ -195,24 +195,27 @@ template class Collection { return record; } - public: - class iterator{ - Locator* _locator; - - public: iterator(Locator* l) : _locator(l) {} - public: bool operator!=(iterator const & o) const { - bool invalidA = ( _locator == NULL) or not( _locator->isValid()); - bool invalidB = (o._locator == NULL) or not(o._locator->isValid()); - return invalidA != invalidB or (not invalidA and not invalidB and _locator != o._locator); - } - public: bool operator==(iterator const & o) const { return not(*this != o); } - public: iterator& operator++(){ _locator->progress(); return *this; } - public: Type operator*() { return _locator->getElement(); } + public: + class iterator { + public: + iterator ( Locator* l ) : _locator(l) {} + bool operator== ( const iterator& o) const { return not (*this != o); } + iterator& operator++ () { _locator->progress(); return *this; } + Type operator* () { return _locator->getElement(); } + bool operator!= ( const iterator& o ) const + { + bool invalidA = ( _locator == NULL) or not ( _locator->isValid()); + bool invalidB = (o._locator == NULL) or not (o._locator->isValid()); + return invalidA != invalidB or (not invalidA and not invalidB and _locator != o._locator); + } + private: + Locator* _locator; }; - public: iterator begin() { return iterator(getLocator()); } - public: iterator end() { return iterator(NULL); } - public: bool empty() { return begin() == end(); } + public: + iterator begin() { return iterator(getLocator()); } + iterator end() { return iterator(NULL); } + bool empty() { return begin() == end(); } }; diff --git a/hurricane/src/hurricane/hurricane/Flags.h b/hurricane/src/hurricane/hurricane/Flags.h new file mode 100644 index 00000000..d435fc5c --- /dev/null +++ b/hurricane/src/hurricane/hurricane/Flags.h @@ -0,0 +1,143 @@ +// -*- C++ -*- +// +// Copyright (c) BULL S.A. 2000-2015, All Rights Reserved +// +// This file is part of Hurricane. +// +// Hurricane is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// Hurricane is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN- +// TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU +// General Public License for more details. +// +// You should have received a copy of the Lesser GNU General Public +// License along with Hurricane. If not, see +// . +// +// +-----------------------------------------------------------------+ +// | 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 : "./hurricane/BaseFlags.h" | +// +-----------------------------------------------------------------+ + + +#ifndef HURRICANE_BASE_FLAGS_H +#define HURRICANE_BASE_FLAGS_H + +#include +#include "hurricane/Commons.h" + + +namespace Hurricane { + + + class BaseFlags { + public: + // Methods. + inline BaseFlags ( unsigned int flags=0 ); + virtual ~BaseFlags (); + inline bool zero () const; + inline BaseFlags& set ( BaseFlags, bool state=true ); + inline BaseFlags& reset ( BaseFlags ); + inline bool isset ( BaseFlags ) const; + inline bool contains ( BaseFlags ) const; + inline bool intersect ( BaseFlags ) const; + inline BaseFlags nthbit ( unsigned int ) const; + inline BaseFlags operator compl () const; + inline BaseFlags operator bitand ( BaseFlags ) const; + inline BaseFlags operator bitor ( BaseFlags ) const; + inline BaseFlags operator xor ( BaseFlags ) const; + inline BaseFlags operator bitand ( unsigned int ) const; + inline BaseFlags operator bitor ( unsigned int ) const; + inline BaseFlags operator xor ( unsigned int ) const; + inline BaseFlags lshift ( unsigned int ) const; + inline BaseFlags rshift ( unsigned int ) const; + inline BaseFlags& operator |= ( BaseFlags ); + inline BaseFlags& operator &= ( BaseFlags ); + inline bool operator == ( BaseFlags ) const; + inline bool operator != ( BaseFlags ) const; + inline bool operator < ( BaseFlags ) const; + inline bool operator > ( BaseFlags ) const; + inline BaseFlags& operator |= ( unsigned int ); + inline BaseFlags& operator &= ( unsigned int ); + inline bool operator == ( unsigned int ) const; + inline bool operator != ( unsigned int ) const; + inline bool operator < ( unsigned int ) const; + inline bool operator > ( unsigned int ) const; + inline operator unsigned int () const; + // Hurricane Managment. + virtual std::string _getTypeName () const; + virtual std::string _getString () const; + inline Record* _getRecord () const; + protected: + // Internal: Attributes. + unsigned int _flags; + }; + + +// Inline Functions. + inline BaseFlags::BaseFlags ( unsigned int flags ) : _flags(flags) { } + inline bool BaseFlags::zero () const { return _flags == 0; } + inline BaseFlags& BaseFlags::reset ( BaseFlags flags ) { _flags &= ~flags._flags; return *this; } + inline bool BaseFlags::isset ( BaseFlags flags ) const { return _flags & flags._flags; } + inline bool BaseFlags::contains ( BaseFlags flags ) const { return (_flags & flags._flags) && !(~_flags & flags._flags); } + inline bool BaseFlags::intersect ( BaseFlags flags ) const { return _flags & flags._flags; } + inline BaseFlags BaseFlags::operator compl () const { return ~_flags; } + inline BaseFlags BaseFlags::operator bitand ( BaseFlags flags ) const { return _flags & flags._flags; } + inline BaseFlags BaseFlags::operator bitor ( BaseFlags flags ) const { return _flags | flags._flags; } + inline BaseFlags BaseFlags::operator xor ( BaseFlags flags ) const { return _flags ^ flags._flags; } + inline BaseFlags BaseFlags::operator bitand ( unsigned int flags ) const { return _flags & flags; } + inline BaseFlags BaseFlags::operator bitor ( unsigned int flags ) const { return _flags | flags; } + inline BaseFlags BaseFlags::operator xor ( unsigned int flags ) const { return _flags ^ flags; } + inline BaseFlags BaseFlags::lshift ( unsigned int s ) const { return _flags << s; } + inline BaseFlags BaseFlags::rshift ( unsigned int s ) const { return _flags >> s; } + inline BaseFlags& BaseFlags::operator |= ( BaseFlags flags ) { _flags |= flags._flags; return *this; } + inline BaseFlags& BaseFlags::operator &= ( BaseFlags flags ) { _flags &= flags._flags; return *this; } + inline bool BaseFlags::operator == ( BaseFlags flags ) const { return _flags == flags._flags; } + inline bool BaseFlags::operator != ( BaseFlags flags ) const { return _flags != flags._flags; } + inline bool BaseFlags::operator < ( BaseFlags flags ) const { return _flags < flags._flags; } + inline bool BaseFlags::operator > ( BaseFlags flags ) const { return _flags > flags._flags; } + inline BaseFlags& BaseFlags::operator |= ( unsigned int flags ) { _flags |= flags; return *this; } + inline BaseFlags& BaseFlags::operator &= ( unsigned int flags ) { _flags &= flags; return *this; } + inline bool BaseFlags::operator == ( unsigned int flags ) const { return _flags == flags; } + inline bool BaseFlags::operator != ( unsigned int flags ) const { return _flags != flags; } + inline bool BaseFlags::operator < ( unsigned int flags ) const { return _flags < flags; } + inline bool BaseFlags::operator > ( unsigned int flags ) const { return _flags > flags; } + inline BaseFlags::operator unsigned int () const { return _flags; } + + inline BaseFlags& BaseFlags::set ( BaseFlags flags, bool state ) + { + if (state) _flags |= flags._flags; + else _flags &= ~flags._flags; + return *this; + } + + inline BaseFlags BaseFlags::nthbit ( unsigned int nth ) const + { + unsigned int select = 1; + for ( ; select ; select=select<<1 ) { + if ( _flags & select ) nth--; + if ( !nth ) break; + } + return select; + } + + inline Record* BaseFlags::_getRecord () const + { + Record* record = new Record ( _getString() ); + record->add( getSlot("_flags", &_flags) ); + return record; + } + + +} // Hurricane namespace. + +# endif // HURRICANE_BASE_FLAGS_H diff --git a/hurricane/src/hurricane/hurricane/Mask.h b/hurricane/src/hurricane/hurricane/Mask.h index 7e8608a4..b1f9690d 100644 --- a/hurricane/src/hurricane/hurricane/Mask.h +++ b/hurricane/src/hurricane/hurricane/Mask.h @@ -1,7 +1,6 @@ - // -*- C++ -*- // -// Copyright (c) BULL S.A. 2000-2009, All Rights Reserved +// Copyright (c) BULL S.A. 2000-2015, All Rights Reserved // // This file is part of Hurricane. // @@ -19,12 +18,7 @@ // License along with Hurricane. If not, see // . // -// =================================================================== -// -// $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 | // | | @@ -32,17 +26,14 @@ // | E-mail : Jean-Paul.Chaput@lip6.fr | // | =============================================================== | // | C++ Header : "./hurricane/Mask.h" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x +// +-----------------------------------------------------------------+ -#ifndef __HURRICANE_MASK__ -#define __HURRICANE_MASK__ +#ifndef HURRICANE_MASK_H +#define HURRICANE_MASK_H -#include -#include "hurricane/Commons.h" +#include +#include "hurricane/Commons.h" namespace Hurricane { @@ -198,7 +189,6 @@ namespace Hurricane { size_t Mask::_width = sizeof(IntType)<<2; -} // End of Hurricane namespace. +} // Hurricane namespace. - -# endif // __HURRICANE_MASK__ +# endif // HURRICANE_MASK_H diff --git a/hurricane/src/isobar/PyHurricane.cpp b/hurricane/src/isobar/PyHurricane.cpp index ce83ee09..fe134354 100644 --- a/hurricane/src/isobar/PyHurricane.cpp +++ b/hurricane/src/isobar/PyHurricane.cpp @@ -805,10 +805,10 @@ extern "C" { PyObject* dictionnary = PyModule_GetDict ( module ); - ConstructorError = PyErr_NewException ( "hurricane.ConstructorError", NULL, NULL ); - ProxyError = PyErr_NewException ( "hurricane.ProxyError" , NULL, NULL ); - HurricaneError = PyErr_NewException ( "hurricane.HurricaneError" , NULL, NULL ); - HurricaneWarning = PyErr_NewException ( "hurricane.HurricaneWarning", PyExc_Warning, NULL ); + ConstructorError = PyErr_NewException ( (char*)"hurricane.ConstructorError", NULL, NULL ); + ProxyError = PyErr_NewException ( (char*)"hurricane.ProxyError" , NULL, NULL ); + HurricaneError = PyErr_NewException ( (char*)"hurricane.HurricaneError" , NULL, NULL ); + HurricaneWarning = PyErr_NewException ( (char*)"hurricane.HurricaneWarning", PyExc_Warning, NULL ); PyDict_SetItemString ( dictionnary, "ConstructorError", ConstructorError ); PyDict_SetItemString ( dictionnary, "ProxyError" , ProxyError ); diff --git a/hurricane/src/isobar/PyNet.cpp b/hurricane/src/isobar/PyNet.cpp index ad84e4fe..921a7595 100644 --- a/hurricane/src/isobar/PyNet.cpp +++ b/hurricane/src/isobar/PyNet.cpp @@ -401,7 +401,7 @@ extern "C" { HTRY METHOD_HEAD ( "Net.addAlias()" ) - char* name; + char* name = NULL; if (PyArg_ParseTuple(args,"s:Net.addAlias",args,name)) { if (net->addAlias(Name(name))) Py_RETURN_TRUE; } else { @@ -425,7 +425,7 @@ extern "C" { HTRY METHOD_HEAD ( "Net.removeAlias()" ) - char* name; + char* name = NULL; if (PyArg_ParseTuple(args,"s:Net.removeAlias",args,name)) { if (net->removeAlias(Name(name))) Py_RETURN_TRUE; } else { diff --git a/hurricane/src/viewer/CellViewer.cpp b/hurricane/src/viewer/CellViewer.cpp index 0b54df09..226af418 100644 --- a/hurricane/src/viewer/CellViewer.cpp +++ b/hurricane/src/viewer/CellViewer.cpp @@ -61,11 +61,11 @@ namespace Hurricane { void CellObserver::notify ( unsigned int flags ) { CellViewer* viewer = getOwner(); - switch ( flags & (Cell::CellAboutToChange|Cell::CellChanged) ) { - case Cell::CellAboutToChange: + switch ( flags & (Cell::Flags::CellAboutToChange|Cell::Flags::CellChanged) ) { + case Cell::Flags::CellAboutToChange: viewer->emitCellAboutToChange(); break; - case Cell::CellChanged: + case Cell::Flags::CellChanged: viewer->emitCellChanged(); break; } @@ -692,8 +692,7 @@ namespace Hurricane { QAction* historyAction = qobject_cast ( sender() ); if ( historyAction ) { list< shared_ptr >::iterator istate = _cellHistory.begin(); - size_t index = historyAction->data().toUInt(); - + //size_t index = historyAction->data().toUInt(); //for ( ; index>0 ; index--, istate++ ) // cerr << "History: " << (*istate)->getName() << endl; emit stateChanged ( *istate ); diff --git a/hurricane/src/viewer/PyDisplayStyle.cpp b/hurricane/src/viewer/PyDisplayStyle.cpp index 744d29da..1fdcfdd6 100644 --- a/hurricane/src/viewer/PyDisplayStyle.cpp +++ b/hurricane/src/viewer/PyDisplayStyle.cpp @@ -270,15 +270,22 @@ extern "C" { HTRY METHOD_HEAD("DisplayStyle.addDrawingStyle()") - char* argGroupKey = "Not part of any group (error)"; - char* argKey = "No key defined (error)"; - char* argPattern = "FFFFFFFFFFFFFFFF"; - char* argColor = "255,255,255"; + char* argGroupKey = (char*)"Not part of any group (error)"; + char* argKey = (char*)"No key defined (error)"; + char* argPattern = (char*)"FFFFFFFFFFFFFFFF"; + char* argColor = (char*)"255,255,255"; int borderWidth = 0; float threshold = 1.0; PyObject* argGoMatched = NULL; - static char* keywords[] = { "group", "name", "color", "pattern", "border", "threshold", "goMatched", NULL }; + static char* keywords[] = { (char*)"group" + , (char*)"name" + , (char*)"color" + , (char*)"pattern" + , (char*)"border" + , (char*)"threshold" + , (char*)"goMatched" + , NULL }; if (PyArg_ParseTupleAndKeywords( args , kwArgs diff --git a/hurricane/src/viewer/PyDrawingGroup.cpp b/hurricane/src/viewer/PyDrawingGroup.cpp index 678e132e..3904e092 100644 --- a/hurricane/src/viewer/PyDrawingGroup.cpp +++ b/hurricane/src/viewer/PyDrawingGroup.cpp @@ -102,14 +102,20 @@ extern "C" { HTRY METHOD_HEAD("DrawingGroup.addDrawingStyle()") - char* argKey = "No key defined (error)"; - char* argPattern = "FFFFFFFFFFFFFFFF"; - char* argColor = "255,255,255"; + char* argKey = (char*)"No key defined (error)"; + char* argPattern = (char*)"FFFFFFFFFFFFFFFF"; + char* argColor = (char*)"255,255,255"; int borderWidth = 0; float threshold = 1.0; - char* argGoMatched = "true"; + char* argGoMatched = (char*)"true"; - static char* keywords[] = { "name", "color", "pattern", "border", "threshold", "goMatched", NULL }; + static char* keywords[] = { (char*)"name" + , (char*)"color" + , (char*)"pattern" + , (char*)"border" + , (char*)"threshold" + , (char*)"goMatched" + , NULL }; if (PyArg_ParseTupleAndKeywords( args , kwArgs diff --git a/kite/src/KiteEngine.cpp b/kite/src/KiteEngine.cpp index a691f1ec..6b69c312 100644 --- a/kite/src/KiteEngine.cpp +++ b/kite/src/KiteEngine.cpp @@ -316,8 +316,8 @@ namespace Kite { Cell* cell = getCell(); //Box cellBb = cell->getBoundingBox(); if (not _knik) { - unsigned int flags = Cell::WarnOnUnplacedInstances; - flags |= (mode & KtBuildGlobalRouting) ? Cell::BuildRings : 0; + unsigned int flags = Cell::Flags::WarnOnUnplacedInstances; + flags |= (mode & KtBuildGlobalRouting) ? Cell::Flags::BuildRings : 0; //if (not cell->isFlattenedNets()) cell->flattenNets( flags ); cell->flattenNets( flags ); @@ -419,7 +419,7 @@ namespace Kite { { cmess1 << " o Back annotate global routing graph." << endl; - const Torus& chipCorona = getChipTools().getCorona(); + //const Torus& chipCorona = getChipTools().getCorona(); int hEdgeCapacity = 0; int vEdgeCapacity = 0; @@ -459,7 +459,7 @@ namespace Kite { continue; } - Box elementBb = element->getBoundingBox(); + //Box elementBb = element->getBoundingBox(); //int elementCapacity = (chipCorona.contains(elementBb)) ? -hEdgeCapacity : -1; int elementCapacity = -1; @@ -497,7 +497,7 @@ namespace Kite { continue; } - Box elementBb = element->getBoundingBox(); + //Box elementBb = element->getBoundingBox(); //int elementCapacity = (chipCorona.contains(elementBb)) ? -vEdgeCapacity : -1; int elementCapacity = -1; @@ -817,7 +817,7 @@ namespace Kite { KatabaticEngine::finalizeLayout(); ltrace(90) << "State: " << getState() << endl; - getCell()->setFlags( Cell::Routed ); + getCell()->setFlags( Cell::Flags::Routed ); ltraceout(90); } diff --git a/kite/src/RoutingEvent.cpp b/kite/src/RoutingEvent.cpp index e09fc8b3..74f54c79 100644 --- a/kite/src/RoutingEvent.cpp +++ b/kite/src/RoutingEvent.cpp @@ -412,7 +412,7 @@ namespace Kite { ltrace(149) << "Level: " << getEventLevel() << ", area: " << _segment->getFreedomDegree() << endl; - _preCheck( _segment ); + //_preCheck( _segment ); _eventLevel = 0; history.push( this ); diff --git a/kite/src/kite/RoutingEvent.h b/kite/src/kite/RoutingEvent.h index c1b42b2d..43ce7166 100644 --- a/kite/src/kite/RoutingEvent.h +++ b/kite/src/kite/RoutingEvent.h @@ -247,7 +247,7 @@ namespace Kite { # if !defined(NDEBUG) # define _preCheck(segment) \ - DbU::Unit beforeMin = segment->base()->getSourcePosition(); \ + DbU::Unit beforeMin = segment->base()->getSourcePosition(); \ DbU::Unit beforeMax = segment->base()->getTargetPosition(); \ segment->base()->checkPositions (); \ if ( Session::getSegmentStackSize() ) \ diff --git a/knik/src/GraphicKnikEngine.cpp b/knik/src/GraphicKnikEngine.cpp index 7f4ec74c..16e9c3df 100644 --- a/knik/src/GraphicKnikEngine.cpp +++ b/knik/src/GraphicKnikEngine.cpp @@ -154,7 +154,7 @@ namespace Knik { KnikEngine* knik = KnikEngine::get ( cell ); if ( !knik ) { if ( cell->getRubbers().getFirst() == NULL ) - cell->flattenNets ( ((mode==BuildSolution)?Cell::BuildRings:0) ); + cell->flattenNets ( ((mode==BuildSolution)?Cell::Flags::BuildRings:0) ); knik = KnikEngine::create ( cell , _congestion , _preCongestion @@ -178,7 +178,7 @@ namespace Knik { //emit cellPreModificated(); - cell->flattenNets ( Cell::BuildRings ); + cell->flattenNets ( Cell::Flags::BuildRings ); //emit cellPostModificated(); } diff --git a/knik/src/flute-3.1/src/flute.cpp b/knik/src/flute-3.1/src/flute.cpp index 6e448358..d29127aa 100644 --- a/knik/src/flute-3.1/src/flute.cpp +++ b/knik/src/flute-3.1/src/flute.cpp @@ -159,7 +159,7 @@ DTYPE flute_wl(int d, DTYPE x[], DTYPE y[], int acc) { DTYPE xs[MAXD], ys[MAXD], minval, l, xu, xl, yu, yl; int s[MAXD]; - int i, j, k, minidx; + int i, j, minidx; struct point pt[MAXD], *ptp[MAXD], *tmpp; if (d==2) @@ -206,17 +206,20 @@ DTYPE flute_wl(int d, DTYPE x[], DTYPE y[], int acc) } #if REMOVE_DUPLICATE_PIN==1 - ptp[d] = &pt[d]; - ptp[d]->x = ptp[d]->y = -999999; - j = 0; - for (i=0; ix == ptp[i]->x; k++) - if (ptp[k]->y == ptp[i]->y) // pins k and i are the same - break; - if (ptp[k]->x != ptp[i]->x) - ptp[j++] = ptp[i]; + { + int k; + ptp[d] = &pt[d]; + ptp[d]->x = ptp[d]->y = -999999; + j = 0; + for (i=0; ix == ptp[i]->x; k++) + if (ptp[k]->y == ptp[i]->y) // pins k and i are the same + break; + if (ptp[k]->x != ptp[i]->x) + ptp[j++] = ptp[i]; + } + d = j; } - d = j; #endif for (i=0; ix = ptp[d]->y = -999999; - j = 0; - for (i=0; ix == ptp[i]->x; k++) - if (ptp[k]->y == ptp[i]->y) // pins k and i are the same - break; - if (ptp[k]->x != ptp[i]->x) - ptp[j++] = ptp[i]; + { + int k; + ptp[d] = &pt[d]; + ptp[d]->x = ptp[d]->y = -999999; + j = 0; + for (i=0; ix == ptp[i]->x; k++) + if (ptp[k]->y == ptp[i]->y) // pins k and i are the same + break; + if (ptp[k]->x != ptp[i]->x) + ptp[j++] = ptp[i]; + } + d = j; } - d = j; #endif for (i=0; i