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 <unsigned int>. 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...
This commit is contained in:
parent
701487247d
commit
e2fcfcb699
|
@ -227,7 +227,7 @@ namespace CRL {
|
||||||
remove( relation );
|
remove( relation );
|
||||||
}
|
}
|
||||||
DBo::_preDestroy();
|
DBo::_preDestroy();
|
||||||
_cell->notify( Cell::CellChanged );
|
_cell->notify( Cell::Flags::CellChanged );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -446,10 +446,10 @@ namespace CRL {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool systemConfFound = false;
|
//bool systemConfFound = false;
|
||||||
Utilities::Path systemConfFile = pythonSitePackages / "crlcore" / "coriolisInit.py";
|
Utilities::Path systemConfFile = pythonSitePackages / "crlcore" / "coriolisInit.py";
|
||||||
if ( systemConfFile.exists() ) {
|
if ( systemConfFile.exists() ) {
|
||||||
systemConfFound = true;
|
//systemConfFound = true;
|
||||||
//cout << " o Reading python dot configuration:" << endl;
|
//cout << " o Reading python dot configuration:" << endl;
|
||||||
//cout << " - <" << systemConfFile.string() << ">." << endl;
|
//cout << " - <" << systemConfFile.string() << ">." << endl;
|
||||||
|
|
||||||
|
@ -461,18 +461,18 @@ namespace CRL {
|
||||||
,systemConfFile.toString().c_str()) << endl;
|
,systemConfFile.toString().c_str()) << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool homeConfFound = false;
|
//bool homeConfFound = false;
|
||||||
Utilities::Path homeConfFile = getPath("home");
|
Utilities::Path homeConfFile = getPath("home");
|
||||||
homeConfFile /= ".coriolis2.configuration.xml";
|
homeConfFile /= ".coriolis2.configuration.xml";
|
||||||
if ( homeConfFile.exists() ) {
|
if ( homeConfFile.exists() ) {
|
||||||
homeConfFound = true;
|
//homeConfFound = true;
|
||||||
conf->readFromFile ( homeConfFile.toString() );
|
conf->readFromFile ( homeConfFile.toString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dotConfFound = false;
|
//bool dotConfFound = false;
|
||||||
Utilities::Path dotConfFile = "./.coriolis2.configuration.xml";
|
Utilities::Path dotConfFile = "./.coriolis2.configuration.xml";
|
||||||
if ( dotConfFile.exists() ) {
|
if ( dotConfFile.exists() ) {
|
||||||
dotConfFound = true;
|
//dotConfFound = true;
|
||||||
conf->readFromFile ( dotConfFile.toString() );
|
conf->readFromFile ( dotConfFile.toString() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -846,7 +846,7 @@ namespace {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isPlaced) _cell->setFlags( Cell::Placed );
|
if (isPlaced) _cell->setFlags( Cell::Flags::Placed );
|
||||||
|
|
||||||
fileStream.close ();
|
fileStream.close ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,14 @@ namespace Vst {
|
||||||
void checkForIeee ( bool ieeeEnabled );
|
void checkForIeee ( bool ieeeEnabled );
|
||||||
|
|
||||||
|
|
||||||
|
enum TokenConstants { VhdlTo = 1
|
||||||
|
, VhdlDownto = 2
|
||||||
|
, VhdlPlus = 3
|
||||||
|
, VhdlMinus = 4
|
||||||
|
, VhdlBus = 5
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class Constraint {
|
class Constraint {
|
||||||
private:
|
private:
|
||||||
int _from;
|
int _from;
|
||||||
|
@ -81,7 +89,7 @@ namespace Vst {
|
||||||
int getFrom () const { return _from; }
|
int getFrom () const { return _from; }
|
||||||
int getTo () const { return _to; }
|
int getTo () const { return _to; }
|
||||||
bool IsSet () const { return _set; }
|
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 UnSet () { _set = false; }
|
||||||
void Init ( int& index ) { index = _from; };
|
void Init ( int& index ) { index = _from; };
|
||||||
void Next ( int& index );
|
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;
|
_set = true;
|
||||||
_from = from;
|
_from = from;
|
||||||
|
@ -117,8 +125,6 @@ namespace Vst {
|
||||||
typedef map<Cell*,VectorMap> CellVectorMap;
|
typedef map<Cell*,VectorMap> CellVectorMap;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class YaccState {
|
class YaccState {
|
||||||
public:
|
public:
|
||||||
string _vhdFileName;
|
string _vhdFileName;
|
||||||
|
@ -210,9 +216,9 @@ namespace Vst {
|
||||||
%token RightParen
|
%token RightParen
|
||||||
%token DoubleStar
|
%token DoubleStar
|
||||||
%token Star
|
%token Star
|
||||||
%token Plus
|
%token <_flag> Plus
|
||||||
%token Comma
|
%token Comma
|
||||||
%token Minus
|
%token <_flag> Minus
|
||||||
%token VarAsgn
|
%token VarAsgn
|
||||||
%token Colon
|
%token Colon
|
||||||
%token Semicolon
|
%token Semicolon
|
||||||
|
@ -261,7 +267,7 @@ namespace Vst {
|
||||||
%token CONSTANT
|
%token CONSTANT
|
||||||
%token CONVERT
|
%token CONVERT
|
||||||
%token DISCONNECT
|
%token DISCONNECT
|
||||||
%token DOWNTO
|
%token <_value> DOWNTO
|
||||||
%token ELSE
|
%token ELSE
|
||||||
%token ELSIF
|
%token ELSIF
|
||||||
%token _END
|
%token _END
|
||||||
|
@ -324,7 +330,7 @@ namespace Vst {
|
||||||
%token STRING
|
%token STRING
|
||||||
%token SUBTYPE
|
%token SUBTYPE
|
||||||
%token THEN
|
%token THEN
|
||||||
%token TO
|
%token <_value> TO
|
||||||
%token TRANSPORT
|
%token TRANSPORT
|
||||||
%token _TYPE
|
%token _TYPE
|
||||||
%token UNITS
|
%token UNITS
|
||||||
|
@ -506,8 +512,8 @@ range
|
||||||
;
|
;
|
||||||
|
|
||||||
direction
|
direction
|
||||||
: TO
|
: TO { $$ = Vst::VhdlTo; }
|
||||||
| DOWNTO
|
| DOWNTO { $$ = Vst::VhdlDownto; }
|
||||||
;
|
;
|
||||||
|
|
||||||
.port_clause.
|
.port_clause.
|
||||||
|
@ -858,9 +864,9 @@ generic_simple_expression
|
||||||
;
|
;
|
||||||
|
|
||||||
.sign.
|
.sign.
|
||||||
: /*empty*/
|
: /*empty*/ { $$ = (char)0; }
|
||||||
| Plus
|
| Plus { $$ = (char)Vst::VhdlPlus; }
|
||||||
| Minus
|
| Minus { $$ = (char)Vst::VhdlMinus; }
|
||||||
;
|
;
|
||||||
|
|
||||||
generic_term
|
generic_term
|
||||||
|
@ -1092,20 +1098,20 @@ factor
|
||||||
primary
|
primary
|
||||||
: aggregate
|
: aggregate
|
||||||
| type_convertion
|
| type_convertion
|
||||||
| name
|
| name { $$ = $1; }
|
||||||
;
|
;
|
||||||
|
|
||||||
aggregate
|
aggregate
|
||||||
: LeftParen
|
: LeftParen
|
||||||
expression
|
expression
|
||||||
RightParen_ERR
|
RightParen_ERR { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
type_convertion
|
type_convertion
|
||||||
: CONVERT
|
: CONVERT
|
||||||
LeftParen
|
LeftParen
|
||||||
expression
|
expression
|
||||||
RightParen_ERR
|
RightParen_ERR { $$ = $3; }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1149,8 +1155,8 @@ type_mark
|
||||||
;
|
;
|
||||||
|
|
||||||
.BUS.
|
.BUS.
|
||||||
: /*empty*/
|
: /*empty*/ { $$ = 0; }
|
||||||
| BUS
|
| BUS { $$ = Vst::VhdlBus; }
|
||||||
;
|
;
|
||||||
|
|
||||||
identifier_list
|
identifier_list
|
||||||
|
|
|
@ -63,14 +63,20 @@ extern "C" {
|
||||||
|
|
||||||
HTRY
|
HTRY
|
||||||
if ( pyBanner ) {
|
if ( pyBanner ) {
|
||||||
char* name = "";
|
char* name = (char*)"";
|
||||||
char* version = "";
|
char* version = (char*)"";
|
||||||
char* purpose = "";
|
char* purpose = (char*)"";
|
||||||
char* date = "";
|
char* date = (char*)"";
|
||||||
char* authors = "";
|
char* authors = (char*)"";
|
||||||
char* contributors = "";
|
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
|
if (PyArg_ParseTupleAndKeywords( args
|
||||||
, kwArgs
|
, kwArgs
|
||||||
|
|
|
@ -74,7 +74,7 @@ extern "C" {
|
||||||
char* libName = NULL;
|
char* libName = NULL;
|
||||||
int addMode = Environment::Append;
|
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
|
if (PyArg_ParseTupleAndKeywords( args
|
||||||
, kwArgs
|
, kwArgs
|
||||||
|
|
|
@ -52,7 +52,7 @@ extern "C" {
|
||||||
PyObject* pyCell = NULL;
|
PyObject* pyCell = NULL;
|
||||||
char* name = NULL;
|
char* name = NULL;
|
||||||
|
|
||||||
static char* keywords[] = { "cell", "name", NULL };
|
static char* keywords[] = { (char*)"cell", (char*)"name", NULL };
|
||||||
|
|
||||||
if (PyArg_ParseTupleAndKeywords( args
|
if (PyArg_ParseTupleAndKeywords( args
|
||||||
, kwArgs
|
, kwArgs
|
||||||
|
|
|
@ -451,7 +451,7 @@ namespace Etesian {
|
||||||
DbU::Unit pitch = getPitch();
|
DbU::Unit pitch = getPitch();
|
||||||
|
|
||||||
cmess1 << " - Building RoutingPads (transhierarchical) ..." << endl;
|
cmess1 << " - Building RoutingPads (transhierarchical) ..." << endl;
|
||||||
getCell()->flattenNets( Cell::BuildRings|Cell::NoClockFlatten );
|
getCell()->flattenNets( Cell::Flags::BuildRings|Cell::Flags::NoClockFlatten );
|
||||||
|
|
||||||
// Coloquinte circuit description data-structures.
|
// Coloquinte circuit description data-structures.
|
||||||
size_t instancesNb = getCell()->getLeafInstanceOccurrences().getSize();
|
size_t instancesNb = getCell()->getLeafInstanceOccurrences().getSize();
|
||||||
|
@ -918,7 +918,7 @@ namespace Etesian {
|
||||||
|
|
||||||
_placed = true;
|
_placed = true;
|
||||||
|
|
||||||
getCell()->setFlags( Cell::Placed );
|
getCell()->setFlags( Cell::Flags::Placed );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
${Boost_INCLUDE_DIRS}
|
${Boost_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
set ( includes hurricane/Mask.h
|
set ( includes hurricane/Mask.h
|
||||||
|
hurricane/Flags.h
|
||||||
hurricane/DebugSession.h
|
hurricane/DebugSession.h
|
||||||
hurricane/Backtrace.h
|
hurricane/Backtrace.h
|
||||||
hurricane/Observer.h
|
hurricane/Observer.h
|
||||||
|
@ -93,6 +94,7 @@
|
||||||
set ( cpps Record.cpp
|
set ( cpps Record.cpp
|
||||||
Slot.cpp
|
Slot.cpp
|
||||||
Commons.cpp
|
Commons.cpp
|
||||||
|
Flags.cpp
|
||||||
Backtrace.cpp
|
Backtrace.cpp
|
||||||
Exception.cpp
|
Exception.cpp
|
||||||
Bug.cpp
|
Bug.cpp
|
||||||
|
|
|
@ -165,14 +165,11 @@ Cell::Cell(Library* library, const Name& name)
|
||||||
//_viewSet(),
|
//_viewSet(),
|
||||||
_abutmentBox(),
|
_abutmentBox(),
|
||||||
_boundingBox(),
|
_boundingBox(),
|
||||||
_isTerminal(true),
|
|
||||||
_isFlattenLeaf(false),
|
|
||||||
_isPad(false),
|
|
||||||
_nextOfLibraryCellMap(NULL),
|
_nextOfLibraryCellMap(NULL),
|
||||||
_nextOfSymbolCellSet(NULL),
|
_nextOfSymbolCellSet(NULL),
|
||||||
_slaveEntityMap(),
|
_slaveEntityMap(),
|
||||||
_observers(),
|
_observers(),
|
||||||
_flags(0)
|
_flags(Flags::Terminal)
|
||||||
{
|
{
|
||||||
if (!_library)
|
if (!_library)
|
||||||
throw Error("Can't create " + _TName("Cell") + " : null 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
|
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)) );
|
Occurrence rootNetOccurrence ( getHyperNetRootNetOccurrence(Occurrence(leafNet,path)) );
|
||||||
|
|
||||||
|
@ -305,7 +302,7 @@ void Cell::flattenNets(unsigned int flags)
|
||||||
|
|
||||||
UpdateSession::open();
|
UpdateSession::open();
|
||||||
|
|
||||||
_flags |= FlattenedNets;
|
_flags |= Flags::FlattenedNets;
|
||||||
|
|
||||||
vector<HyperNet> hyperNets;
|
vector<HyperNet> hyperNets;
|
||||||
vector<HyperNet> topHyperNets;
|
vector<HyperNet> topHyperNets;
|
||||||
|
@ -313,7 +310,7 @@ void Cell::flattenNets(unsigned int flags)
|
||||||
forEach ( Occurrence, ioccurrence, getHyperNetRootNetOccurrences() ) {
|
forEach ( Occurrence, ioccurrence, getHyperNetRootNetOccurrences() ) {
|
||||||
Net* net = static_cast<Net*>((*ioccurrence).getEntity());
|
Net* net = static_cast<Net*>((*ioccurrence).getEntity());
|
||||||
|
|
||||||
if (net->isClock() and (flags & NoClockFlatten)) continue;
|
if (net->isClock() and (flags & Flags::NoClockFlatten)) continue;
|
||||||
|
|
||||||
HyperNet hyperNet ( *ioccurrence );
|
HyperNet hyperNet ( *ioccurrence );
|
||||||
if ( not (*ioccurrence).getPath().isEmpty() ) {
|
if ( not (*ioccurrence).getPath().isEmpty() ) {
|
||||||
|
@ -353,10 +350,10 @@ void Cell::flattenNets(unsigned int flags)
|
||||||
bool buildRing = false;
|
bool buildRing = false;
|
||||||
|
|
||||||
if (net->isGlobal()) {
|
if (net->isGlobal()) {
|
||||||
if ( (flags & Cell::BuildClockRings ) and net->isClock () ) buildRing = true;
|
if ( (flags & Cell::Flags::BuildClockRings ) and net->isClock () ) buildRing = true;
|
||||||
else if ( (flags & Cell::BuildSupplyRings) and net->isSupply() ) buildRing = true;
|
else if ( (flags & Cell::Flags::BuildSupplyRings) and net->isSupply() ) buildRing = true;
|
||||||
} else {
|
} else {
|
||||||
buildRing = flags & Cell::BuildRings;
|
buildRing = flags & Cell::Flags::BuildRings;
|
||||||
}
|
}
|
||||||
|
|
||||||
forEach ( Component*, icomponent, net->getComponents() ) {
|
forEach ( Component*, icomponent, net->getComponents() ) {
|
||||||
|
@ -375,7 +372,7 @@ void Cell::flattenNets(unsigned int flags)
|
||||||
currentRp = RoutingPad::create( net, *iplugOccurrence, RoutingPad::BiggestArea );
|
currentRp = RoutingPad::create( net, *iplugOccurrence, RoutingPad::BiggestArea );
|
||||||
currentRp->materialize();
|
currentRp->materialize();
|
||||||
|
|
||||||
if (flags & WarnOnUnplacedInstances)
|
if (flags & Flags::WarnOnUnplacedInstances)
|
||||||
currentRp->isPlacedOccurrence( RoutingPad::ShowWarning );
|
currentRp->isPlacedOccurrence( RoutingPad::ShowWarning );
|
||||||
|
|
||||||
if (buildRing) {
|
if (buildRing) {
|
||||||
|
@ -439,17 +436,17 @@ Cell* Cell::getClone()
|
||||||
clone->setPad ( isPad () );
|
clone->setPad ( isPad () );
|
||||||
clone->setAbutmentBox( getAbutmentBox() );
|
clone->setAbutmentBox( getAbutmentBox() );
|
||||||
|
|
||||||
forEach( Net*, inet, getNets() ) {
|
for ( Net* inet : getNets() ) {
|
||||||
if (dynamic_cast<DeepNet*>(*inet)) continue;
|
if (dynamic_cast<DeepNet*>(inet)) continue;
|
||||||
inet->getClone( clone );
|
inet->getClone( clone );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isPlaced = true;
|
bool isPlaced = true;
|
||||||
forEach( Instance*, iinstance, getInstances() ) {
|
for ( Instance* iinstance : getInstances() ) {
|
||||||
if (iinstance->getClone(clone)->getPlacementStatus() == Instance::PlacementStatus::UNPLACED)
|
if (iinstance->getClone(clone)->getPlacementStatus() == Instance::PlacementStatus::UNPLACED)
|
||||||
isPlaced = false;
|
isPlaced = false;
|
||||||
}
|
}
|
||||||
if (isPlaced) clone->setFlags( Placed );
|
if (isPlaced) clone->setFlags( Flags::Placed );
|
||||||
|
|
||||||
UpdateSession::close();
|
UpdateSession::close();
|
||||||
|
|
||||||
|
@ -463,13 +460,13 @@ void Cell::uniquify(unsigned int depth)
|
||||||
vector<Instance*> toUniquify;
|
vector<Instance*> toUniquify;
|
||||||
set<Cell*> masterCells;
|
set<Cell*> masterCells;
|
||||||
|
|
||||||
forEach ( Instance*, iinstance, getInstances() ) {
|
for ( Instance* iinstance : getInstances() ) {
|
||||||
Cell* masterCell = iinstance->getMasterCell();
|
Cell* masterCell = iinstance->getMasterCell();
|
||||||
if (masterCell->isTerminal()) continue;
|
if (masterCell->isTerminal()) continue;
|
||||||
|
|
||||||
masterCells.insert( masterCell );
|
masterCells.insert( masterCell );
|
||||||
if (masterCell->getSlaveInstances().getSize() > 1) {
|
if (masterCell->getSlaveInstances().getSize() > 1) {
|
||||||
toUniquify.push_back( *iinstance );
|
toUniquify.push_back( iinstance );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,8 +559,7 @@ Record* Cell::_getRecord() const
|
||||||
record->add( getSlot("_slaveEntityMap", &_slaveEntityMap ) );
|
record->add( getSlot("_slaveEntityMap", &_slaveEntityMap ) );
|
||||||
record->add( getSlot("_abutmentBox" , &_abutmentBox ) );
|
record->add( getSlot("_abutmentBox" , &_abutmentBox ) );
|
||||||
record->add( getSlot("_boundingBox" , &_boundingBox ) );
|
record->add( getSlot("_boundingBox" , &_boundingBox ) );
|
||||||
record->add(getSlot("_isTerminal", &_isTerminal));
|
record->add( getSlot("_flags" , &_flags ) );
|
||||||
record->add(getSlot("_isFlattenLeaf", &_isFlattenLeaf));
|
|
||||||
}
|
}
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
|
@ -575,9 +571,8 @@ void Cell::_fit(const Box& box)
|
||||||
if (_boundingBox.isEmpty()) return;
|
if (_boundingBox.isEmpty()) return;
|
||||||
if (_boundingBox.contains(box)) return;
|
if (_boundingBox.contains(box)) return;
|
||||||
_boundingBox.merge(box);
|
_boundingBox.merge(box);
|
||||||
for_each_instance(instance, getSlaveInstances()) {
|
for ( Instance* iinstance : getSlaveInstances() ) {
|
||||||
instance->getCell()->_fit(instance->getTransformation().getBox(box));
|
iinstance->getCell()->_fit(iinstance->getTransformation().getBox(box));
|
||||||
end_for;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -588,9 +583,8 @@ void Cell::_unfit(const Box& box)
|
||||||
if (_boundingBox.isEmpty()) return;
|
if (_boundingBox.isEmpty()) return;
|
||||||
if (!_boundingBox.isConstrainedBy(box)) return;
|
if (!_boundingBox.isConstrainedBy(box)) return;
|
||||||
_boundingBox.makeEmpty();
|
_boundingBox.makeEmpty();
|
||||||
for_each_instance(instance, getSlaveInstances()) {
|
for ( Instance* iinstance : getSlaveInstances() ) {
|
||||||
instance->getCell()->_unfit(instance->getTransformation().getBox(box));
|
iinstance->getCell()->_unfit(iinstance->getTransformation().getBox(box));
|
||||||
end_for;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -650,6 +644,58 @@ void Cell::notify(unsigned flags)
|
||||||
_observers.notify(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 "<NoFlags>";
|
||||||
|
|
||||||
|
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
|
// Cell::ClonedSet implementation
|
||||||
// ****************************************************************************************************
|
// ****************************************************************************************************
|
||||||
|
|
|
@ -89,17 +89,17 @@ namespace Hurricane {
|
||||||
nbRoutingPads++;
|
nbRoutingPads++;
|
||||||
|
|
||||||
currentRp = RoutingPad::create( this, *ioccurrence, RoutingPad::BiggestArea );
|
currentRp = RoutingPad::create( this, *ioccurrence, RoutingPad::BiggestArea );
|
||||||
if (flags & Cell::WarnOnUnplacedInstances)
|
if (flags & Cell::Flags::WarnOnUnplacedInstances)
|
||||||
currentRp->isPlacedOccurrence ( RoutingPad::ShowWarning );
|
currentRp->isPlacedOccurrence ( RoutingPad::ShowWarning );
|
||||||
|
|
||||||
if (nbRoutingPads == 1) {
|
if (nbRoutingPads == 1) {
|
||||||
Net* net = currentRp->getNet();
|
Net* net = currentRp->getNet();
|
||||||
|
|
||||||
if (net->isGlobal()) {
|
if (net->isGlobal()) {
|
||||||
if ( (flags & Cell::BuildClockRings ) and net->isClock () ) buildRing = true;
|
if ( (flags & Cell::Flags::BuildClockRings ) and net->isClock () ) buildRing = true;
|
||||||
else if ( (flags & Cell::BuildSupplyRings) and net->isSupply() ) buildRing = true;
|
else if ( (flags & Cell::Flags::BuildSupplyRings) and net->isSupply() ) buildRing = true;
|
||||||
} else {
|
} else {
|
||||||
buildRing = flags & Cell::BuildRings;
|
buildRing = flags & Cell::Flags::BuildRings;
|
||||||
}
|
}
|
||||||
|
|
||||||
//cerr << "_createRoutingPads on " << net->getName() << " buildRing:" << buildRing << endl;
|
//cerr << "_createRoutingPads on " << net->getName() << " buildRing:" << buildRing << endl;
|
||||||
|
|
|
@ -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
|
||||||
|
// <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// +-----------------------------------------------------------------+
|
||||||
|
// | 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 <climits>
|
||||||
|
#include <iomanip>
|
||||||
|
#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.
|
|
@ -105,7 +105,7 @@ void UpdateSession::_destroy()
|
||||||
// They also should be sorted according to their hierarchical depth and
|
// They also should be sorted according to their hierarchical depth and
|
||||||
// revalidated bottom-up (TODO).
|
// revalidated bottom-up (TODO).
|
||||||
for ( auto icell : changedCells ) {
|
for ( auto icell : changedCells ) {
|
||||||
icell->notify( Cell::CellChanged );
|
icell->notify( Cell::Flags::CellChanged );
|
||||||
}
|
}
|
||||||
|
|
||||||
Inherit::_preDestroy();
|
Inherit::_preDestroy();
|
||||||
|
@ -179,7 +179,7 @@ void UpdateSession::onNotOwned()
|
||||||
// Put the cell in the UpdateSession relation, but *do not* unmaterialize it.
|
// Put the cell in the UpdateSession relation, but *do not* unmaterialize it.
|
||||||
//cerr << "Notify Cell::CellAboutToChange to: " << getCell() << endl;
|
//cerr << "Notify Cell::CellAboutToChange to: " << getCell() << endl;
|
||||||
getCell()->put ( UPDATOR_STACK->top() );
|
getCell()->put ( UPDATOR_STACK->top() );
|
||||||
getCell()->notify( Cell::CellAboutToChange );
|
getCell()->notify( Cell::Flags::CellAboutToChange );
|
||||||
forEach( Instance*, iinstance, getCell()->getSlaveInstances() ) {
|
forEach( Instance*, iinstance, getCell()->getSlaveInstances() ) {
|
||||||
iinstance->invalidate( false );
|
iinstance->invalidate( false );
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#define HURRICANE_CELL_H
|
#define HURRICANE_CELL_H
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include "hurricane/Flags.h"
|
||||||
#include "hurricane/Observer.h"
|
#include "hurricane/Observer.h"
|
||||||
#include "hurricane/Relation.h"
|
#include "hurricane/Relation.h"
|
||||||
#include "hurricane/Pathes.h"
|
#include "hurricane/Pathes.h"
|
||||||
|
@ -68,22 +69,36 @@ class Cell : public Entity {
|
||||||
// Types
|
// 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 Entity Inherit;
|
||||||
public: typedef map<Name,ExtensionSlice*> ExtensionSliceMap;
|
public: typedef map<Name,ExtensionSlice*> 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 {
|
class UniquifyRelation : public Relation {
|
||||||
public:
|
public:
|
||||||
static UniquifyRelation* create ( Cell* );
|
static UniquifyRelation* create ( Cell* );
|
||||||
|
@ -225,15 +240,12 @@ class Cell : public Entity {
|
||||||
private: MarkerSet _markerSet;
|
private: MarkerSet _markerSet;
|
||||||
private: Box _abutmentBox;
|
private: Box _abutmentBox;
|
||||||
private: Box _boundingBox;
|
private: Box _boundingBox;
|
||||||
private: bool _isTerminal;
|
|
||||||
private: bool _isFlattenLeaf;
|
|
||||||
private: bool _isPad;
|
|
||||||
private: Cell* _nextOfLibraryCellMap;
|
private: Cell* _nextOfLibraryCellMap;
|
||||||
private: Cell* _nextOfSymbolCellSet;
|
private: Cell* _nextOfSymbolCellSet;
|
||||||
private: SlaveEntityMap _slaveEntityMap;
|
private: SlaveEntityMap _slaveEntityMap;
|
||||||
private: AliasNameSet _netAliasSet;
|
private: AliasNameSet _netAliasSet;
|
||||||
private: Observable _observers;
|
private: Observable _observers;
|
||||||
private: unsigned int _flags;
|
private: Flags _flags;
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
// ************
|
// ************
|
||||||
|
@ -250,6 +262,9 @@ class Cell : public Entity {
|
||||||
public: virtual string _getTypeName() const {return _TName("Cell");};
|
public: virtual string _getTypeName() const {return _TName("Cell");};
|
||||||
public: virtual string _getString() const;
|
public: virtual string _getString() const;
|
||||||
public: virtual Record* _getRecord() 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: InstanceMap& _getInstanceMap() {return _instanceMap;};
|
||||||
public: QuadTree* _getQuadTree() {return &_quadTree;};
|
public: QuadTree* _getQuadTree() {return &_quadTree;};
|
||||||
|
@ -360,13 +375,13 @@ class Cell : public Entity {
|
||||||
// **********
|
// **********
|
||||||
|
|
||||||
public: bool isCalledBy(Cell* cell) const;
|
public: bool isCalledBy(Cell* cell) const;
|
||||||
public: bool isTerminal() const {return _isTerminal;};
|
public: bool isTerminal() const {return _flags.isset(Flags::Terminal);};
|
||||||
public: bool isFlattenLeaf() const {return _isFlattenLeaf;};
|
public: bool isFlattenLeaf() const {return _flags.isset(Flags::FlattenLeaf);};
|
||||||
public: bool isLeaf() const;
|
public: bool isLeaf() const;
|
||||||
public: bool isPad() const {return _isPad;};
|
public: bool isPad() const {return _flags.isset(Flags::Pad);};
|
||||||
public: bool isFlattenedNets() const {return _flags & FlattenedNets;};
|
public: bool isFlattenedNets() const {return _flags.isset(Flags::FlattenedNets);};
|
||||||
public: bool isPlaced() const {return _flags & Placed;};
|
public: bool isPlaced() const {return _flags.isset(Flags::Placed);};
|
||||||
public: bool isRouted() const {return _flags & Routed;};
|
public: bool isRouted() const {return _flags.isset(Flags::Routed);};
|
||||||
public: bool isNetAlias(const Name& name) const;
|
public: bool isNetAlias(const Name& name) const;
|
||||||
|
|
||||||
// Updators
|
// Updators
|
||||||
|
@ -374,10 +389,10 @@ class Cell : public Entity {
|
||||||
|
|
||||||
public: void setName(const Name& name);
|
public: void setName(const Name& name);
|
||||||
public: void setAbutmentBox(const Box& abutmentBox);
|
public: void setAbutmentBox(const Box& abutmentBox);
|
||||||
public: void setTerminal(bool isTerminal) {_isTerminal = isTerminal;};
|
public: void setTerminal(bool isTerminal) {_flags.set(Flags::Terminal,isTerminal);};
|
||||||
public: void setFlattenLeaf(bool isFlattenLeaf) {_isFlattenLeaf = isFlattenLeaf;};
|
public: void setFlattenLeaf(bool isFlattenLeaf) {_flags.set(Flags::FlattenLeaf,isFlattenLeaf);};
|
||||||
public: void setPad(bool isPad) {_isPad = isPad;};
|
public: void setPad(bool isPad) {_flags.set(Flags::Pad,isPad);};
|
||||||
public: void flattenNets(unsigned int flags=BuildRings);
|
public: void flattenNets(unsigned int flags=Flags::BuildRings);
|
||||||
public: void setFlags(unsigned int flags) { _flags |= flags; }
|
public: void setFlags(unsigned int flags) { _flags |= flags; }
|
||||||
public: void resetFlags(unsigned int flags) { _flags &= ~flags; }
|
public: void resetFlags(unsigned int flags) { _flags &= ~flags; }
|
||||||
public: void materialize();
|
public: void materialize();
|
||||||
|
@ -411,6 +426,7 @@ inline Cell::ClonedSet::ClonedSet ( const ClonedSet& other )
|
||||||
|
|
||||||
|
|
||||||
INSPECTOR_P_SUPPORT(Hurricane::Cell);
|
INSPECTOR_P_SUPPORT(Hurricane::Cell);
|
||||||
|
INSPECTOR_P_SUPPORT(Hurricane::Cell::Flags);
|
||||||
INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
|
INSPECTOR_P_SUPPORT(Hurricane::Cell::InstanceMap);
|
||||||
INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
|
INSPECTOR_P_SUPPORT(Hurricane::Cell::SlaveInstanceSet);
|
||||||
INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
|
INSPECTOR_P_SUPPORT(Hurricane::Cell::NetMap);
|
||||||
|
|
|
@ -197,22 +197,25 @@ template<class Type> class Collection {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
class iterator {
|
class iterator {
|
||||||
Locator<Type>* _locator;
|
public:
|
||||||
|
iterator ( Locator<Type>* l ) : _locator(l) {}
|
||||||
public: iterator(Locator<Type>* l) : _locator(l) {}
|
bool operator== ( const iterator& o) const { return not (*this != o); }
|
||||||
public: bool operator!=(iterator const & o) const {
|
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 invalidA = ( _locator == NULL) or not ( _locator->isValid());
|
||||||
bool invalidB = (o._locator == NULL) or not (o._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);
|
return invalidA != invalidB or (not invalidA and not invalidB and _locator != o._locator);
|
||||||
}
|
}
|
||||||
public: bool operator==(iterator const & o) const { return not(*this != o); }
|
private:
|
||||||
public: iterator& operator++(){ _locator->progress(); return *this; }
|
Locator<Type>* _locator;
|
||||||
public: Type operator*() { return _locator->getElement(); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public: iterator begin() { return iterator(getLocator()); }
|
public:
|
||||||
public: iterator end() { return iterator(NULL); }
|
iterator begin() { return iterator(getLocator()); }
|
||||||
public: bool empty() { return begin() == end(); }
|
iterator end() { return iterator(NULL); }
|
||||||
|
bool empty() { return begin() == end(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
// <http://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// +-----------------------------------------------------------------+
|
||||||
|
// | 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 <string>
|
||||||
|
#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
|
|
@ -1,7 +1,6 @@
|
||||||
|
|
||||||
// -*- C++ -*-
|
// -*- 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.
|
// This file is part of Hurricane.
|
||||||
//
|
//
|
||||||
|
@ -19,12 +18,7 @@
|
||||||
// License along with Hurricane. If not, see
|
// License along with Hurricane. If not, see
|
||||||
// <http://www.gnu.org/licenses/>.
|
// <http://www.gnu.org/licenses/>.
|
||||||
//
|
//
|
||||||
// ===================================================================
|
// +-----------------------------------------------------------------+
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
//
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
// | |
|
|
||||||
// | H U R R I C A N E |
|
// | 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 |
|
// | V L S I B a c k e n d D a t a - B a s e |
|
||||||
// | |
|
// | |
|
||||||
|
@ -32,14 +26,11 @@
|
||||||
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
||||||
// | =============================================================== |
|
// | =============================================================== |
|
||||||
// | C++ Header : "./hurricane/Mask.h" |
|
// | C++ Header : "./hurricane/Mask.h" |
|
||||||
// | *************************************************************** |
|
// +-----------------------------------------------------------------+
|
||||||
// | U p d a t e s |
|
|
||||||
// | |
|
|
||||||
// x-----------------------------------------------------------------x
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef __HURRICANE_MASK__
|
#ifndef HURRICANE_MASK_H
|
||||||
#define __HURRICANE_MASK__
|
#define HURRICANE_MASK_H
|
||||||
|
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include "hurricane/Commons.h"
|
#include "hurricane/Commons.h"
|
||||||
|
@ -198,7 +189,6 @@ namespace Hurricane {
|
||||||
size_t Mask<IntType>::_width = sizeof(IntType)<<2;
|
size_t Mask<IntType>::_width = sizeof(IntType)<<2;
|
||||||
|
|
||||||
|
|
||||||
} // End of Hurricane namespace.
|
} // Hurricane namespace.
|
||||||
|
|
||||||
|
# endif // HURRICANE_MASK_H
|
||||||
# endif // __HURRICANE_MASK__
|
|
||||||
|
|
|
@ -805,10 +805,10 @@ extern "C" {
|
||||||
|
|
||||||
PyObject* dictionnary = PyModule_GetDict ( module );
|
PyObject* dictionnary = PyModule_GetDict ( module );
|
||||||
|
|
||||||
ConstructorError = PyErr_NewException ( "hurricane.ConstructorError", NULL, NULL );
|
ConstructorError = PyErr_NewException ( (char*)"hurricane.ConstructorError", NULL, NULL );
|
||||||
ProxyError = PyErr_NewException ( "hurricane.ProxyError" , NULL, NULL );
|
ProxyError = PyErr_NewException ( (char*)"hurricane.ProxyError" , NULL, NULL );
|
||||||
HurricaneError = PyErr_NewException ( "hurricane.HurricaneError" , NULL, NULL );
|
HurricaneError = PyErr_NewException ( (char*)"hurricane.HurricaneError" , NULL, NULL );
|
||||||
HurricaneWarning = PyErr_NewException ( "hurricane.HurricaneWarning", PyExc_Warning, NULL );
|
HurricaneWarning = PyErr_NewException ( (char*)"hurricane.HurricaneWarning", PyExc_Warning, NULL );
|
||||||
|
|
||||||
PyDict_SetItemString ( dictionnary, "ConstructorError", ConstructorError );
|
PyDict_SetItemString ( dictionnary, "ConstructorError", ConstructorError );
|
||||||
PyDict_SetItemString ( dictionnary, "ProxyError" , ProxyError );
|
PyDict_SetItemString ( dictionnary, "ProxyError" , ProxyError );
|
||||||
|
|
|
@ -401,7 +401,7 @@ extern "C" {
|
||||||
HTRY
|
HTRY
|
||||||
METHOD_HEAD ( "Net.addAlias()" )
|
METHOD_HEAD ( "Net.addAlias()" )
|
||||||
|
|
||||||
char* name;
|
char* name = NULL;
|
||||||
if (PyArg_ParseTuple(args,"s:Net.addAlias",args,name)) {
|
if (PyArg_ParseTuple(args,"s:Net.addAlias",args,name)) {
|
||||||
if (net->addAlias(Name(name))) Py_RETURN_TRUE;
|
if (net->addAlias(Name(name))) Py_RETURN_TRUE;
|
||||||
} else {
|
} else {
|
||||||
|
@ -425,7 +425,7 @@ extern "C" {
|
||||||
HTRY
|
HTRY
|
||||||
METHOD_HEAD ( "Net.removeAlias()" )
|
METHOD_HEAD ( "Net.removeAlias()" )
|
||||||
|
|
||||||
char* name;
|
char* name = NULL;
|
||||||
if (PyArg_ParseTuple(args,"s:Net.removeAlias",args,name)) {
|
if (PyArg_ParseTuple(args,"s:Net.removeAlias",args,name)) {
|
||||||
if (net->removeAlias(Name(name))) Py_RETURN_TRUE;
|
if (net->removeAlias(Name(name))) Py_RETURN_TRUE;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -61,11 +61,11 @@ namespace Hurricane {
|
||||||
void CellObserver::notify ( unsigned int flags )
|
void CellObserver::notify ( unsigned int flags )
|
||||||
{
|
{
|
||||||
CellViewer* viewer = getOwner();
|
CellViewer* viewer = getOwner();
|
||||||
switch ( flags & (Cell::CellAboutToChange|Cell::CellChanged) ) {
|
switch ( flags & (Cell::Flags::CellAboutToChange|Cell::Flags::CellChanged) ) {
|
||||||
case Cell::CellAboutToChange:
|
case Cell::Flags::CellAboutToChange:
|
||||||
viewer->emitCellAboutToChange();
|
viewer->emitCellAboutToChange();
|
||||||
break;
|
break;
|
||||||
case Cell::CellChanged:
|
case Cell::Flags::CellChanged:
|
||||||
viewer->emitCellChanged();
|
viewer->emitCellChanged();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -692,8 +692,7 @@ namespace Hurricane {
|
||||||
QAction* historyAction = qobject_cast<QAction*> ( sender() );
|
QAction* historyAction = qobject_cast<QAction*> ( sender() );
|
||||||
if ( historyAction ) {
|
if ( historyAction ) {
|
||||||
list< shared_ptr<CellWidget::State> >::iterator istate = _cellHistory.begin();
|
list< shared_ptr<CellWidget::State> >::iterator istate = _cellHistory.begin();
|
||||||
size_t index = historyAction->data().toUInt();
|
//size_t index = historyAction->data().toUInt();
|
||||||
|
|
||||||
//for ( ; index>0 ; index--, istate++ )
|
//for ( ; index>0 ; index--, istate++ )
|
||||||
// cerr << "History: " << (*istate)->getName() << endl;
|
// cerr << "History: " << (*istate)->getName() << endl;
|
||||||
emit stateChanged ( *istate );
|
emit stateChanged ( *istate );
|
||||||
|
|
|
@ -270,15 +270,22 @@ extern "C" {
|
||||||
|
|
||||||
HTRY
|
HTRY
|
||||||
METHOD_HEAD("DisplayStyle.addDrawingStyle()")
|
METHOD_HEAD("DisplayStyle.addDrawingStyle()")
|
||||||
char* argGroupKey = "Not part of any group (error)";
|
char* argGroupKey = (char*)"Not part of any group (error)";
|
||||||
char* argKey = "No key defined (error)";
|
char* argKey = (char*)"No key defined (error)";
|
||||||
char* argPattern = "FFFFFFFFFFFFFFFF";
|
char* argPattern = (char*)"FFFFFFFFFFFFFFFF";
|
||||||
char* argColor = "255,255,255";
|
char* argColor = (char*)"255,255,255";
|
||||||
int borderWidth = 0;
|
int borderWidth = 0;
|
||||||
float threshold = 1.0;
|
float threshold = 1.0;
|
||||||
PyObject* argGoMatched = NULL;
|
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
|
if (PyArg_ParseTupleAndKeywords( args
|
||||||
, kwArgs
|
, kwArgs
|
||||||
|
|
|
@ -102,14 +102,20 @@ extern "C" {
|
||||||
|
|
||||||
HTRY
|
HTRY
|
||||||
METHOD_HEAD("DrawingGroup.addDrawingStyle()")
|
METHOD_HEAD("DrawingGroup.addDrawingStyle()")
|
||||||
char* argKey = "No key defined (error)";
|
char* argKey = (char*)"No key defined (error)";
|
||||||
char* argPattern = "FFFFFFFFFFFFFFFF";
|
char* argPattern = (char*)"FFFFFFFFFFFFFFFF";
|
||||||
char* argColor = "255,255,255";
|
char* argColor = (char*)"255,255,255";
|
||||||
int borderWidth = 0;
|
int borderWidth = 0;
|
||||||
float threshold = 1.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
|
if (PyArg_ParseTupleAndKeywords( args
|
||||||
, kwArgs
|
, kwArgs
|
||||||
|
|
|
@ -316,8 +316,8 @@ namespace Kite {
|
||||||
Cell* cell = getCell();
|
Cell* cell = getCell();
|
||||||
//Box cellBb = cell->getBoundingBox();
|
//Box cellBb = cell->getBoundingBox();
|
||||||
if (not _knik) {
|
if (not _knik) {
|
||||||
unsigned int flags = Cell::WarnOnUnplacedInstances;
|
unsigned int flags = Cell::Flags::WarnOnUnplacedInstances;
|
||||||
flags |= (mode & KtBuildGlobalRouting) ? Cell::BuildRings : 0;
|
flags |= (mode & KtBuildGlobalRouting) ? Cell::Flags::BuildRings : 0;
|
||||||
//if (not cell->isFlattenedNets()) cell->flattenNets( flags );
|
//if (not cell->isFlattenedNets()) cell->flattenNets( flags );
|
||||||
cell->flattenNets( flags );
|
cell->flattenNets( flags );
|
||||||
|
|
||||||
|
@ -419,7 +419,7 @@ namespace Kite {
|
||||||
{
|
{
|
||||||
cmess1 << " o Back annotate global routing graph." << endl;
|
cmess1 << " o Back annotate global routing graph." << endl;
|
||||||
|
|
||||||
const Torus& chipCorona = getChipTools().getCorona();
|
//const Torus& chipCorona = getChipTools().getCorona();
|
||||||
|
|
||||||
int hEdgeCapacity = 0;
|
int hEdgeCapacity = 0;
|
||||||
int vEdgeCapacity = 0;
|
int vEdgeCapacity = 0;
|
||||||
|
@ -459,7 +459,7 @@ namespace Kite {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Box elementBb = element->getBoundingBox();
|
//Box elementBb = element->getBoundingBox();
|
||||||
//int elementCapacity = (chipCorona.contains(elementBb)) ? -hEdgeCapacity : -1;
|
//int elementCapacity = (chipCorona.contains(elementBb)) ? -hEdgeCapacity : -1;
|
||||||
int elementCapacity = -1;
|
int elementCapacity = -1;
|
||||||
|
|
||||||
|
@ -497,7 +497,7 @@ namespace Kite {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Box elementBb = element->getBoundingBox();
|
//Box elementBb = element->getBoundingBox();
|
||||||
//int elementCapacity = (chipCorona.contains(elementBb)) ? -vEdgeCapacity : -1;
|
//int elementCapacity = (chipCorona.contains(elementBb)) ? -vEdgeCapacity : -1;
|
||||||
int elementCapacity = -1;
|
int elementCapacity = -1;
|
||||||
|
|
||||||
|
@ -817,7 +817,7 @@ namespace Kite {
|
||||||
KatabaticEngine::finalizeLayout();
|
KatabaticEngine::finalizeLayout();
|
||||||
ltrace(90) << "State: " << getState() << endl;
|
ltrace(90) << "State: " << getState() << endl;
|
||||||
|
|
||||||
getCell()->setFlags( Cell::Routed );
|
getCell()->setFlags( Cell::Flags::Routed );
|
||||||
|
|
||||||
ltraceout(90);
|
ltraceout(90);
|
||||||
}
|
}
|
||||||
|
|
|
@ -412,7 +412,7 @@ namespace Kite {
|
||||||
ltrace(149) << "Level: " << getEventLevel()
|
ltrace(149) << "Level: " << getEventLevel()
|
||||||
<< ", area: " << _segment->getFreedomDegree() << endl;
|
<< ", area: " << _segment->getFreedomDegree() << endl;
|
||||||
|
|
||||||
_preCheck( _segment );
|
//_preCheck( _segment );
|
||||||
_eventLevel = 0;
|
_eventLevel = 0;
|
||||||
|
|
||||||
history.push( this );
|
history.push( this );
|
||||||
|
|
|
@ -154,7 +154,7 @@ namespace Knik {
|
||||||
KnikEngine* knik = KnikEngine::get ( cell );
|
KnikEngine* knik = KnikEngine::get ( cell );
|
||||||
if ( !knik ) {
|
if ( !knik ) {
|
||||||
if ( cell->getRubbers().getFirst() == NULL )
|
if ( cell->getRubbers().getFirst() == NULL )
|
||||||
cell->flattenNets ( ((mode==BuildSolution)?Cell::BuildRings:0) );
|
cell->flattenNets ( ((mode==BuildSolution)?Cell::Flags::BuildRings:0) );
|
||||||
knik = KnikEngine::create ( cell
|
knik = KnikEngine::create ( cell
|
||||||
, _congestion
|
, _congestion
|
||||||
, _preCongestion
|
, _preCongestion
|
||||||
|
@ -178,7 +178,7 @@ namespace Knik {
|
||||||
|
|
||||||
//emit cellPreModificated();
|
//emit cellPreModificated();
|
||||||
|
|
||||||
cell->flattenNets ( Cell::BuildRings );
|
cell->flattenNets ( Cell::Flags::BuildRings );
|
||||||
|
|
||||||
//emit cellPostModificated();
|
//emit cellPostModificated();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
DTYPE xs[MAXD], ys[MAXD], minval, l, xu, xl, yu, yl;
|
||||||
int s[MAXD];
|
int s[MAXD];
|
||||||
int i, j, k, minidx;
|
int i, j, minidx;
|
||||||
struct point pt[MAXD], *ptp[MAXD], *tmpp;
|
struct point pt[MAXD], *ptp[MAXD], *tmpp;
|
||||||
|
|
||||||
if (d==2)
|
if (d==2)
|
||||||
|
@ -206,6 +206,8 @@ DTYPE flute_wl(int d, DTYPE x[], DTYPE y[], int acc)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if REMOVE_DUPLICATE_PIN==1
|
#if REMOVE_DUPLICATE_PIN==1
|
||||||
|
{
|
||||||
|
int k;
|
||||||
ptp[d] = &pt[d];
|
ptp[d] = &pt[d];
|
||||||
ptp[d]->x = ptp[d]->y = -999999;
|
ptp[d]->x = ptp[d]->y = -999999;
|
||||||
j = 0;
|
j = 0;
|
||||||
|
@ -217,6 +219,7 @@ DTYPE flute_wl(int d, DTYPE x[], DTYPE y[], int acc)
|
||||||
ptp[j++] = ptp[i];
|
ptp[j++] = ptp[i];
|
||||||
}
|
}
|
||||||
d = j;
|
d = j;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i=0; i<d; i++) {
|
for (i=0; i<d; i++) {
|
||||||
|
@ -597,7 +600,7 @@ FTree flute(int d, DTYPE x[], DTYPE y[], int acc)
|
||||||
{
|
{
|
||||||
DTYPE *xs, *ys, minval;
|
DTYPE *xs, *ys, minval;
|
||||||
int *s;
|
int *s;
|
||||||
int i, j, k, minidx;
|
int i, j, minidx;
|
||||||
struct point *pt, **ptp, *tmpp;
|
struct point *pt, **ptp, *tmpp;
|
||||||
FTree t;
|
FTree t;
|
||||||
|
|
||||||
|
@ -645,6 +648,8 @@ FTree flute(int d, DTYPE x[], DTYPE y[], int acc)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if REMOVE_DUPLICATE_PIN==1
|
#if REMOVE_DUPLICATE_PIN==1
|
||||||
|
{
|
||||||
|
int k;
|
||||||
ptp[d] = &pt[d];
|
ptp[d] = &pt[d];
|
||||||
ptp[d]->x = ptp[d]->y = -999999;
|
ptp[d]->x = ptp[d]->y = -999999;
|
||||||
j = 0;
|
j = 0;
|
||||||
|
@ -656,6 +661,7 @@ FTree flute(int d, DTYPE x[], DTYPE y[], int acc)
|
||||||
ptp[j++] = ptp[i];
|
ptp[j++] = ptp[i];
|
||||||
}
|
}
|
||||||
d = j;
|
d = j;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
for (i=0; i<d; i++) {
|
for (i=0; i<d; i++) {
|
||||||
|
|
|
@ -134,8 +134,6 @@ void extract_heap(node_pair *np)
|
||||||
|
|
||||||
void init_param()
|
void init_param()
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
heap = (node_pair*)malloc(sizeof(node_pair)*(max_heap_size+1));
|
heap = (node_pair*)malloc(sizeof(node_pair)*(max_heap_size+1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ void allocate_heap( long n )
|
||||||
_heap = (Heap*)realloc( (void*)_heap, (size_t)(n+1)*sizeof(Heap) );
|
_heap = (Heap*)realloc( (void*)_heap, (size_t)(n+1)*sizeof(Heap) );
|
||||||
if( ! _heap )
|
if( ! _heap )
|
||||||
{
|
{
|
||||||
err_exit( "Cannot reallocate memory in allocate_heap!" );
|
err_exit( (char*)"Cannot reallocate memory in allocate_heap!" );
|
||||||
}
|
}
|
||||||
_max_heap_size = n;
|
_max_heap_size = n;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ void allocate_nn_arrays( long n )
|
||||||
aux = (long*)realloc( (void*)aux, (size_t)n*sizeof(long) );
|
aux = (long*)realloc( (void*)aux, (size_t)n*sizeof(long) );
|
||||||
if( !nn || !sheared || !sorted || !aux )
|
if( !nn || !sheared || !sorted || !aux )
|
||||||
{
|
{
|
||||||
err_exit( "Cannot allocate memory in allocate_nn_arrays!" );
|
err_exit( (char*)"Cannot allocate memory in allocate_nn_arrays!" );
|
||||||
}
|
}
|
||||||
max_arrays_size = n;
|
max_arrays_size = n;
|
||||||
}
|
}
|
||||||
|
|
|
@ -250,8 +250,9 @@ namespace Utilities {
|
||||||
unsigned int Path::mode () const
|
unsigned int Path::mode () const
|
||||||
{
|
{
|
||||||
struct stat bstat;
|
struct stat bstat;
|
||||||
int status = 0;
|
//int status = 0;
|
||||||
status = ::stat( toString().c_str(), &bstat );
|
//status =
|
||||||
|
::stat( toString().c_str(), &bstat );
|
||||||
// Should check for errno here.
|
// Should check for errno here.
|
||||||
|
|
||||||
return bstat.st_mode;
|
return bstat.st_mode;
|
||||||
|
|
Loading…
Reference in New Issue