Analog integration part II. Analog place & route (slicing tree).

* Change: In Hurricane::CellWidget, set the minimal size to 350 pixels
    to fit my normal DPI secondary screen...
* Change: In Hurricane::Error(), reactivate the backtrace generation by
    default. Seriously slow down the program each time an Error is to
    be constructed.
* Bug: In Analog::Device::preCreate(), check for NULL Technology before
    attempting to use it.
* Change: In Hurricane/Analog, remove all '*Arguments*' classes and their
    Python interface. It was an obsoleted way of passing devices parameters
    to the Python layout generators (located in Oroshi). Now we just get
    them straight from the Device with the getParamter() method.
* Change: In CRL::System CTOR, add Python pathes for Oroshi & Karakaze.
* Change: In Oroshi/Python/WIP_*.py layout generator scripts, remove
    all uses of the "Arguments". Directly access the parameters through
    the device itself. Make the checkCoherency() with identical arguments
    as of layout().
* New: Bora tool that performs analog place & route. Based on a slicing
    tree representation. It is the thesis work of Eric Lao.
      Code beautyfication and some programming cleanup.
* New: Karakaze tool, provide the Python base class AnalogDesign used
    to build an analog design. Create/configure devices and assemble
    them in a slicing tree.
* Change: In Unicorn/cgt.py, display the stack trace in case of an
    ImportError exception as well as for other exceptions.
      Add Bora to the set for included tool engines.
This commit is contained in:
Jean-Paul Chaput 2018-10-18 18:10:01 +02:00
parent 3f73b9d033
commit fcd6d69a2f
1678 changed files with 107469 additions and 95499 deletions

View File

@ -217,7 +217,7 @@ namespace Anabatic {
}
void Vertex::setRestricted ()
void Vertex::setRestricted ()
{
setNRestricted();
setSRestricted();
@ -235,7 +235,7 @@ namespace Anabatic {
}
bool Vertex::hasRP( Net* net ) const
bool Vertex::hasRP ( Net* net ) const
{
if (getGCell() != NULL ){
Cell* cell = getGCell()->getAnabatic()->getCell();
@ -251,7 +251,7 @@ namespace Anabatic {
}
bool Vertex::hasVRP( Net* net ) const
bool Vertex::hasVRP ( Net* net ) const
{
if (getGCell() != NULL){
Cell* cell = getGCell()->getAnabatic()->getCell();
@ -271,7 +271,7 @@ namespace Anabatic {
}
bool Vertex::hasHRP( Net* net ) const
bool Vertex::hasHRP ( Net* net ) const
{
if (getGCell() != NULL){
Cell* cell = getGCell()->getAnabatic()->getCell();
@ -347,7 +347,7 @@ namespace Anabatic {
}
Point Vertex::getNextPathPoint( Point pcurr, const Vertex* vnext ) const
Point Vertex::getNextPathPoint ( Point pcurr, const Vertex* vnext ) const
{
cdebug_log(112,1) << "Point Dijkstra::getNextPathPoint( Point pcurr, const Vertex* vnext )" << endl;
if (vnext == NULL){
@ -456,7 +456,7 @@ namespace Anabatic {
}
Point Vertex::getStartPathPoint( const Vertex* next ) const
Point Vertex::getStartPathPoint ( const Vertex* next ) const
{
cdebug_log(112,1) << "Point Vertex::getStartPathPoint( const Vertex* next ) const:" << this << endl;
@ -669,7 +669,7 @@ namespace Anabatic {
}
bool Vertex::isH() const
bool Vertex::isH () const
{
GCell* gcell = getGCell();
if (gcell->isDevice()) return isiHorizontal();
@ -679,7 +679,7 @@ namespace Anabatic {
}
bool Vertex::isV() const
bool Vertex::isV () const
{
GCell* gcell = getGCell();
if (gcell->isDevice()) return isiVertical();
@ -866,7 +866,7 @@ namespace Anabatic {
}
void Vertex::createAData()
void Vertex::createAData ()
{
if (!getGCell()->isMatrix()){
if (_adata == NULL) _adata = GRAData::create();
@ -874,14 +874,14 @@ namespace Anabatic {
}
bool Vertex::isiSet() const
bool Vertex::isiSet () const
{
if (_adata) return _adata->isiSet();
else return false;
}
DbU::Unit Vertex::getIAxis() const
DbU::Unit Vertex::getIAxis () const
{
if (_adata) return _adata->getIAxis();
else {
@ -907,7 +907,7 @@ namespace Anabatic {
}
DbU::Unit Vertex::getIMax() const
DbU::Unit Vertex::getIMax () const
{
if (_adata){
return _adata->getIMax();
@ -941,26 +941,25 @@ namespace Anabatic {
DbU::Unit Vertex::getIMin() const
DbU::Unit Vertex::getIMin () const
{
if (_adata){
return _adata->getIMin();
} else {
//cdebug_log(112,0) << "DbU::Unit Vertex::getIMin() const: Digital vertex. " << endl;
if (_from){
if (_from) {
GCell* gcurr = getGCell();
GCell* gprev = _from->getOpposite(gcurr);
Vertex* vprev = gprev->getObserver<Vertex>(GCell::Observable::Vertex);
Vertex* vprev = gprev->getObserver<Vertex>( GCell::Observable::Vertex );
if (isH()){
if (isNorth(vprev)||isSouth(vprev)||isEast (vprev)) return getGCell()->getXCenter();
else if (isWest (vprev)) return getGCell()->getXMin();
if (isNorth(vprev) or isSouth(vprev) or isEast (vprev)) return getGCell()->getXCenter();
else if (isWest (vprev)) return getGCell()->getXMin();
else {
cdebug_log(112,0) << "DbU::Unit Vertex::getIMin() const: Not a neighbour GCell. " << endl;
return 0;
}
} else {
if (isWest(vprev)||isEast(vprev)||isNorth (vprev)) return getGCell()->getYCenter();
else if (isSouth (vprev)) return getGCell()->getYMin();
if (isWest (vprev) or isEast(vprev) or isNorth (vprev)) return getGCell()->getYCenter();
else if (isSouth(vprev)) return getGCell()->getYMin();
else {
cdebug_log(112,0) << "DbU::Unit Vertex::getIMin() const: Not a neighbour GCell. " << endl;
return 0;
@ -974,7 +973,7 @@ namespace Anabatic {
}
DbU::Unit Vertex::getPIAxis() const
DbU::Unit Vertex::getPIAxis () const
{
if (_adata){
return _adata->getPIAxis();
@ -1010,7 +1009,7 @@ namespace Anabatic {
}
DbU::Unit Vertex::getPIMax() const
DbU::Unit Vertex::getPIMax () const
{
if (_adata){
return _adata->getPIMax();
@ -1044,7 +1043,7 @@ namespace Anabatic {
}
DbU::Unit Vertex::getPIMin() const
DbU::Unit Vertex::getPIMin () const
{
if (_adata){
return _adata->getPIMin();
@ -1078,7 +1077,7 @@ namespace Anabatic {
}
void Vertex::setInterv( DbU::Unit min, DbU::Unit max, DbU::Unit axis )
void Vertex::setInterv ( DbU::Unit min, DbU::Unit max, DbU::Unit axis )
{
if (_adata){
_adata->setInterv(min, max, axis);
@ -1088,7 +1087,7 @@ namespace Anabatic {
}
void Vertex::setIntervfrom( DbU::Unit min, DbU::Unit max, DbU::Unit axis )
void Vertex::setIntervfrom ( DbU::Unit min, DbU::Unit max, DbU::Unit axis )
{
if (_adata){
_adata->setIntervfrom(min, max, axis);
@ -1098,7 +1097,7 @@ namespace Anabatic {
}
void Vertex::setIntervfrom2( DbU::Unit min, DbU::Unit max, DbU::Unit axis )
void Vertex::setIntervfrom2 ( DbU::Unit min, DbU::Unit max, DbU::Unit axis )
{
if (_adata){
_adata->setIntervfrom2(min, max, axis);
@ -1108,7 +1107,7 @@ namespace Anabatic {
}
void Vertex::resetIntervals()
void Vertex::resetIntervals ()
{
if (_adata){
_adata->resetIntervals();
@ -1119,7 +1118,7 @@ namespace Anabatic {
}
void Vertex::clearFrom2()
void Vertex::clearFrom2 ()
{
if (_adata){
_adata->clearFrom2();
@ -1451,13 +1450,11 @@ namespace Anabatic {
vector<RoutingPad*> rps;
NetRoutingState* state = NetRoutingExtension::get( _net );
if (state){
if (state->isSelfSym()){
if (state) {
if (state->isSelfSym()) {
cdebug_log(112,0) << "Dijkstra::SELF SYMMETRY CASE " << DbU::getValueString(state->getSymAxis()) << endl;
}
} /*else {
cerr << "Error: No RoutingExtension for net: " << _net << endl;
}*/
}
for ( Component* component : _net->getComponents() ) {
RoutingPad* rp = dynamic_cast<RoutingPad*>( component );
@ -1470,6 +1467,8 @@ namespace Anabatic {
}
}
if (rps.size() < 2) return;
for ( auto rp : rps ) {
if (not _anabatic->getConfiguration()->selectRpComponent(rp))
cerr << Warning( "Dijktra::load(): %s has no components on grid.", getString(rp).c_str() ) << endl;

View File

@ -471,15 +471,16 @@ namespace Anabatic {
}
bool Edge::isMaxCapacity ( Net* net ) const
bool Edge::isMaxCapacity ( Net* net ) const
{
unsigned int wpitch = 0;
if (net) {
cdebug_log(112,0) << "_capacity:" << getCapacity() << endl;
Hurricane::NetRoutingState* state = Hurricane::NetRoutingExtension::get( net );
return ((_realOccupancy + state->getWPitch()) > getCapacity()) ? true : false;
wpitch = (state) ? state->getWPitch()-1 : 0;
}
return (_realOccupancy >= getCapacity()) ? true : false;
return (_realOccupancy + wpitch >= getCapacity());
}

View File

@ -194,82 +194,77 @@ namespace Anabatic {
static DbU::Unit unreached;
static DbU::Unit unreachable;
public:
static void notify ( Vertex*, unsigned flags );
static inline Vertex* lookup ( GCell* );
public:
inline Vertex ( GCell* );
//inline Vertex ( size_t id );
inline ~Vertex ();
inline bool isAnalog () const;
inline bool hasDoneAllRps () const;
inline Contact* hasGContact ( Net* ) const;
inline unsigned int getId () const;
inline GCell* getGCell () const;
inline Box getBoundingBox () const;
inline Edges getEdges ( Flags sides=Flags::AllSides ) const;
inline AnabaticEngine* getAnabatic () const;
inline Contact* getGContact ( Net* );
bool hasValidStamp () const;
inline Point getCenter () const;
inline DbU::Unit getDistance () const;
inline int getStamp () const;
inline int getBranchId () const;
inline int getConnexId () const;
inline int getDegree () const;
inline int getRpCount () const;
Edge* getFrom () const;
inline Vertex* getPredecessor () const;
inline Vertex* getNeighbor ( Edge* ) const;
inline void setDistance ( DbU::Unit );
inline void setStamp ( int );
inline void setConnexId ( int );
inline void setBranchId ( int );
inline void setDegree ( int );
inline void incDegree ( int delta=1 );
inline void setRpCount ( int );
inline void incRpCount ( int delta=1 );
inline void setFrom ( Edge* );
inline void add ( RoutingPad* );
inline void clearRps ();
inline Contact* breakGoThrough ( Net* );
//////////////////////////////////////// Analog
inline bool isNorth ( const Vertex* ) const;
inline bool isSouth ( const Vertex* ) const;
inline bool isEast ( const Vertex* ) const;
inline bool isWest ( const Vertex* ) const;
inline bool isNRestricted () const;
inline bool isSRestricted () const;
inline bool isERestricted () const;
inline bool isWRestricted () const;
inline bool hasRestrictions() const;
void setRestricted ();
void clearRestriction ();
inline void setNRestricted ();
inline void setSRestricted ();
inline void setERestricted ();
inline void setWRestricted ();
bool hasRP ( Net* ) const;
bool hasVRP ( Net* ) const;
bool hasHRP ( Net* ) const;
static bool isRestricted ( const Vertex* v1, const Vertex* v2, const Edge* e, DbU::Unit hpitch = 0, DbU::Unit vpitch = 0, Net* net = NULL);
bool areSameSide ( const Vertex*, const Vertex* ) const;
inline bool isFromFrom2 () const;
inline bool isFrom2Mode () const;
inline bool isAxisTarget () const;
inline bool isiHorizontal() const;
inline bool isiVertical () const;
inline void setFlags ( uint32_t );
inline void unsetFlags ( uint32_t );
bool isH () const;
bool isV () const;
inline void createAData ();
////////////////////////////////////
static void notify ( Vertex*, unsigned flags );
static inline Vertex* lookup ( GCell* );
public:
inline Vertex ( GCell* );
//inline Vertex ( size_t id );
inline ~Vertex ();
inline bool isAnalog () const;
inline bool hasDoneAllRps () const;
inline Contact* hasGContact ( Net* ) const;
inline unsigned int getId () const;
inline GCell* getGCell () const;
inline Box getBoundingBox () const;
inline Edges getEdges ( Flags sides=Flags::AllSides ) const;
inline AnabaticEngine* getAnabatic () const;
inline Contact* getGContact ( Net* );
bool hasValidStamp () const;
inline Point getCenter () const;
inline DbU::Unit getDistance () const;
inline int getStamp () const;
inline int getBranchId () const;
inline int getConnexId () const;
inline int getDegree () const;
inline int getRpCount () const;
Edge* getFrom () const;
inline Vertex* getPredecessor () const;
inline Vertex* getNeighbor ( Edge* ) const;
inline void setDistance ( DbU::Unit );
inline void setStamp ( int );
inline void setConnexId ( int );
inline void setBranchId ( int );
inline void setDegree ( int );
inline void incDegree ( int delta=1 );
inline void setRpCount ( int );
inline void incRpCount ( int delta=1 );
inline void setFrom ( Edge* );
inline void add ( RoutingPad* );
inline void clearRps ();
inline Contact* breakGoThrough ( Net* );
// Analog related methods.
inline bool isNorth ( const Vertex* ) const;
inline bool isSouth ( const Vertex* ) const;
inline bool isEast ( const Vertex* ) const;
inline bool isWest ( const Vertex* ) const;
inline bool isNRestricted () const;
inline bool isSRestricted () const;
inline bool isERestricted () const;
inline bool isWRestricted () const;
inline bool hasRestrictions () const;
void setRestricted ();
void clearRestriction ();
inline void setNRestricted ();
inline void setSRestricted ();
inline void setERestricted ();
inline void setWRestricted ();
bool hasRP ( Net* ) const;
bool hasVRP ( Net* ) const;
bool hasHRP ( Net* ) const;
static bool isRestricted ( const Vertex* v1, const Vertex* v2, const Edge* e, DbU::Unit hpitch = 0, DbU::Unit vpitch = 0, Net* net = NULL);
bool areSameSide ( const Vertex*, const Vertex* ) const;
inline bool isFromFrom2 () const;
inline bool isFrom2Mode () const;
inline bool isAxisTarget () const;
inline bool isiHorizontal () const;
inline bool isiVertical () const;
inline void setFlags ( uint32_t );
inline void unsetFlags ( uint32_t );
bool isH () const;
bool isV () const;
inline void createAData ();
Point getStartPathPoint ( const Vertex* next ) const;
Point getNextPathPoint ( Point, const Vertex* ) const;
//////////////////////////////////////// GRDATA
void setIntervals ( Vertex* );
inline bool hasAData () const;
bool isiSet () const;
@ -297,10 +292,10 @@ namespace Anabatic {
GCell* getGPrev ( uint32_t criteria=0 ) const;
// Inspector support.
string _getString () const;
string _getString () const;
private:
Vertex ( const Vertex& );
Vertex& operator= ( const Vertex& );
Vertex ( const Vertex& );
Vertex& operator= ( const Vertex& );
private:
size_t _id;
GCell* _gcell;

View File

@ -27,6 +27,8 @@ projects = [
, "equinox"
, "solstice"
, "oroshi"
, "bora"
, "karakaze"
, "unicorn"
, "tutorial"
#, "testbench"

34
bora/CMakeLists.txt Normal file
View File

@ -0,0 +1,34 @@
# -*- explicit-buffer-name: "CMakeLists.txt<bora>" -*-
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
project(BORA)
option(BUILD_DOC "Build the documentation (doxygen)" OFF)
cmake_minimum_required(VERSION 2.8.9)
set(ignoreVariables "${BUILD_DOC}")
list(INSERT CMAKE_MODULE_PATH 0 "${DESTDIR}$ENV{CORIOLIS_TOP}/share/cmake/Modules/")
find_package(Bootstrap REQUIRED)
setup_project_paths(CORIOLIS)
set_cmake_policies()
setup_boost(program_options filesystem python regex)
setup_qt()
setup_qwt()
find_package(Libexecinfo REQUIRED)
find_package(PythonLibs 2 REQUIRED)
find_package(PythonSitePackages REQUIRED)
find_package(LEFDEF REQUIRED)
find_package(VLSISAPD REQUIRED)
find_package(HURRICANE REQUIRED)
find_package(CORIOLIS REQUIRED)
find_package(ANABATIC REQUIRED)
find_package(KATANA REQUIRED)
find_package(Doxygen)
add_subdirectory(src)
#add_subdirectory(cmake_modules)
#add_subdirectory(doc)

351
bora/src/BoraEngine.cpp Normal file
View File

@ -0,0 +1,351 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./BoraEngine.cpp" |
// +-----------------------------------------------------------------+
#include <sstream>
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QLineEdit>
#include <QInputDialog>
#include <QFileDialog>
#include <QMessageBox>
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "hurricane/Breakpoint.h"
#include "hurricane/DebugSession.h"
#include "hurricane/DataBase.h"
#include "hurricane/Library.h"
#include "hurricane/viewer/HApplication.h"
#include "hurricane/viewer/ExceptionWidget.h"
#include "hurricane/UpdateSession.h"
#include "hurricane/analog/AnalogCellExtension.h"
#include "hurricane/analog/LayoutGenerator.h"
#include "hurricane/analog/TransistorFamily.h"
#include "crlcore/RoutingGauge.h"
#include "crlcore/GdsDriver.h"
#include "anabatic/Dijkstra.h"
#include "katana/KatanaEngine.h"
#include "bora/SlicingPlotWidget.h"
#include "bora/SlicingDataWidget.h"
#include "bora/AnalogDistance.h"
#include "bora/BoraEngine.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::DebugSession;
using Hurricane::NetRoutingState;
using Hurricane::NetRoutingExtension;
using Hurricane::Net;
using Hurricane::Cell;
using Hurricane::Box;
using Hurricane::Transformation;
using Hurricane::UpdateSession;
using Analog::AnalogCellExtension;
using Analog::Device;
using CRL::GdsDriver;
// -------------------------------------------------------------------
// Class : "BoraEngine".
Name BoraEngine::_toolName = "Bora";
bool first = false;
const Name& BoraEngine::staticGetName ()
{ return _toolName; }
BoraEngine* BoraEngine::get ( const Cell* cell )
{
return static_cast<BoraEngine*>( ToolEngine::get(cell,staticGetName()) );
}
BoraEngine::BoraEngine ( Cell* cell )
: Super (cell)
, _viewer(NULL)
{ }
void BoraEngine::_postCreate ()
{
Super::_postCreate();
}
BoraEngine* BoraEngine::create ( Cell* cell )
{
cdebug_log(539,0) << "BoraEngine* BoraEngine::create( Cell* cell )" << endl;
BoraEngine* bora = new BoraEngine( cell );
bora->_postCreate();
return bora;
}
BoraEngine::~BoraEngine ()
{ }
void BoraEngine::_preDestroy ()
{
cdebug.log(539,1) << "BoraEngine::_preDestroy()" << endl;
cmess1 << " o Deleting ToolEngine<" << getName() << "> from Cell <"
<< getCell()->getName() << ">" << endl;
cdebug.tabw(539,-1);
Super::_preDestroy();
}
const Name& BoraEngine::getName () const
{ return _toolName; }
void BoraEngine::setViewer ( Hurricane::CellViewer* viewer )
{ _viewer = viewer; }
void BoraEngine::updateSlicingTree()
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( getCell() );
if (slicingtree) {
cmess1 << " o Updating the SlicingTree." << endl;
startMeasures();
slicingtree->updateGlobalSize();
stopMeasures();
printMeasures();
} else {
cerr << Error( "BoraEngine::updateSlicingTree(): "
"Cannot update, the SlicingTree needs to be created first." ) << endl;
}
}
void BoraEngine::updatePlacement ( DbU::Unit width, DbU::Unit height )
{
cdebug_log(536,1) << "BoraEngine::updatePlacement(DbU::Unit,DbU::Unit)" << endl;
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( getCell() );
if (slicingtree){
BoxSet* bs = slicingtree->getPairHW( width, height );
if (bs) updatePlacement( bs );
} else
cerr << "[Error]: The slicing tree needs to be created first." << endl;
cdebug_tabw(536,-1);
}
void BoraEngine::updatePlacement ( size_t index )
{
cdebug_log(536,1) << "BoraEngine::updatePlacement(int)" << endl;
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( getCell() );
if (slicingtree) {
cmess2 << Dots::asInt( " o Selecting analog placement (index)", index ) << endl;
BoxSet* bs = slicingtree->getPairHW( index );
if (bs) updatePlacement( bs );
} else
cerr << Error( "BoraEngine::updatePlacement(): The slicing tree needs to be created first." ) << endl;
cdebug_tabw(536,-1);
}
void BoraEngine::updatePlacement ( BoxSet* boxSet )
{
cdebug_log(536,1) << "BoraEngine::updatePlacement(BoxSet*)" << endl;
//DebugSession::addToTrace( getCell(), "vin+" );
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( getCell() );
if (slicingtree) {
NodeSets nodeSets = slicingtree->getNodeSets();
if (not nodeSets.empty()) {
Cell* cell = SlicingNode::getCell();
Katana::KatanaEngine* katana = Katana::KatanaEngine::get( cell );
if (katana) katana->destroy();
slicingtree->_setGlobalSize( boxSet );
if (_viewer) emitCellPreModificated ();
UpdateSession::open();
slicingtree->clearGlobalRouting();
slicingtree->place();
CRL::RoutingGauge* rg = slicingtree->getRoutingGauge();
DbU::Unit hpitch = rg->getHorizontalPitch();
DbU::Unit vpitch = rg->getVerticalPitch();
slicingtree->expandRoutingChannel( hpitch*2, vpitch*2 );
slicingtree->replace();
slicingtree->updateSymNetAxis();
UpdateSession::close();
katana = Katana::KatanaEngine::create(cell);
katana->openSession();
Anabatic::GCell* gcell = katana->getSouthWestGCell();
slicingtree->setKatana( katana );
slicingtree->setGCell( gcell );
slicingtree->clearRoutingPads();
slicingtree->flattenDigitalNets();
slicingtree->createRoutingPads();
slicingtree->resetWireOccupation();
Katana::Session::close();
katana->openSession();
Anabatic::Dijkstra* dijkstra = new Anabatic::Dijkstra( katana );
AnalogDistance distance = AnalogDistance( cell, hpitch, vpitch );
dijkstra->setDistance( distance );
for ( Net* net : cell->getNets() ) {
distance.setNet( net );
dijkstra->load( net );
NetRoutingState* state = NetRoutingExtension::get( net );
if ( not (state and state->isSymSlave()) ) {
slicingtree->setVertexRestriction( net, katana );
dijkstra->run();
slicingtree->updateWireOccupation( dijkstra->getSources() );
}
}
katana->setState( Anabatic::EngineState::EngineGlobalLoaded );
slicingtree->expandRoutingChannel();
slicingtree->replace();
slicingtree->updateSymNetAxis();
katana->updateMatrix();
katana->analogInit();
Katana::Session::close();
if (_viewer) {
getCellWidget()->fitToContents();
emitCellPostModificated();
}
} else
cerr << Error( "BoraEngine::updatePlacement(): The slicing tree can not be placed.\n"
" The slicing tree needs to be updated first." ) << endl;
} else
cerr << Error( "BoraEngine::updatePlacement(): The slicing tree can not be set.\n"
" The slicing tree needs to be created first." ) << endl;
cdebug_tabw(536,-1);
}
void BoraEngine::setToleranceRatio ( DbU::Unit ratioh, DbU::Unit ratiow )
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
if (slicingtree) {
slicingtree->setToleranceRatioH( ratioh );
slicingtree->setToleranceRatioW( ratiow );
resetPlacement();
} else
cerr << Error( "BoraEngine::setToleranceRatio(): The slicing tree's tolerance ratio cannot be set.\n"
" The slicing tree needs to be created first." ) << endl;
}
void BoraEngine::setToleranceBand ( DbU::Unit bandh, DbU::Unit bandw )
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
if (slicingtree) {
slicingtree->setToleranceBandH( bandh );
slicingtree->setToleranceBandW( bandw );
resetPlacement();
} else
cerr << Error( "BoraEngine::setToleranceBand(): The slicing tree's tolerance ratio can not be set.\n"
" The slicing tree needs to be created first." ) << endl;
}
void BoraEngine::showPareto ()
{ }
void BoraEngine::resetPlacement ()
{
emitCellPreModificated ();
DbU::Unit y = 0;
for ( Instance* instance : getCell()->getInstances() ) {
UpdateSession::open();
instance->setTransformation ( Transformation( 0, y ) );
instance->setPlacementStatus( Instance::PlacementStatus::PLACED );
UpdateSession::close();
Cell* model = instance->getMasterCell();
if (model) {
Device* device = dynamic_cast<Device*>( model );
if (device) y += device->getAbutmentBox().getHeight();
}
}
getCellWidget()->fitToContents();
emitCellPostModificated();
}
DbU::Unit BoraEngine::getToleranceRatioH () const
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
if (slicingtree) return slicingtree->getToleranceRatioH();
cerr << Error( "BoraEngine::getToleranceRatioH(): The slicing tree needs to be created first." ) << endl;
return 0;
}
DbU::Unit BoraEngine::getToleranceRatioW () const
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
if (slicingtree) return slicingtree->getToleranceRatioW();
cerr << Error( "BoraEngine::getToleranceRatioW(): The slicing tree needs to be created first." ) << endl;
return 0;
}
DbU::Unit BoraEngine::getToleranceBandH () const
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
if (slicingtree) return slicingtree->getToleranceBandH();
cerr << Error( "BoraEngine::getToleranceBandH(): The slicing tree needs to be created first." ) << endl;
return 0;
}
DbU::Unit BoraEngine::getToleranceBandW () const
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
if (slicingtree) return slicingtree->getToleranceBandW();
cerr << Error( "BoraEngine::getToleranceBandW(): The slicing tree needs to be created first." ) << endl;
return 0;
}
} // Bora namespace.

414
bora/src/BoxSet.cpp Normal file
View File

@ -0,0 +1,414 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./BoxSet.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "bora/BoxSet.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::Warning;
// -------------------------------------------------------------------
// Class : "Bora::BoxSet".
BoxSet::BoxSet ( DbU::Unit height, DbU::Unit width )
: _height(height)
, _width (width)
, _cpt (1)
{ }
BoxSet::BoxSet ( BoxSet* boxSet )
: _height(0)
, _width (0)
, _cpt (1)
{
if (boxSet) {
_height = boxSet->getHeight();
_width = boxSet->getWidth();
_cpt = boxSet->getCpt();
}
}
BoxSet::~BoxSet ()
{ }
void BoxSet::print () const
{
cerr << "area: " << setprecision(4) << getOccupationArea() ;
cerr << "%, \t cpt: " << getCpt();
if ((getWidth() == 0) && (getHeight() == 0)) cerr << ", \t ratio (W/H):inf";
else cerr << ", \t ratio (W/H):" << setprecision(2) << getWidth()/getHeight();
cerr << ", \t ratio (W*H):" << setprecision(4) << DbU::getPhysical(getWidth(),DbU::Micro) * DbU::getPhysical(getHeight(),DbU::Micro) << "um²";
if (getType() == DeviceSNode){ cerr << ", \t Nfing: " << getNFing(); }
cerr << ", \t H: " << setprecision(4) << DbU::getPhysical(getHeight(),DbU::Micro) << "um" ;
cerr << ", W: " << DbU::getPhysical(getWidth(),DbU::Micro)<< "um";
cerr << endl;
}
const vector<BoxSet*>& BoxSet::getSet () const
{
cerr << Warning( "BoxSet::getSet(): DBoxSet and RHVBoxSet do not have vector of BoxSets." ) << endl;
static const vector<BoxSet*> emptyBoxSet = vector<BoxSet*>();
return emptyBoxSet;
}
int BoxSet::getNFing () const
{
cerr << Warning( "BoxSet::getNFing(): Only DBoxSet has fingers." ) << endl;
return 0;
}
void BoxSet::destroy()
{ delete this; }
void BoxSet::setWidth ( DbU::Unit )
{ cerr << Warning( "BoxSet::setWidth(): Must never be called." ) << endl; }
void BoxSet::setHeight ( DbU::Unit )
{ cerr << Warning( "BoxSet::setWidth(): Must never be called." ) << endl; }
// -------------------------------------------------------------------
// Class : "Bora::HVBoxSet".
HVBoxSet::HVBoxSet ( const vector<BoxSet*>& dimensionSet, DbU::Unit height, DbU::Unit width )
: BoxSet(height,width)
,_dimensionSet(dimensionSet)
{ }
HVBoxSet::HVBoxSet ( HVBoxSet* boxSet )
: BoxSet( boxSet )
, _dimensionSet( boxSet->getSet() )
{ }
HVBoxSet::~HVBoxSet ()
{ }
double HVBoxSet::getDevicesArea () const
{
double area = 0;
for ( BoxSet* bs : _dimensionSet ) area += bs->getDevicesArea();
return area;
}
// -------------------------------------------------------------------
// Class : "Bora::HBoxSet".
int HBoxSet::_count = 0;
int HBoxSet::_countAll = 0;
HBoxSet::HBoxSet ( const vector<BoxSet*>& dimensionSet, DbU::Unit height, DbU::Unit width )
: HVBoxSet( dimensionSet, height, width )
{
if ((_height == 0) and (_width == 0)) {
calculateHeight();
calculateWidth ();
}
}
HBoxSet::HBoxSet( HBoxSet* boxSet )
: HVBoxSet( boxSet )
{
++_count;
++_countAll;
}
HBoxSet::~HBoxSet ()
{
--_count;
}
HBoxSet* HBoxSet::create ( const vector<BoxSet*>& dimensionSet, DbU::Unit height, DbU::Unit width )
{
return new HBoxSet( dimensionSet, height, width );
}
HBoxSet* HBoxSet::clone ()
{ return HBoxSet::create( getSet(), getHeight(), getWidth() ); }
void HBoxSet::calculateHeight ()
{
DbU::Unit currentH = 0;
for ( BoxSet* bs : _dimensionSet ) currentH += bs->getHeight();
_height = currentH;
}
void HBoxSet::calculateWidth ()
{
DbU::Unit currentW = 0;
for ( BoxSet* bs : _dimensionSet ) {
if (currentW < bs->getWidth()) currentW = bs->getWidth();
}
_width = currentW;
}
void HBoxSet::destroy()
{
BoxSet::destroy();
}
// -------------------------------------------------------------------
// Class : "Bora::VBoxSet".
int VBoxSet::_count = 0;
int VBoxSet::_countAll = 0;
VBoxSet::VBoxSet ( const vector<BoxSet*>& dimensionSet, DbU::Unit height, DbU::Unit width )
: HVBoxSet( dimensionSet, height, width )
{
++_count;
++_countAll;
if ((_height == 0) and (_width == 0)){
calculateHeight();
calculateWidth ();
}
}
VBoxSet::VBoxSet ( VBoxSet* boxSet )
: HVBoxSet( boxSet )
{ }
VBoxSet::~VBoxSet ()
{
--_count;
}
VBoxSet* VBoxSet::create ( const vector<BoxSet*>& dimensionSet, DbU::Unit height, DbU::Unit width )
{
return new VBoxSet( dimensionSet, height, width );
}
VBoxSet* VBoxSet::clone ()
{
return VBoxSet::create( getSet(), getHeight(), getWidth() );
}
void VBoxSet::calculateHeight()
{
DbU::Unit currentH = 0;
for ( BoxSet* bs : _dimensionSet ) {
if (currentH < bs->getHeight()) currentH = bs->getHeight();
}
_height = currentH;
}
void VBoxSet::calculateWidth ()
{
DbU::Unit currentW = 0;
for ( BoxSet* bs : _dimensionSet ) currentW += bs->getWidth();
_width = currentW;
}
void VBoxSet::destroy()
{
BoxSet::destroy();
}
// -------------------------------------------------------------------
// Class : "Bora::DBoxSet".
int DBoxSet::_count = 0;
int DBoxSet::_countAll = 0;
DBoxSet::DBoxSet ( DbU::Unit height, DbU::Unit width, int nfing )
: BoxSet( height, width )
, _nfing(nfing)
{
++_count;
++_countAll;
}
DBoxSet::DBoxSet ( DBoxSet* boxSet )
: BoxSet( boxSet )
, _nfing( boxSet->getNFing() )
{ }
DBoxSet::~DBoxSet ()
{
--_count;
}
DBoxSet* DBoxSet::create ( DbU::Unit height, DbU::Unit width, int nfing )
{
return new DBoxSet( height, width, nfing );
}
DBoxSet* DBoxSet::clone ()
{
return DBoxSet::create( getHeight(), getWidth(), getNFing() );
}
void DBoxSet::destroy()
{
BoxSet::destroy();
}
// -------------------------------------------------------------------
// Class : "Bora::RHVBoxSet".
int RHVBoxSet::_count = 0;
int RHVBoxSet::_countAll = 0;
RHVBoxSet::RHVBoxSet ( DbU::Unit height, DbU::Unit width )
: BoxSet( height, width )
{
_width = width;
_height = height;
}
RHVBoxSet::RHVBoxSet ( RHVBoxSet* boxSet )
: BoxSet( boxSet )
{ }
RHVBoxSet::~RHVBoxSet ()
{ }
void RHVBoxSet::destroy ()
{
delete this;
}
void RHVBoxSet::print () const
{
cerr << "area: " << setprecision(4) << getOccupationArea() ;
cerr << "%, \t cpt: " << getCpt();
cerr << ", \t H: " << setprecision(4) << DbU::getPhysical(_height,DbU::Micro) << "um" ;
cerr << ", W: " << DbU::getPhysical(_width,DbU::Micro)<< "um";
cerr << endl;
}
// -------------------------------------------------------------------
// Class : "Bora::RHBoxSet".
RHBoxSet::RHBoxSet ( DbU::Unit height )
: RHVBoxSet( height, 0 )
{
_count++;
_countAll++;
}
RHBoxSet::RHBoxSet ( RHBoxSet* boxSet )
: RHVBoxSet( boxSet )
{ }
RHBoxSet::~RHBoxSet ()
{ }
RHBoxSet* RHBoxSet::create ( DbU::Unit height )
{
return new RHBoxSet ( height );
}
RHBoxSet* RHBoxSet::clone ()
{
return RHBoxSet::create( getHeight() );
}
// -------------------------------------------------------------------
// Class : "Bora::RVBoxSet".
RVBoxSet::RVBoxSet ( DbU::Unit width )
: RHVBoxSet( 0, width )
{
++_count;
++_countAll;
}
RVBoxSet::RVBoxSet( RVBoxSet* boxSet )
: RHVBoxSet( boxSet )
{ }
RVBoxSet::~RVBoxSet ()
{ }
RVBoxSet* RVBoxSet::create ( DbU::Unit width )
{
return new RVBoxSet( width );
}
RVBoxSet* RVBoxSet::clone()
{
return RVBoxSet::create( getWidth() );
}
} // Bora namespace.

112
bora/src/CMakeLists.txt Normal file
View File

@ -0,0 +1,112 @@
# -*- explicit-buffer-name: "CMakeLists.txt<bora/src>" -*-
include_directories( ${BORA_SOURCE_DIR}/src
${CORIOLIS_INCLUDE_DIR}
${HURRICANE_INCLUDE_DIR}
${CONFIGURATION_INCLUDE_DIR}
${Boost_INCLUDE_DIRS}
${QWT_INCLUDE_DIR}
${QtX_INCLUDE_DIR}
${PYTHON_INCLUDE_PATH}
)
set( includes bora/Constants.h
bora/BoxSet.h
bora/NodeSets.h
bora/HVSetState.h
bora/ChannelRouting.h
bora/SlicingNode.h
bora/HVSlicingNode.h
bora/HSlicingNode.h
bora/VSlicingNode.h
bora/DSlicingNode.h
bora/RHVSlicingNode.h
bora/RHSlicingNode.h
bora/RVSlicingNode.h
bora/AnalogDistance.h
bora/Pareto.h
bora/BoraEngine.h
)
set( pyIncludes bora/PySlicingNode.h
bora/PyDSlicingNode.h
bora/PyHSlicingNode.h
bora/PyVSlicingNode.h
bora/PyRHSlicingNode.h
bora/PyRVSlicingNode.h
bora/PyBoraEngine.h
bora/PyGraphicBoraEngine.h
)
set( mocIncludes bora/SlicingDataModel.h
bora/SlicingDataWidget.h
bora/SlicingPlotWidget.h
bora/SlicingWidget.h
bora/GraphicBoraEngine.h
)
set( cpps BoxSet.cpp
NodeSets.cpp
HVSetState.cpp
SlicingNode.cpp
HVSlicingNode.cpp
HSlicingNode.cpp
VSlicingNode.cpp
DSlicingNode.cpp
RHVSlicingNode.cpp
RHSlicingNode.cpp
RVSlicingNode.cpp
ChannelRouting.cpp
BoraEngine.cpp
Pareto.cpp
SlicingDataModel.cpp
SlicingDataWidget.cpp
SlicingPlotWidget.cpp
SlicingWidget.cpp
GraphicBoraEngine.cpp
)
set( pyCpps PySlicingNode.cpp
PyDSlicingNode.cpp
PyHSlicingNode.cpp
PyRHSlicingNode.cpp
PyRVSlicingNode.cpp
PyVSlicingNode.cpp
PyBoraEngine.cpp
PyGraphicBoraEngine.cpp
PyBora.cpp
)
qtX_wrap_cpp( mocCpps ${mocIncludes} )
set( depLibs ${KATANA_LIBRARIES}
${ANABATIC_LIBRARIES}
${CORIOLIS_PYTHON_LIBRARIES}
${CORIOLIS_LIBRARIES}
${HURRICANE_PYTHON_LIBRARIES}
${HURRICANE_ANALOG_LIBRARIES}
${HURRICANE_GRAPHICAL_LIBRARIES}
${HURRICANE_LIBRARIES}
${CONFIGURATION_LIBRARY}
${CIF_LIBRARY}
${AGDS_LIBRARY}
${LEFDEF_LIBRARIES}
${OA_LIBRARIES}
${QWT_LIBRARY}
${QtX_LIBRARIES}
${Boost_LIBRARIES}
${PYTHON_LIBRARIES} -lutil
)
add_library( bora ${cpps} ${mocCpps} )
set_target_properties( bora PROPERTIES VERSION 1.0 SOVERSION 1 )
target_link_libraries( bora ${depLibs} )
add_python_module( "${pyCpps}"
"${pyIncludes}"
"pybora;1.0;1"
Bora
"bora;${depLibs}"
include/coriolis2/bora
)
install( TARGETS bora DESTINATION lib${LIB_SUFFIX} )
install( FILES ${includes}
${mocIncludes} DESTINATION include/coriolis2/bora )

160
bora/src/ChannelRouting.cpp Normal file
View File

@ -0,0 +1,160 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./ChannelRouting.cpp" |
// +-----------------------------------------------------------------+
#include "bora/ChannelRouting.h"
namespace Bora {
using namespace std;
// -------------------------------------------------------------------
// Class : "Bora::ChannelRouting".
ChannelRouting::ChannelRouting ()
{ }
ChannelRouting::~ChannelRouting ()
{ }
ChannelRouting* ChannelRouting::create ()
{
return new ChannelRouting();
}
void ChannelRouting::destroy ()
{
delete this;
}
void ChannelRouting::reset ()
{
_limits.clear();
_counts.clear();
}
int ChannelRouting::getMaxCount () const
{
int maxCount = 0;
for ( int count : _counts ) maxCount = std::max( maxCount, count );
return maxCount;
}
void ChannelRouting::insertChannel ( DbU::Unit xy1, DbU::Unit xy2, unsigned int w )
{
cdebug_log(535,0) << "ChannelRouting::insertChannel(DbU::Unit,DbU::Unit,unsigned) ["
<< DbU::getValueString(xy1) << " : "
<< DbU::getValueString(xy2) << "] width:"
<< w << endl;
for ( unsigned int i=0; i<w; ++i ) insertChannel( xy1, xy2 );
}
void ChannelRouting::insertChannel ( DbU::Unit xy1, DbU::Unit xy2 )
{
cdebug_log(535,0) << "ChannelRouting::insertChannel(DbU::Unit,DbU::Unit) ["
<< DbU::getValueString(xy1) << " : "
<< DbU::getValueString(xy2) << "]" << endl;
DbU::Unit min = xy1;
DbU::Unit max = xy2;
if (_limits.empty()) {
_limits.push_back( min );
_limits.push_back( max );
_counts.push_back( 1 );
} else {
if (max < _limits.front()) {
_limits.insert( _limits.begin(), max );
_limits.insert( _limits.begin(), min );
_counts.insert( _counts.begin(), 0 );
_counts.insert( _counts.begin(), 1 );
} else if (min > _limits.back()) {
_limits.push_back( min );
_limits.push_back( max );
_counts.push_back( 0 );
_counts.push_back( 1 );
} else {
int index = 0;
vector<DbU::Unit>::iterator itL = _limits.begin();
vector<int>::iterator itC = _counts.begin();
if (min < (*itL)) {
_limits.insert( itL, min );
_counts.insert( itC, 1 );
} else {
while( ((*itL) < min) and (itL != _limits.end()) ) {
itL++;
index++;
if (itC != _counts.end()) itC++;
}
if ((*itL) != min) {
_limits.insert( itL, min );
_counts.insert( itC, *(itC-1) );
itL = _limits.begin() + index;
itC = _counts.begin() + index;
}
itL = _limits.begin() + index;
itC = _counts.begin() + index;
while( ((*itL) < max) && (itL != _limits.end()) ){
itL++;
index++;
if (itC != _counts.end()) {
(*itC) += 1;
itC++;
}
}
if (itL != _limits.end()) {
if ((*(itL)) > max){
_limits.insert( itL, max );
_counts.insert( itC, *(itC-1)-1 );
}
} else {
if ((*(itL-1)) != max) {
_limits.push_back( max );
_counts.push_back( 1 );
}
}
}
}
}
}
void ChannelRouting::print () const
{
cerr << "limits: ";
for ( DbU::Unit limit : _limits ) cerr << DbU::getPhysical(limit,DbU::Micro) << " - ";
cerr << endl;
cerr << "count: ";
for ( int count : _counts ) cerr << count << " - ";
cerr << endl;
}
} // Bora namespace.

525
bora/src/DSlicingNode.cpp Normal file
View File

@ -0,0 +1,525 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./DSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "hurricane/analog/Device.h"
#include "hurricane/analog/FormFactorParameter.h"
#include "hurricane/analog/TransistorFamily.h"
#include "hurricane/analog/Transistor.h"
#include "hurricane/analog/CommonSourcePair.h"
#include "hurricane/analog/DifferentialPair.h"
#include "hurricane/analog/LayoutGenerator.h"
#include "anabatic/Session.h"
#include "bora/DSlicingNode.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::Warning;
using Hurricane::Transformation;
using Analog::Device;
using Analog::FormFactorParameter;
using Analog::TransistorFamily;
using Analog::Transistor;
using Analog::CommonSourcePair;
using Analog::DifferentialPair;
using Analog::LayoutGenerator;
using Anabatic::Session;
// -------------------------------------------------------------------
// Class : "Bora::DSlicingNode".
int DSlicingNode::_count = 0;
int DSlicingNode::_countAll = 0;
DSlicingNode::DSlicingNode ( unsigned int type
, NodeSets* nodeSets
, unsigned int alignment
, Instance* instance
, BoxSet* boxSet
)
: SlicingNode( type, nodeSets, alignment, boxSet )
, _instance(instance)
{ ++_count; }
DSlicingNode::~DSlicingNode ()
{ --_count; }
DSlicingNode* DSlicingNode::create ( NodeSets* nodeSets
, unsigned int alignment
, Instance* instance
, BoxSet* boxSet
)
{
_countAll++;
return new DSlicingNode( DeviceSNode, nodeSets, alignment, instance, boxSet );
}
void DSlicingNode::print () const
{
cerr << "- Print from Slicing Node - " << endl;
cerr << "SlicingType: Device Node" << endl;
if (isAlignLeft ()) cerr << "Alignment : Left" << endl;
else if (isAlignCenter()) cerr << "Alignment : Middle" << endl;
else if (isAlignRight ()) cerr << "Alignment : Right" << endl;
else if (isAlignTop ()) cerr << "Alignment : Top" << endl;
else if (isAlignBottom()) cerr << "Alignment : Bottom" << endl;
else cerr << "Alignment : Unknown" << endl;
cerr << "NFingers : " << getNFing() << endl;
if (_instance) cerr << "Instance : " << _instance << endl;
else cerr << "Instance : None" << endl;
SlicingNode::print();
}
DSlicingNode* DSlicingNode::clone ( unsigned int tr )
{
DSlicingNode* node = DSlicingNode::create( _nodeSets->clone()
, getAlignment()
, getInstance()
, getBoxSet()
);
node->setPreset( getPreset() );
node->setSet ( getSet() );
node->setPlaced( getPlaced() );
return node;
}
void DSlicingNode::setNFing ( int nfing )
{ _boxSet = _nodeSets->find( nfing ); }
int DSlicingNode::getNFing () const
{ return (_boxSet) ? _boxSet->getNFing() : 1 ; }
double DSlicingNode::getStartParameter () const
{ return _nodeSets->getStartParameter(); }
double DSlicingNode::getStepParameter () const
{ return _nodeSets->getStepParameter(); }
double DSlicingNode::getCountParameter () const
{ return _nodeSets->getCountParameter(); }
void DSlicingNode::_place( DbU::Unit x, DbU::Unit y, bool replace )
{
cdebug_log(536,1) << "DSlicingNode::_place(DbU::Unit,DbU::Unit,bool replace)" << endl;
if (replace){
SlicingNode::place( x, y );
if (_instance) {
Cell* model = _instance->getMasterCell();
_instance->setTransformation ( Transformation( _x - model->getAbutmentBox().getXMin()
, _y - model->getAbutmentBox().getYMin() ) );
_instance->setPlacementStatus( Instance::PlacementStatus::PLACED );
}
} else {
if (isSet()) {
SlicingNode::place( x, y );
if (_instance) {
Cell* model = _instance->getMasterCell();
Device* device = dynamic_cast<Device*>( model );
if (device) {
TransistorFamily* tf = dynamic_cast<TransistorFamily*>( device );
if (tf) {
tf->setNfing( getNFing() );
FormFactorParameter* pff = NULL;
if ((pff = dynamic_cast<FormFactorParameter*>(tf->getParameter("M"))) != NULL)
pff->setValue( tf->getNfing() );
shared_ptr<LayoutGenerator> layoutGenerator ( new LayoutGenerator() );
layoutGenerator->setDevice (device);
layoutGenerator->drawLayout();
}
}
_instance->setTransformation ( Transformation( _x - model->getAbutmentBox().getXMin()
, _y - model->getAbutmentBox().getYMin() ) );
_instance->setPlacementStatus( Instance::PlacementStatus::PLACED );
}
}
}
cdebug_tabw(536,-1);
}
void DSlicingNode::place ( DbU::Unit x, DbU::Unit y )
{ DSlicingNode::_place(x, y); }
void DSlicingNode::preDestroy ()
{
SlicingNode::preDestroy();
}
void DSlicingNode::destroy()
{
DSlicingNode::preDestroy();
delete this;
}
void DSlicingNode::preRecursiveDestroy ()
{
SlicingNode::preRecursiveDestroy();
}
void DSlicingNode::recursiveDestroy ()
{
DSlicingNode::preRecursiveDestroy();
delete this;
}
bool DSlicingNode::checkInitialPlacement ( int& cpt ) const
{
// Notes: Initial placement criteria is having at least 2 devices
// placed at (x,y) = (0 0)
//
// jpc: Very suspicious code, have to check how it is called.
bool initialPlacement = false;
if (cpt < 2) {
if ( (_x == 0) and (_y == 0) ) {
cpt++;
if (cpt < 2) initialPlacement = true;
} else
initialPlacement = true;
}
return initialPlacement;
}
void DSlicingNode::setGCell ( Anabatic::GCell* gcell )
{
cdebug_log(535,0) << "DSlicingNode::setGCell(Anabatic::GCell*) " << gcell << endl;
if (getParent()) {
if (getParent()->getType() == HorizontalSNode) {
if (getAlignment() == AlignLeft) {
Anabatic::GCell* strut = gcell->vcut( getX() + getWidth() );
_gcell = gcell;
strut->setType( Anabatic::Flags::StrutGCell );
} else if (getAlignment() == AlignCenter) {
_gcell = gcell->vcut( getX() );
Anabatic::GCell* strut = _gcell->vcut( getX() + getWidth() );
gcell->setType( Anabatic::Flags::StrutGCell );
strut->setType( Anabatic::Flags::StrutGCell );
} else if (getAlignment() == AlignRight ){
_gcell = gcell->vcut( getX() );
gcell->setType( Anabatic::Flags::StrutGCell );
}
} else if (getParent()->getType() == VerticalSNode) {
if (getAlignment() == AlignBottom){
Anabatic::GCell* strut = gcell->hcut( getY() + getHeight() );
_gcell = gcell;
strut->setType( Anabatic::Flags::StrutGCell );
} else if (getAlignment() == AlignCenter) {
_gcell = gcell->hcut( getY() );
Anabatic::GCell* strut = _gcell->hcut( getY() + getHeight() );
gcell->setType( Anabatic::Flags::StrutGCell );
strut->setType( Anabatic::Flags::StrutGCell );
} else if (getAlignment() == AlignTop) {
_gcell = gcell->hcut( getY() );
gcell->setType( Anabatic::Flags::StrutGCell );
}
} else
_gcell = gcell;
} else
_gcell = gcell;
if (_gcell) {
if (dynamic_cast<Device*>(_instance->getMasterCell())) {
_gcell->setType( Anabatic::Flags::DeviceGCell );
} else {
_gcell->setType( Anabatic::Flags::MatrixGCell );
if( (_gcell->getWidth() > Anabatic::Session::getSliceHeight())
and (_gcell->getHeight() > Anabatic::Session::getSliceHeight()) ) {
_gcell->doGrid();
}
}
}
cdebug_log(535,0) << "> Device:" << _instance << endl;
cdebug_log(535,0) << "> GCell: " << _gcell << endl;
}
bool DSlicingNode::isSame ( SlicingNode* node, unsigned int flags ) const
{
bool isSame = _nodeSets->compare( node->getNodeSets(), flags );
if ( not isSame and (flags & ShowDiff) )
cerr << "DSlicingNode::isSame() Check " << this << " vs. " << node << endl;
return isSame;
}
bool DSlicingNode::isSymmetric ( SlicingNode* node, unsigned int symmetryType, unsigned int flags ) const
{
bool isSame = _nodeSets->compare( node->getNodeSets(), flags );
if (not isSame and (flags & ShowDiff))
cerr << Warning( "DSlicingNode::isSymmetric(): Different nodesets Check %s vs. %s."
, getString(this).c_str(), getString(node).c_str() ) << endl;
if (_instance) {
Cell* model1 = _instance->getMasterCell();
Cell* model2 = node->getInstance()->getMasterCell();
Device* device1 = dynamic_cast<Device*>( model1 );
Device* device2 = dynamic_cast<Device*>( model2 );
if (device1 and device2) {
CommonSourcePair* csp1 = dynamic_cast<CommonSourcePair*>( model1 );
DifferentialPair* dp1 = dynamic_cast<DifferentialPair*>( model1 );
Transistor* ts1 = dynamic_cast<Transistor* >( model1 );
CommonSourcePair* csp2 = dynamic_cast<CommonSourcePair*>( model2 );
DifferentialPair* dp2 = dynamic_cast<DifferentialPair*>( model2 );
Transistor* ts2 = dynamic_cast<Transistor* >( model2 );
if (csp1 and csp2) isSame = csp1->isSame( csp2 );
else if (dp1 and dp2 ) isSame = dp1 ->isSame( dp2 );
else if (ts1 and ts2 ) isSame = ts1 ->isSame( ts2 );
else isSame = false;
}
if (not isSame)
cerr << Warning( "DSlicingNode::isSymmetric(): Different devices. Check %s vs. %s."
, getString(this).c_str(), getString(node).c_str() ) << endl;
}
return isSame;
}
void DSlicingNode::updateMatrixGCellPosition ()
{
DbU::Unit tx = getX() -_gcell->getXMin();
DbU::Unit ty = getY() -_gcell->getYMin();
Anabatic::GCell* ygcell = _gcell;
Anabatic::GCell* xgcell = ygcell;
while ( ygcell ) {
while ( xgcell ) {
xgcell->setSouthWestCorner( xgcell->getXMin() + tx, xgcell->getYMin() + ty );
if (xgcell->getEast()->isMatrix()) xgcell = xgcell->getEast();
else xgcell = NULL;
}
if (ygcell->getNorth()->isMatrix()) ygcell = ygcell->getNorth();
else ygcell = NULL;
xgcell = ygcell;
}
}
void DSlicingNode::updateMatrixGContacts ()
{
Anabatic::GCell* ygcell = _gcell;
Anabatic::GCell* xgcell = ygcell;
while ( ygcell ) {
while ( xgcell ) {
xgcell->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
if (xgcell->getEast()->isMatrix()) xgcell = xgcell->getEast();
else xgcell = NULL;
}
if (ygcell->getNorth()->isMatrix()) ygcell = ygcell->getNorth();
else ygcell = NULL;
xgcell = ygcell;
}
}
void DSlicingNode::updateGCellPosition ()
{
cdebug_log(535,0) << "DSlicingNode::updateGCellPosition() " << _gcell << endl;
if (_gcell) {
if (_parent) {
if (_parent->getType() == HorizontalSNode) {
DbU::Unit hpitch = _rg->getHorizontalPitch();
if (getAlignment() == AlignLeft) {
_gcell->getEastNMatrix()->setSouthWestCorner( getX()+getWidth(), getY() );
_gcell->getEastNMatrix()->forceEdgesCapacities( floor((_parent->getWidth()-getWidth())/hpitch)
, floor(getHeight()/hpitch)
);
} else if (getAlignment() == AlignCenter) {
_gcell->getWest()->setSouthWestCorner( _parent->getX(), getY() );
_gcell->getWest()->forceEdgesCapacities( floor((_parent->getWidth()-getWidth())/(2*hpitch))
, floor(getHeight()/(2*hpitch))
);
_gcell->getEastNMatrix()->setSouthWestCorner( getX()+getWidth(), getY() );
_gcell->getEastNMatrix()->forceEdgesCapacities( floor((_parent->getWidth()-getWidth())/(2*hpitch))
, floor(getHeight()/(2*hpitch))
);
} else if (getAlignment() == AlignRight) {
_gcell->getWest()->setSouthWestCorner( _parent->getX(), getY() );
_gcell->getWest()->forceEdgesCapacities( floor((_parent->getWidth()-getWidth())/hpitch)
, floor(getHeight()/hpitch)
);
}
} else if (_parent->getType() == VerticalSNode) {
DbU::Unit vpitch = _rg->getVerticalPitch();
if (getAlignment() == AlignBottom) {
_gcell->getNorthNMatrix()->setSouthWestCorner( getX(), getY()+getHeight() );
_gcell->getNorthNMatrix()->forceEdgesCapacities( floor((_parent->getHeight()-getHeight())/vpitch)
, floor(getWidth()/vpitch)
);
} else if (getAlignment() == AlignCenter) {
_gcell->getSouth()->setSouthWestCorner( getX(), _parent->getY() );
_gcell->getSouth()->forceEdgesCapacities( floor((_parent->getHeight()-getHeight())/(2*vpitch))
, floor(getWidth()/(2*vpitch))
);
_gcell->getNorthNMatrix()->setSouthWestCorner( getX(), getY()+getHeight() );
_gcell->getNorthNMatrix()->forceEdgesCapacities( floor((_parent->getHeight()-getHeight())/(2*vpitch))
, floor(getWidth()/(2*vpitch))
);
} else if (getAlignment() == AlignTop) {
_gcell->getSouth()->setSouthWestCorner( getX(), _parent->getY() );
_gcell->getSouth()->forceEdgesCapacities( floor((_parent->getHeight()-getHeight())/vpitch)
, floor(getWidth()/vpitch)
);
}
}
}
if (_gcell->isMatrix()) updateMatrixGCellPosition();
else _gcell->setSouthWestCorner( getX(), getY() );
cdebug_log(535,0) << "| Updated:" << _gcell << endl;
}
}
void DSlicingNode::updateGContacts ()
{
cdebug_log(535,0) << "DSlicingNode::updateGContacts() " << _gcell << endl;
if (_gcell) {
if (_parent) {
if (_parent->getType() == HorizontalSNode) {
if (getAlignment() == AlignLeft) {
_gcell->getEastNMatrix()->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
} else if (getAlignment() == AlignCenter) {
_gcell->getWest()->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
_gcell->getEastNMatrix()->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
} else if (getAlignment() == AlignRight) {
_gcell->getWest()->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
}
} else if (_parent->getType() == VerticalSNode) {
if (getAlignment() == AlignBottom) {
_gcell->getNorthNMatrix()->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
} else if (getAlignment() == AlignCenter) {
_gcell->getSouth()->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
_gcell->getNorthNMatrix()->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
} else if (getAlignment() == AlignTop) {
_gcell->getSouth()->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
}
}
}
if (_gcell->isMatrix()) updateMatrixGContacts();
else _gcell->updateGContacts( Anabatic::Flags::Vertical|Anabatic::Flags::Horizontal );
cdebug_log(535,0) << "| Updated:" << _gcell << endl;
}
}
void DSlicingNode::restrictDevices ()
{
if (_gcell) {
Anabatic::Vertex* vertex = _gcell->getObserver< Anabatic::Vertex>( Anabatic::GCell::Observable::Vertex );
vertex->setRestricted();
if (not vertex->hasValidStamp()) {
if ( (_gcell->getWidth() > _gcell->getHeight())
or (_gcell->getWidth() == _gcell->getHeight()) ) {
vertex->unsetFlags( Anabatic::Vertex::iVertical );
vertex->setFlags ( Anabatic::Vertex::iHorizontal );
} else {
vertex->unsetFlags( Anabatic::Vertex::iHorizontal );
vertex->setFlags ( Anabatic::Vertex::iVertical );
}
}
}
}
void DSlicingNode::printLine () const
{
cerr << "Instance: " << _instance << ", ";
SlicingNode::printLine();
}
string DSlicingNode::_getString () const
{
string s = Super::_getString();
s.insert( s.size()-1, " "+getString(_instance->getName()));
return s;
}
string DSlicingNode::_getTypeName () const
{ return "DSlicingNode"; }
bool DSlicingNode::isAnalog () const
{
if (not _instance) return false;
return dynamic_cast<Device*>(_instance->getMasterCell() );
}
bool DSlicingNode::isDigital () const
{ return not isAnalog(); }
bool DSlicingNode::checkCellInstances ( Cell* cell )
{
if (not _instance) return false;
return cell->getInstance(_instance->getName());
}
void DSlicingNode::resetWireOccupation ()
{ }
} // Bora namespace.

View File

@ -0,0 +1,302 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./GraphicBoraEngine.cpp" |
// +-----------------------------------------------------------------+
#include <QAction>
#include <QMenu>
#include <QMenuBar>
#include <QLineEdit>
#include <QInputDialog>
#include <QFileDialog>
#include <QMessageBox>
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "hurricane/Breakpoint.h"
#include "hurricane/DebugSession.h"
#include "hurricane/UpdateSession.h"
#include "hurricane/DataBase.h"
#include "hurricane/Library.h"
#include "hurricane/viewer/Graphics.h"
#include "hurricane/viewer/HApplication.h"
#include "hurricane/viewer/CellWidget.h"
#include "hurricane/viewer/ExceptionWidget.h"
#include "crlcore/GdsDriver.h"
#include "hurricane/analog/AnalogCellExtension.h"
#include "hurricane/analog/LayoutGenerator.h"
#include "hurricane/analog/TransistorFamily.h"
#include "bora/SlicingWidget.h"
#include "bora/SlicingDataWidget.h"
#include "bora/SlicingPlotWidget.h"
#include "bora/GraphicBoraEngine.h"
#include "bora/SlicingWidget.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::Warning;
using Hurricane::Breakpoint;
using Hurricane::DebugSession;
using Hurricane::UpdateSession;
using Hurricane::Point;
using Hurricane::Net;
using Hurricane::Graphics;
using Hurricane::ColorScale;
using Hurricane::ControllerWidget;
using Hurricane::ExceptionWidget;
using CRL::GdsDriver;
// -------------------------------------------------------------------
// Class : "Bora".
size_t GraphicBoraEngine::_references = 0;
GraphicBoraEngine* GraphicBoraEngine::_singleton = NULL;
BoraEngine* GraphicBoraEngine::createEngine ()
{
cdebug_log(536,0) << "BoraEngine* GraphicBoraEngine::createEngine ()" << endl;
Cell* cell = getCell ();
if (_slicingWidget == NULL) _slicingWidget = new SlicingWidget();
BoraEngine* bora = BoraEngine::get( cell );
if (not bora) {
bora = BoraEngine::create( cell );
bora->setViewer( _viewer );
_slicingWidget->setViewer( _viewer );
} else
cerr << Warning( "%s already has a Bora engine.", getString(cell).c_str() ) << endl;
return bora;
}
BoraEngine* GraphicBoraEngine::getForFramework ( unsigned int flags )
{
cdebug_log(536,0) << "BoraEngine* GraphicBoraEngine::getForFramework(unsigned int flags) flags:" << (flags==CreateEngine) << endl;
// Currently, only one framework is avalaible: Alliance.
BoraEngine* bora = BoraEngine::get( getCell() );
if (bora){
if (not _slicingWidget){
bora->setViewer( _viewer );
_slicingWidget = new SlicingWidget();
_slicingWidget->setViewer( _viewer );
connect( _slicingWidget, SIGNAL(updatePlacement ( BoxSet* ))
, this , SLOT (updatePlacementST( BoxSet* )) );
}
return bora;
}
if (flags & CreateEngine) {
bora = createEngine();
if (not bora)
throw Error( "Failed to create Bora engine on %s.", getString( getCell()).c_str() );
connect( _slicingWidget, SIGNAL(updatePlacement ( BoxSet* ))
, this , SLOT (updatePlacementST( BoxSet* )) );
} else
throw Error( "BoraEngine not created yet, out of sequence action." );
return bora;
}
void GraphicBoraEngine::updateSlicingTree ()
{
_viewer->clearToolInterrupt();
BoraEngine* bora = getForFramework( CreateEngine );
bora->updateSlicingTree();
_slicingWidget->updateContents();
}
void GraphicBoraEngine::updatePlacementST ( BoxSet* boxSet )
{
cdebug_log(536,0) << "GraphicBoraEngine::updatePlacementST(BoxSet*)" << endl;
_viewer->clearToolInterrupt();
BoraEngine* bora = getForFramework( CreateEngine );
if (bora) bora->updatePlacement( boxSet );
}
void GraphicBoraEngine::updatePlacementST ( size_t index )
{
cdebug_log(536,0) << "GraphicBoraEngine::updatePlacementST(int)" << endl;
_viewer->clearToolInterrupt();
BoraEngine* bora = getForFramework( CreateEngine );
if (bora){
BoxSet* bs = _slicingWidget->getDataWidget()->getBoxSet( index );
bora->updatePlacement( bs );
}
}
void GraphicBoraEngine::setToleranceRatio ()
{
_viewer->clearToolInterrupt();
BoraEngine* bora = getForFramework( CreateEngine );
if (bora) {
double ratioh = QInputDialog::getDouble( _slicingWidget
, "Set height tolerance ratio"
, "Write the desired height tolerance ratio:"
, DbU::getPhysical(bora->getToleranceRatioH(),DbU::Micro)
, 0, 10000, 2 );
double ratiow = QInputDialog::getDouble( _slicingWidget
, "Set width tolerance ratio"
, "Write the desired width tolerance ratio:"
, DbU::getPhysical(bora->getToleranceRatioW(),DbU::Micro)
, 0, 10000, 2 );
bora->setToleranceRatio( DbU::fromPhysical(ratioh, DbU::Micro)
, DbU::fromPhysical(ratiow, DbU::Micro) );
_slicingWidget->updateContents();
}
}
void GraphicBoraEngine::setToleranceBand ()
{
_viewer->clearToolInterrupt();
BoraEngine* bora = getForFramework( CreateEngine );
if (bora) {
double bandh = QInputDialog::getDouble( _slicingWidget
, "Set height tolerance band"
, "Write the desired height tolerance band:"
, DbU::getPhysical(bora->getToleranceBandH(),DbU::Micro)
, 0, 10000, 2 );
double bandw = QInputDialog::getDouble( _slicingWidget
, "Set width tolerance band"
, "Write the desired width tolerance band:"
, DbU::getPhysical(bora->getToleranceBandW(),DbU::Micro)
, 0, 10000, 2 );
bora->setToleranceBand( DbU::fromPhysical(bandh, DbU::Micro)
, DbU::fromPhysical(bandw, DbU::Micro) );
_slicingWidget->updateContents();
}
}
void GraphicBoraEngine::showPareto ()
{
cdebug_log(536,0) << "GraphicBoraEngine::showPareto(): " << _viewer << endl;
if (_viewer) _viewer->clearToolInterrupt();
BoraEngine* bora = getForFramework( CreateEngine );
if (bora) _slicingWidget->show();
}
void GraphicBoraEngine::addToMenu ( CellViewer* viewer )
{
assert( _viewer == NULL );
_viewer = viewer;
_viewer->addMenu ( "analog" , "Analog" , CellViewer::TopMenu );
if (_slicingWidget) _slicingWidget->setViewer( _viewer ); // ??
if (_viewer->hasMenuAction("analog.STree.create")) {
cerr << Warning( "GraphicBoraEngine::addToMenu() - Bora tool already hooked in." ) << endl;
return;
}
_viewer->addMenu( "analog.STree", "Slicing Tree", NoFlags );
_viewer->addToMenu( "analog.STree.update"
, "Update possible dimensions"
, "Update the possible dimensions at each node of the SlicingTree."
, std::bind( &GraphicBoraEngine::updateSlicingTree, this )
);
_viewer->addToMenu( "analog.STree.setTR"
, "Set global tolerance ratio"
, "Set the tolerance of the global ratio."
, std::bind( &GraphicBoraEngine::setToleranceRatio, this )
);
_viewer->addToMenu( "analog.STree.setBR"
, "Set band tolerance"
, "Set the tolerance of the bands inside of the slicing tree."
, std::bind( &GraphicBoraEngine::setToleranceBand, this )
);
_viewer->addToMenu( "analog.STree.show"
, "Slicing tree curve"
, "Show the complete slicing tree curve."
, std::bind( &GraphicBoraEngine::showPareto, this )
);
}
const Name& GraphicBoraEngine::getName () const
{ return BoraEngine::staticGetName(); }
Cell* GraphicBoraEngine::getCell ()
{
if (_viewer == NULL) {
throw Error( "<b>Bora:</b> GraphicBoraEngine not bound to any Viewer." );
return NULL;
}
if (_viewer->getCell() == NULL) {
throw Error( "<b>Bora:</b> No Cell is loaded into the Viewer." );
return NULL;
}
return _viewer->getCell();
}
GraphicBoraEngine* GraphicBoraEngine::grab ()
{
cdebug_log(536,0) << "GraphicBoraEngine::grab()" << endl;
if (not _references) {
_singleton = new GraphicBoraEngine();
}
_references++;
return _singleton;
}
size_t GraphicBoraEngine::release ()
{
--_references;
if (not _references) {
delete _singleton;
_singleton = NULL;
}
return _references;
}
GraphicBoraEngine::GraphicBoraEngine ()
: GraphicTool()
, _viewer (NULL)
, _slicingWidget(NULL)
{ }
GraphicBoraEngine::~GraphicBoraEngine ()
{
_slicingWidget->deleteLater();
}
} // End of Bora namespace.

453
bora/src/HSlicingNode.cpp Normal file
View File

@ -0,0 +1,453 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./HVSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "crlcore/RoutingGauge.h"
#include "bora/HVSetState.h"
#include "bora/HSlicingNode.h"
#include "bora/RHSlicingNode.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::Warning;
// -------------------------------------------------------------------
// Class : "Bora::HSlicingNode".
int HSlicingNode::_count = 0;
int HSlicingNode::_countAll = 0;
HSlicingNode::HSlicingNode ( unsigned int type, unsigned int alignment )
: HVSlicingNode(type,alignment)
{ ++_count; }
HSlicingNode::~HSlicingNode ()
{ --_count; }
HSlicingNode* HSlicingNode::create ( unsigned int alignment )
{
--_countAll;
return new HSlicingNode( HorizontalSNode, alignment );
}
void HSlicingNode::createRouting( DbU::Unit space )
{
push_back( RHSlicingNode::create( space ) );
resetSlicingTree();
}
void HSlicingNode::print () const
{
cerr << "- Print from Slicing Node - " << endl;
cerr << "SlicingType: Horizontal Node" << endl;
if (isAlignLeft ()) cerr << "Alignment : Left" << endl;
else if (isAlignCenter()) cerr << "Alignment : Middle" << endl;
else if (isAlignRight ()) cerr << "Alignment : Right" << endl;
else cerr << "Alignment : Unknown" << endl;
cerr << "Tolerances : RatioH: " << DbU::getPhysical(_toleranceRatioH,DbU::Micro)
<< ", RatioW: " << DbU::getPhysical(_toleranceRatioW,DbU::Micro)
<< ", BandH: " << DbU::getPhysical(_toleranceBandH ,DbU::Micro)
<< ", BandW: " << DbU::getPhysical(_toleranceBandW ,DbU::Micro) << endl;
HVSlicingNode::print();
}
HSlicingNode* HSlicingNode::clone ( unsigned int tr )
{
HSlicingNode* node = HSlicingNode::create( getAlignment() );
node->setTolerances( getToleranceRatioH()
, getToleranceRatioW()
, getToleranceBandH ()
, getToleranceBandW ()
);
node->setBoxSet ( getBoxSet() );
node->setNodeSets ( _nodeSets->clone() );
node->setPreset ( getPreset() );
node->setSet ( getSet() );
node->setPlaced ( getPlaced() );
node->setSymmetries( getSymmetries() );
for ( SlicingNode* child : _children ) {
if (tr == MY) node->push_front( child->clone(tr) );
else node->push_back ( child->clone(tr) );
}
return node;
}
void HSlicingNode::place ( DbU::Unit x, DbU::Unit y )
{
if (recursiveCheckSet()) {
if (not _slicingRouting.empty()) {
destroySlicingRouting();
resetSlicingRouting();
}
_place(x,y);
if (_slicingRouting.empty())
createSlicingRouting();
updateCellAbutmentBox();
} else
cerr << Warning( "HSlicingNode::place(): The SlicingTree is not completely set." ) << endl;
}
void HSlicingNode::replace ( DbU::Unit x, DbU::Unit y )
{
// WARNING: This will change GCell edges.
if (recursiveCheckSet()) {
_place( x, y, true );
updateCellAbutmentBox();
updateGCellPosition ();
updateGContacts ();
} else {
cerr << Warning( "HSlicingNode::replace(): The SlicingTree is not completely set." ) << endl;
}
}
void HSlicingNode::_place ( DbU::Unit x, DbU::Unit y, bool replace )
{
cdebug_log(536,1) << "HSlicingNode::_place(DbU::Unit,DbU::Unit,bool)" << endl;
vector<RHVSlicingNode*>::iterator itspace = _slicingRouting.begin();
DbU::Unit xref = x;
DbU::Unit yref = y;
if (isRoutingEstimated()) {
(*itspace)->_place( xref, yref, replace );
yref += (*itspace)->getHeight();
itspace++;
}
for ( SlicingNode* child : _children ) {
if ( (child->isHorizontal()) or (child->isVertical()) ) {
if (child->isAlignLeft()) {
child->setX( xref );
child->setY( yref );
} else if (child->isAlignCenter()) {
child->setX( xref + (getWidth()/2) - (child->getWidth()/2) );
child->setY( yref );
} else if (child->isAlignRight()) {
child->setX( xref + getWidth() - child->getWidth() );
child->setY( yref );
}
}
if (child->isAlignLeft() ) child->_place( xref , yref, replace);
else if (child->isAlignCenter()) child->_place( xref + (getWidth()/2) - (child->getWidth()/2), yref, replace);
else if (child->isAlignRight() ) child->_place( xref + getWidth() - child->getWidth() , yref, replace);
else if (child->isRouting() ) child->_place( xref , yref, replace);
else {
cerr << Warning( "HSlicingNode::_place(): Unknown Alignment in SlicingTree." ) << endl;
child->print();
}
xref = x;
yref += child->getHeight();
if (isRoutingEstimated()) {
(*itspace)->_place( xref, yref, replace );
yref += (*itspace)->getHeight();
itspace++;
}
}
setPlaced( Placed );
cdebug_tabw(536,-1);
}
void HSlicingNode::updateGlobalSize ()
{
cdebug_log(535,1) << "HSlicingNode::updateGlobalsize() - " << this << endl;
for ( SlicingNode* child : _children ) child->updateGlobalSize();
if (not getMaster()) {
if (getNbChild() == 1) {
_nodeSets->clear();
NodeSets* node = _children[0]->getNodeSets();
for ( BoxSet* bs : node->getBoxSets() ) {
vector<BoxSet*> bss;
bss.push_back( bs );
_nodeSets->push_back( bss, bs->getHeight(), bs->getWidth(), HorizontalSNode );
}
} else if ( not hasEmptyChildrenNodeSets() and _nodeSets->empty() ) {
HSetState state = HSetState( this );
while ( not state.end() ) state.next();
_nodeSets = state.getNodeSets();
}
if (_nodeSets->empty())
cerr << Warning( "HSlicingNode::updateGlobalSize(): No solution has been found, try to set larger tolerances." ) << endl;
} else {
_nodeSets = _master->getNodeSets();
}
cdebug_log(535,0) << "Found " << _nodeSets->size() << " choices" << endl;
cdebug_tabw(535,-1);
}
void HSlicingNode::preDestroy ()
{
HVSlicingNode::preDestroy();
}
void HSlicingNode::destroy ()
{
HSlicingNode::preDestroy();
delete this;
}
void HSlicingNode::preRecursiveDestroy ()
{
HVSlicingNode::preRecursiveDestroy();
}
void HSlicingNode::recursiveDestroy ()
{
HSlicingNode::preRecursiveDestroy();
delete this;
}
void HSlicingNode::createSlicingRouting ()
{
if (not _boxSet) {
cerr << Warning( "HSlicingNode::createSlicingRouting(): SlicingTree needs to be placed first." ) << endl;
return;
}
size_t childrenCount = getNbChild();
size_t ichild = 0;
DbU::Unit x = getX();
DbU::Unit y = getY();
DbU::Unit heightValue = 0;
if (_parent) {
if (_parent->getType() == VerticalSNode) {
if ( (getAlignment() == AlignBottom) or (getAlignment() == AlignTop) ) {
heightValue = _parent->getHeight() - getHeight();
} else if (getAlignment() == AlignCenter) {
heightValue = (_parent->getHeight() - getHeight()) / 2;
}
}
}
DbU::Unit hpitch = _rg->getHorizontalPitch();
if (heightValue % hpitch)
cerr << Warning( "HSlicingNode::createSlicingRouting(): On %s, height is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(heightValue).c_str()
, DbU::getValueString(hpitch).c_str()
) << endl;
for ( size_t inode=0; inode<childrenCount+1; ++inode ) {
RHSlicingNode* node = NULL;
if (inode == 0) {
if ( (getAlignment() == AlignTop )
or (getAlignment() == AlignCenter) ) node = RHSlicingNode::create( heightValue );
else node = RHSlicingNode::create();
} else if (inode == childrenCount) {
if ( (getAlignment() == AlignBottom)
or (getAlignment() == AlignCenter) ) node = RHSlicingNode::create( heightValue );
else node = RHSlicingNode::create();
} else
node = RHSlicingNode::create();
node->setParent( this );
if (inode == 0) {
if (getAlignment() == AlignBottom) node->place( x, y );
else if ( (getAlignment() == AlignCenter)
or (getAlignment() == AlignTop) ) node->place( x, y-heightValue );
} else
node->place( x, y );
if (_master) node->setMaster( _master->getSlicingRouting(inode) );
_slicingRouting.push_back( node );
if (inode < childrenCount) y += getChild( ichild++ )->getHeight();
}
if (_master) {
if (isHSymmetry()) {
for ( size_t i=0; i<_slicingRouting.size(); ++i )
getSlicingRouting( i )->setMaster( _master->getSlicingRouting( _slicingRouting.size()-1-i ) );
} else {
for ( size_t i=0; i<_slicingRouting.size(); ++i )
getSlicingRouting( i )->setMaster( _master->getSlicingRouting( i ) );
}
} else if ( not _symmetries.empty() and isAlignCenter() ) {
for ( size_t i=0; i<(_slicingRouting.size()/2); ++i ) {
getSlicingRouting( _slicingRouting.size()-1-i )->setMaster( getSlicingRouting(i) );
}
}
for ( SlicingNode* child : _children ) {
if ( child->isHorizontal() or child->isVertical() ) child->createSlicingRouting();
}
setRoutingCreated( RoutingCreated );
}
DbU::Unit HSlicingNode::getHeight () const
{
DbU::Unit hpitch = _rg->getHorizontalPitch();
DbU::Unit height = 0;
if (isRoutingEstimated()){
for ( SlicingNode* child : _children ) height += child->getHeight();
for ( RHVSlicingNode* node : _slicingRouting ) height += node ->getHeight();
} else {
if (_boxSet != NULL) height = _boxSet->getHeight();
}
if (height % hpitch)
cerr << Warning( "HSlicingNode::getHeight(): On %s, height is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(height).c_str()
, DbU::getValueString(hpitch).c_str()
) << endl;
return height;
}
DbU::Unit HSlicingNode::getWidth () const
{
cdebug_log(536,0) << "HSlicingNode::getWidth()" << endl;
DbU::Unit vpitch = _rg->getVerticalPitch();
DbU::Unit width = 0;
if (isRoutingEstimated()) {
SlicingNode* m = NULL;
for ( SlicingNode* node : _children ) {
if ( (node->getType() != RoutingSNode) and (node->getWidth() > width) ) {
width = node->getWidth();
m = node;
}
}
if (m->isDevice()) width += vpitch*2;
} else {
if (_boxSet) width = _boxSet->getWidth();
}
if (width % vpitch)
cerr << Warning( "HSlicingNode::getWidth(): On %s, width is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(width).c_str()
, DbU::getValueString(vpitch).c_str()
) << endl;
return width;
}
void HSlicingNode::setGCell ( Anabatic::GCell* gcell )
{
cdebug_log(535,1) << "HSlicingNode::setGCell(), start Y: "
<< _slicingRouting[0]->getY() << ", GCell:" << gcell << endl;
Anabatic::GCell* childGCell = gcell;
Anabatic::GCell* remainGCell = gcell;
DbU::Unit y = _slicingRouting[0]->getY();
for ( size_t ichild=0 ; ichild<_children.size() ; ++ichild ) {
// Setting up the GCell for the channel *before* the current child.
cdebug_log(535,0) << "node[" << ichild << "] height:"
<< DbU::getValueString(_slicingRouting[ ichild ]->getHeight()) << endl;
y += _slicingRouting[ ichild ]->getHeight();
remainGCell = childGCell->hcut( y );
_slicingRouting[ ichild ]->setGCell( childGCell );
childGCell = remainGCell;
// Setting up the GCell for the current child.
cdebug_log(535,0) << "children[" << ichild << "] height:"
<< DbU::getValueString(_children[ ichild ]->getHeight()) << endl;
y += _children[ ichild ]->getHeight();
remainGCell = childGCell->hcut( y );
_children[ ichild ]->setGCell( childGCell );
childGCell = remainGCell;
}
// Setting up the GCell for the channel *after* the last child.
_slicingRouting.back()->setGCell( childGCell );
cdebug_tabw(535,-1);
}
void HSlicingNode::adjustBorderChannels ()
{
if (_parent) {
if (_parent->getHeight() > getHeight()) {
DbU::Unit space = _parent->getHeight() - getHeight();
if (getAlignment() == AlignTop) {
RHVSlicingNode* channel = _slicingRouting.front();
channel->setHeight( channel->getHeight() + space );
} else if (getAlignment() == AlignCenter) {
RHVSlicingNode* firstChannel = _slicingRouting.front();
RHVSlicingNode* lastChannel = _slicingRouting.back ();
firstChannel->setHeight( firstChannel->getHeight() + space/2 );
lastChannel ->setHeight( lastChannel ->getHeight() + space/2 );
} else if (getAlignment() == AlignBottom) {
RHVSlicingNode* channel = _slicingRouting.back();
channel->setHeight( channel->getHeight() + space );
}
}
}
for ( SlicingNode* child : _children ) child->adjustBorderChannels();
}
string HSlicingNode::_getString () const
{
string s = Super::_getString();
return s;
}
string HSlicingNode::_getTypeName () const
{ return "HSlicingNode"; }
} // Bora namespace.

403
bora/src/HVSetState.cpp Normal file
View File

@ -0,0 +1,403 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./HVSetState.cpp" |
// +-----------------------------------------------------------------+
#include "bora/HVSetState.h"
#include "bora/HSlicingNode.h"
#include "bora/VSlicingNode.h"
namespace Bora {
using namespace std;
// -------------------------------------------------------------------
// Class : "Bora::HVSetState".
HVSetState::HVSetState ( HVSlicingNode* node )
: _HVSnode ( node )
, _counter ( 1 )
, _currentSet()
, _nextSet ()
, _nodeSets ( NodeSets::create() )
{
initSet();
initModulos();
}
HVSetState::~HVSetState ()
{ }
NodeSets* HVSetState::getNodeSets ()
{
_nodeSets->sort();
return _nodeSets;
}
void HVSetState::print ()
{
int index = 0;
cerr << "currentSet:" << endl;
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
NodeSets* nodes = children[ ichild ]->getNodeSets();
cerr << index << ": H = " << nodes->at(_currentSet[ichild])->getHeight()
<< ", W = " << nodes->at(_currentSet[ichild])->getWidth () << endl;
}
cerr << "counter = " << _counter << endl;
cerr << "end counter = " << _modulos.back() << endl;
cerr << "modulos:" << endl;
for ( size_t i=0 ; i<_modulos.size() ; ++i )
cerr << i << ": modulo = " << _modulos[i] << endl;
_nodeSets->print();
}
void HVSetState::initSet ()
{
_nextSet.clear();
for ( SlicingNode* child : _HVSnode->getChildren() ) {
if (child->isPreset())
_nextSet.push_back( child->getNodeSets()->findIndex( child->getHeight()
, child->getWidth () ) );
else
_nextSet.push_back( 0 );
}
_currentSet = _nextSet;
}
// Notes:
//
// Considering a horizontal/vertical node with X children and each children
// has N possibilities:
//
// child 0: N0 possibilities,
// child 1: N1 possibilities,
// .
// .
// .
// child X: NX possibilities.
//
// If a child is preset then, it only has 1 possibility and N = 1. So we have:
//
// number of possibilities to be studied = N0 * N1 * ... * NX.
//
// Children are seen like a <vector> and modulos are used to know when a
// child needs to choose its next possibility.
//
// It starts like this:
// - Child 0 goes through its N0 possibilities
// - When child 0 was at its last possibility, it goes back to its first one
// and child 1 pick its second possibility.
// - And we keep going . . .
void HVSetState::initModulos ()
{
cdebug_log(535,0) << "HVSetState::initModulos()" << endl;
int modulo = 1;
_modulos.clear();
_modulos.push_back( 1 );
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
if (ichild) _modulos.push_back( modulo );
if (isSymmetry(ichild)) {
cdebug_log(535,0) << "child:" << ichild << " is symmetric, one choice." << endl;
continue;
}
if (children[ichild]->isPreset() ) {
cdebug_log(535,0) << "child:" << ichild << " is preset, one choice." << endl;
continue;
}
cdebug_log(535,0) << "child:" << ichild << " is ordinary, "
<< "has " << children[ichild]->getNodeSets()->size() << " choices."
<< endl;
modulo *= children[ichild]->getNodeSets()->size();
}
_modulos.push_back( modulo );
for ( size_t i=0 ; i<_modulos.size() ; ++i )
cdebug_log(535,0) << "_modulos[" << i << "]:" << _modulos[i] << endl;
}
void HVSetState::next ()
{
// Notes: Set the next combination. See notes above.
cdebug_log(535,0) << "HVSetState::next(): counter_:" << _counter << endl;
Symmetry symmetry;
vector<size_t>::iterator itpair = _nextSet.begin();
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
if (isSymmetry(ichild,symmetry))
_nextSet[ ichild ] = _nextSet[ symmetry.first ];
else {
if ( (((_counter-1)%_modulos[ichild]) == _modulos[ichild]-1)
and not children[ichild]->isPreset() ) {
if (_nextSet[ichild]+1 != children[ichild]->getNodeSets()->size() ) _nextSet[ichild]++;
else _nextSet[ichild] = 0;
}
}
}
_counter += 1;
_currentSet = _nextSet;
}
// -------------------------------------------------------------------
// Class : "Bora::HSetState".
HSetState::HSetState ( HSlicingNode* node )
: HVSetState(node)
{ }
HSetState::~HSetState ()
{ }
pair<DbU::Unit,DbU::Unit> HSetState::getCurrentWs ()
{
// Notes:
// Calculate the min and max width of the current combination Routing nodes
// need to be taken into account to not calculate a wrong width.
DbU::Unit wmin = 0;
DbU::Unit wmax = 0;
if (not _currentSet.empty()) {
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; (wmin == 0) and (ichild<children.size()) ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
wmin = nodes->at( _currentSet[ichild] )->getWidth();
}
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
DbU::Unit width = nodes->at( _currentSet[ichild] )->getWidth();
if ( width and (width < wmin) ) wmin = width;
if (width > wmax) wmax = width;
}
}
return pair<DbU::Unit,DbU::Unit>( wmin, wmax );
}
DbU::Unit HSetState::getCurrentH ()
{
// Notes:
// Calculate the height of the current combination.
// Routing nodes need to be taken into account to not calculate a wrong height.
DbU::Unit currentH = 0;
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
currentH += nodes->at( _currentSet[ichild] )->getHeight();
}
return currentH;
}
DbU::Unit HSetState::getCurrentW ()
{
// Notes:
// Calculate the width of the current combination
// Routing nodes need to be taken into account to not calculate a wrong width.
DbU::Unit currentW = 0;
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
currentW = std::max( currentW, nodes->at( _currentSet[ichild] )->getWidth() );
}
return currentW;
}
void HSetState::print ()
{
HVSetState::print();
cerr << "currentH = " << getCurrentH() << endl;
cerr << "currentW = " << getCurrentW() << endl;
cerr << endl;
}
void HSetState::next ()
{
push_back();
HVSetState::next();
}
void HSetState::push_back ()
{
// Notes:
// Check if conditions on tolerance are filled.
// If yes, add the current set to the NodeSets
pair<DbU::Unit,DbU::Unit> paireWidths = getCurrentWs();
DbU::Unit width = paireWidths.second;
DbU::Unit wmin = paireWidths.first;
DbU::Unit height = 0;
if (width - wmin <= _HVSnode->getToleranceBandW()) {
vector<BoxSet*> bss;
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
bss.push_back( nodes->at( _currentSet[ichild] ) );
height += bss.back()->getHeight();
}
// create the BoxSet of the current accepted set.
_nodeSets->push_back( bss, height, width, HorizontalSNode );
}
}
// -------------------------------------------------------------------
// Class : "Bora::VSetState".
VSetState::VSetState ( VSlicingNode* node )
: HVSetState(node)
{ }
VSetState::~VSetState ()
{ }
pair<DbU::Unit,DbU::Unit> VSetState::getCurrentHs ()
{
// Note: Same as HSetState but for Vertical Node (see above).
DbU::Unit hmin = 0;
DbU::Unit hmax = 0;
if (not _currentSet.empty()) {
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; (hmin == 0) and (ichild<children.size()) ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
DbU::Unit height = nodes->at( _currentSet[ichild] )->getHeight();
if ( height and (height < hmin) ) hmin = height;
if (height > hmax) hmax = height;
}
}
return pair<DbU::Unit,DbU::Unit>( hmin, hmax );
}
DbU::Unit VSetState::getCurrentH ()
{
DbU::Unit currentH = 0;
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
currentH = std::max( currentH, nodes->at( _currentSet[ichild] )->getHeight() );
}
return currentH;
}
DbU::Unit VSetState::getCurrentW ()
{
DbU::Unit currentW = 0;
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; ichild<children.size() ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
currentW += nodes->at( _currentSet[ichild] )->getWidth();
}
return currentW;
}
void VSetState::print ()
{
HVSetState::print();
cerr << "currentH = " << getCurrentH() << endl;
cerr << "currentW = " << getCurrentW() << endl;
cerr << endl;
}
void VSetState::next ()
{
push_back();
HVSetState::next();
}
void VSetState::push_back ()
{
pair<DbU::Unit,DbU::Unit> paireHeights = getCurrentHs();
DbU::Unit height = paireHeights.second;
DbU::Unit hmin = paireHeights.first;
DbU::Unit width = 0;
if (height - hmin <= _HVSnode->getToleranceBandH()) {
vector<BoxSet*> bss;
const VSlicingNodes& children = _HVSnode->getChildren();
for ( size_t ichild=0 ; (hmin == 0) and (ichild<children.size()) ; ++ichild ) {
NodeSets* nodes = children[ichild]->getNodeSets();
bss.push_back( nodes->at( _currentSet[ichild] ) );
width += bss.back()->getWidth();
}
_nodeSets->push_back( bss, height, width, VerticalSNode );
}
}
} // Bora namespace.

1313
bora/src/HVSlicingNode.cpp Normal file

File diff suppressed because it is too large Load Diff

364
bora/src/NodeSets.cpp Normal file
View File

@ -0,0 +1,364 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./NodeSets.cpp" |
// +-----------------------------------------------------------------+
#include "bora/NodeSets.h"
#include "hurricane/Warning.h"
#include "hurricane/analog/Device.h"
#include "hurricane/analog/TransistorFamily.h"
#include "hurricane/analog/LayoutGenerator.h"
#include "crlcore/RoutingGauge.h"
namespace Bora {
using namespace Hurricane;
using namespace Analog;
NodeSets::NodeSets ( double start, double step, double count )
: _boxSets()
, _start ( start )
, _step ( step )
, _count ( count )
{ }
NodeSets::NodeSets ( const NodeSets* other )
: _boxSets( other->getBoxSets() )
, _start ( other->getStartParameter() )
, _step ( other->getStepParameter() )
, _count ( other->getCountParameter() )
{ }
NodeSets::~NodeSets ()
{ }
NodeSets* NodeSets::create ( Cell* cell
, double start
, double step
, double count
, CRL::RoutingGauge* rg )
{
NodeSets* nodeset = new NodeSets( start, step, count );
if (not cell) return nodeset;
Device* dev = dynamic_cast<Device*>( cell );
if (dev) {
//cdebug_log(536,0) << "createNodeSets for an Analog Device" << endl;
TransistorFamily* tf = dynamic_cast<TransistorFamily*>(dev);
for ( int i = 0; i < count; ++i ) {
tf->setNfing( start + i*step );
FormFactorParameter* pff = NULL;
if ( (pff = dynamic_cast<FormFactorParameter*>(tf->getParameter("M"))) != NULL )
pff->setValue( tf->getNfing() );
auto_ptr<LayoutGenerator> layoutGenerator ( new LayoutGenerator() );
layoutGenerator->setDevice( dev );
layoutGenerator->drawLayout();
if (rg) {
float h2pitch = rg->getHorizontalPitch()*2;
float v2pitch = rg->getVerticalPitch ()*2;
float h = dev->getAbutmentBox().getHeight();
float w = dev->getAbutmentBox().getWidth();
if (fmod(h,h2pitch) > 1e-06) {
cerr << Warning( "NodeSets::create(): The height of device \"%s\" (%s) is not pitched on 2*%s (adjusted)."
, getString(dev->getName()).c_str()
, DbU::getValueString(dev->getAbutmentBox().getWidth()).c_str()
, DbU::getValueString(rg->getHorizontalPitch()*2).c_str()
) << endl;
}
if (fmod(w,v2pitch) > 1e-06) {
cerr << Warning( "NodeSets::create(): The width of device \"%s\" (%s) is not pitched on 2*%s (adjusted)."
, getString(dev->getName()).c_str()
, DbU::getValueString(dev->getAbutmentBox().getWidth()).c_str()
, DbU::getValueString(rg->getVerticalPitch()*2).c_str()
) << endl;
}
nodeset->push_back( DBoxSet::create( ceil(h/h2pitch)*h2pitch
, ceil(w/v2pitch)*v2pitch
, start + i*step
) );
} else {
nodeset->push_back( DBoxSet::create( dev->getAbutmentBox().getHeight()
, dev->getAbutmentBox().getWidth()
, start + i*step
) );
}
}
} else {
//cdebug_log(536,0) << "createNodeSets for a Digital Device: " << cell << endl;
if (rg) {
DbU::Unit h2pitch = rg->getHorizontalPitch()*2;
DbU::Unit v2pitch = rg->getVerticalPitch ()*2;
DbU::Unit h = cell->getAbutmentBox().getHeight();
DbU::Unit w = cell->getAbutmentBox().getWidth();
if (h % h2pitch) {
cerr << Warning( "NodeSets::create(): The height of device \"%s\" (%s) is not pitched on %s*2 (adjusted)."
, getString(cell->getName()).c_str()
, DbU::getValueString(cell->getAbutmentBox().getHeight()).c_str()
, DbU::getValueString(rg->getHorizontalPitch()).c_str()
) << endl;
}
if (w % v2pitch) {
cerr << Warning( "NodeSets::create(): The width of device \"%s\" (%s) is not pitched on %s*2 (adjusted)."
, getString(cell->getName()).c_str()
, DbU::getValueString(cell->getAbutmentBox().getWidth()).c_str()
, DbU::getValueString(rg->getVerticalPitch()).c_str()
) << endl;
}
nodeset->push_back( DBoxSet::create( ceil(h/h2pitch)*h2pitch
, ceil(w/v2pitch)*v2pitch
) );
} else {
nodeset->push_back( DBoxSet::create( cell->getAbutmentBox().getHeight()
, cell->getAbutmentBox().getWidth()
) );
}
}
return nodeset;
}
// NodeSets* NodeSets::create ()
// {
// return new NodeSets();
// }
BoxSet* NodeSets::operator[] ( size_t i )
{
if (i < _boxSets.size()) return _boxSets[i];
return NULL;
}
BoxSet* NodeSets::at ( size_t i )
{
if (i < _boxSets.size()) return _boxSets[i];
return NULL;
}
void NodeSets::clear ()
{
if (not _boxSets.empty()) {
for ( BoxSet* bs : _boxSets ) bs->destroy();
}
_boxSets.clear();
}
BoxSet* NodeSets::getPairH ( DbU::Unit height ) const
{
DbU::Unit w = 0;
DbU::Unit hclosest = 0;
BoxSet* boxSet = (*_boxSets.begin());
for ( BoxSet* bs : _boxSets ) {
if ( (bs->getHeight() > hclosest) and (height >= bs->getHeight()) ) {
hclosest = bs->getHeight();
w = bs->getWidth ();
boxSet = bs;
}
}
if ( (w == 0) and (hclosest == 0) )
cerr << Warning( "NodeSets::getPairH(): No solution for h=%s has been found."
, DbU::getValueString(height).c_str() ) << endl;
return boxSet;
}
BoxSet* NodeSets::getPairHW ( DbU::Unit height, DbU::Unit width ) const
{
vector<BoxSet*>::const_iterator it = _boxSets.begin();
DbU::Unit bestH = (*it)->getHeight();
DbU::Unit bestW = (*it)->getWidth();
DbU::Unit currentH = 0;
DbU::Unit currentW = 0;
BoxSet* boxSet = (*it);
while ( it != _boxSets.end() ) {
currentH = (*it)->getHeight();
currentW = (*it)->getWidth ();
if (currentH <= height) {
if (currentH > bestH) {
bestH = currentH;
bestW = currentW;
boxSet = (*it);
} else if (currentH == bestH) {
if ( (currentW > bestW) and (currentW <= width) ) {
bestH = currentH;
bestW = currentW;
boxSet = (*it);
}
else if ( (currentW < bestW) and (bestW > width) ) {
bestH = currentH;
bestW = currentW;
boxSet = (*it);
}
}
++it;
} else {
it = _boxSets.end();
}
}
return boxSet;
}
BoxSet* NodeSets::getPairHW ( unsigned int index ) const
{
if (index < _boxSets.size()) return _boxSets[index];
return NULL;
}
size_t NodeSets::findIndex ( DbU::Unit height, DbU::Unit width ) const
{
for ( size_t i=0 ; i<_boxSets.size() ; ++i ) {
if ( (_boxSets[i]->getHeight() == height)
and (_boxSets[i]->getWidth () == width ) )
return i;
}
return NotFound;
}
BoxSet* NodeSets::find ( DbU::Unit height, DbU::Unit width )
{
size_t i = 0;
for ( ; i<_boxSets.size() ; ++i ) {
if ( (_boxSets[i]->getHeight() == height)
and (_boxSets[i]->getWidth () == width ) )
return _boxSets[i];
}
return NULL;
}
BoxSet* NodeSets::find ( BoxSet* boxSet )
{
return find( boxSet->getHeight(), boxSet->getWidth() );
}
BoxSet* NodeSets::find ( int nfing )
{
size_t i = 0;
for ( ; i<_boxSets.size() ; ++i ) {
if (_boxSets[i]->getNFing() == nfing)
return _boxSets[i];
}
return NULL;
}
void NodeSets::print() const
{
cerr << "Print - NodeSets:" << endl;
int index = 0;
if (not size()) {
cerr << "--- EMPTY ---" << endl;
} else {
for ( size_t i=0 ; _boxSets.size() ; ++i ) {
cerr << "[" << setw(3) << index << "] ";
_boxSets[i]->print();
}
cerr << endl;
}
}
bool NodeSets::compare ( NodeSets nodeSets2, unsigned int flags ) const
{
if (_boxSets.size() != nodeSets2.size()) {
if (flags & ShowDiff)
cerr << "NodeSets::compare() size differs: " << _boxSets.size()
<< " vs. " << nodeSets2.size() << endl;
return false;
}
bool isSame = true;
for ( size_t iset = 0 ; iset<_boxSets.size() ; ++iset ) {
if ( (_boxSets[iset]->getHeight() != nodeSets2[iset]->getHeight())
or (_boxSets[iset]->getWidth () != nodeSets2[iset]->getWidth ()) ) {
isSame = false;
if (flags & ShowDiff)
cerr << "NodeSets::compare() Box [" << iset << "] differs "
<< " (" << DbU::getValueString(_boxSets[iset]->getWidth()) << "," << DbU::getValueString(_boxSets[iset]->getHeight()) << ") vs."
<< " (" << DbU::getValueString(nodeSets2[iset]->getWidth()) << "," << DbU::getValueString(nodeSets2[iset]->getHeight()) << ")"
<< endl;
}
}
return isSame;
}
void NodeSets::push_back ( BoxSet* boxSet )
{
if (find(boxSet) == NULL) _boxSets.push_back( boxSet );
else {
find( boxSet )->incrementCpt();
boxSet->destroy();
}
}
void NodeSets::push_back ( vector<BoxSet*> vect
, DbU::Unit height
, DbU::Unit width
, unsigned int type )
{
if (find(height,width) == NULL) {
if (type == HorizontalSNode) {
_boxSets.push_back( HBoxSet::create( vect, height, width ) );
} else if (type == VerticalSNode) {
_boxSets.push_back( VBoxSet::create( vect, height, width ) );
}
} else
find( height, width )->incrementCpt();
}
NodeSets* NodeSets::clone()
{
NodeSets* nodesets = new NodeSets( _start, _step, _count );
for ( BoxSet* bs : _boxSets ) _boxSets.push_back( bs->clone() );
return nodesets;
}
} // Bora namespace.

156
bora/src/Pareto.cpp Normal file
View File

@ -0,0 +1,156 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./Pareto.cpp" |
// +-----------------------------------------------------------------+
#include <cstdio>
#include <iostream>
#include "bora/Pareto.h"
namespace Bora {
using namespace std;
Pareto::Pareto ()
: _capacity(0)
, _size (0)
, _xs (NULL)
, _ys (NULL)
{ }
Pareto::~Pareto ()
{ clear(); }
void Pareto::_resize ( int capacity )
{
if (capacity <= _capacity) return;
int newcapacity = (_capacity) ? _capacity*2 : 4;
while ( newcapacity < capacity ) newcapacity <<= 1;
double* xs = new double [newcapacity];
double* ys = new double [newcapacity];
for ( int i=0 ; i<_capacity ; ++i ) {
xs[i] = _xs[i];
ys[i] = _ys[i];
}
delete [] _xs;
delete [] _ys;
_capacity = newcapacity;
_xs = xs;
_ys = ys;
}
void Pareto::_insert ( int index, double x, double y )
{
if (_size == _capacity) _resize( _capacity+1 );
if (index < _size) {
for ( int i=_size ; i>index ; --i ) {
_xs[i] = _xs[i-1];
_ys[i] = _ys[i-1];
}
}
_xs[index] = x;
_ys[index] = y;
_size++;
}
void Pareto::_remove ( int index )
{
if (index >= _size) return;
for ( int i=index ; i<_size-1 ; ++i ) {
_xs[i] = _xs[i+1];
_ys[i] = _ys[i+1];
}
--_size;
}
void Pareto::_restoreMonotonic ()
{
for ( int i=0 ; i<_size-1 ; ) {
if (_ys[i] >= _ys[i+1]) {
++i;
continue;
}
_remove( i+1 );
}
}
void Pareto::mergePoint ( double x, double y )
{
//cerr << "Merge: [" << x << " " << y << "] " << _size << endl;
if (_size == 0) { _insert( 0, x, y ); return; }
if (x < _xs[0]) {
_insert( 0, x, y );
//cerr << " insert at 0" << endl;
} else {
int i = 1;
for ( ; i<_size ; ++i ) {
if ( (x == _xs[i-1]) and (y < _ys[i-1]) ) { _ys[i-1] = y; break; }
if ( (x == _xs[i ]) and (y < _ys[i ]) ) { _ys[i ] = y; break; }
//cerr << " check between x[" << i-1 << "]: " << _xs[i-1]
// << " and x[" << i << "]: " << _xs[i] << endl;
if (x < _xs[i]) {
// double ypareto = _ys[i-1];
// ypareto += (_ys[i]-_ys[i-1]) / ((double)_xs[i] - (double)_xs[i-1]) * (x - _xs[i-1]);
// if (y < ypareto)
// _insert( i, x, y );
_insert( i, x, y );
break;
}
}
if (i == _size) {
//cerr << " insert at " << _size << " (end)" << endl;
_insert( _size, x, y );
}
}
_restoreMonotonic();
}
void Pareto::dump ()
{
for ( int i=0 ; i<_size ; ++i ) {
cerr << " point[" << i << "]: [" << _xs[i] << " " << _ys[i] << "]" << endl;
}
}
void Pareto::clear ()
{
if (_xs) delete [] _xs;
if (_ys) delete [] _ys;
_capacity = 0;
_size = 0;
}
} // Bora namespace.

123
bora/src/PyBora.cpp Normal file
View File

@ -0,0 +1,123 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PyBora.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyHurricane.h"
#include "hurricane/isobar/PyCell.h"
#include "bora/PySlicingNode.h"
#include "bora/PyHSlicingNode.h"
#include "bora/PyVSlicingNode.h"
#include "bora/PyDSlicingNode.h"
#include "bora/PyRHSlicingNode.h"
#include "bora/PyRVSlicingNode.h"
#include "bora/PyBoraEngine.h"
#include "bora/PyGraphicBoraEngine.h"
namespace Bora {
using std::cerr;
using std::endl;
using Hurricane::tab;
using Isobar::__cs;
using CRL::PyTypeToolEngine;
using CRL::PyTypeGraphicTool;
#if !defined(__PYTHON_MODULE__)
// +=================================================================+
// | "PyBora" Shared Library Code Part |
// +=================================================================+
#else // PyBora Shared Library Code Part.
// +=================================================================+
// | "PyBora" Python Module Code Part |
// +=================================================================+
extern "C" {
static PyMethodDef PyBora_Methods[] =
{ {NULL, NULL, 0, NULL} /* sentinel */
};
// ---------------------------------------------------------------
// Module Initialization : "initBora ()"
DL_EXPORT(void) initBora ()
{
cdebug.log(61) << "initBora()" << endl;
PySlicingNode_LinkPyType();
PyHSlicingNode_LinkPyType();
PyVSlicingNode_LinkPyType();
PyDSlicingNode_LinkPyType();
PyRHSlicingNode_LinkPyType();
PyRVSlicingNode_LinkPyType();
PyBoraEngine_LinkPyType();
PyGraphicBoraEngine_LinkPyType();
PYTYPE_READY( SlicingNode )
PYTYPE_READY_SUB( HSlicingNode , SlicingNode )
PYTYPE_READY_SUB( VSlicingNode , SlicingNode )
PYTYPE_READY_SUB( DSlicingNode , SlicingNode )
PYTYPE_READY_SUB( RHSlicingNode , SlicingNode )
PYTYPE_READY_SUB( RVSlicingNode , SlicingNode )
PYTYPE_READY_SUB( BoraEngine , ToolEngine );
PYTYPE_READY_SUB( GraphicBoraEngine, GraphicTool );
PyObject* module = Py_InitModule( "Bora", PyBora_Methods );
if (module == NULL) {
cerr << "[ERROR]\n"
<< " Failed to initialize Bora module." << endl;
return;
}
Py_INCREF( &PyTypeSlicingNode );
PyModule_AddObject( module, "SlicingNode" , (PyObject*)&PyTypeSlicingNode );
Py_INCREF( &PyTypeHSlicingNode );
PyModule_AddObject( module, "HSlicingNode" , (PyObject*)&PyTypeHSlicingNode );
Py_INCREF( &PyTypeVSlicingNode );
PyModule_AddObject( module, "VSlicingNode" , (PyObject*)&PyTypeVSlicingNode );
Py_INCREF( &PyTypeDSlicingNode );
PyModule_AddObject( module, "DSlicingNode" , (PyObject*)&PyTypeDSlicingNode );
Py_INCREF( &PyTypeRHSlicingNode );
PyModule_AddObject( module, "RHSlicingNode" , (PyObject*)&PyTypeRHSlicingNode );
Py_INCREF( &PyTypeRVSlicingNode );
PyModule_AddObject( module, "RVSlicingNode" , (PyObject*)&PyTypeRVSlicingNode );
Py_INCREF( &PyTypeBoraEngine );
PyModule_AddObject( module, "BoraEngine" , (PyObject*)&PyTypeBoraEngine );
Py_INCREF( &PyTypeGraphicBoraEngine );
PyModule_AddObject( module, "GraphicBoraEngine", (PyObject*)&PyTypeGraphicBoraEngine );
PySlicingNode_postModuleInit();
PyBoraEngine_postModuleInit();
}
} // extern "C".
#endif // Python Module Code Part.
} // Bora namespace.

191
bora/src/PyBoraEngine.cpp Normal file
View File

@ -0,0 +1,191 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PyBoraEngine.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyCell.h"
#include "bora/PyBoraEngine.h"
# undef ACCESS_OBJECT
# undef ACCESS_CLASS
# define ACCESS_OBJECT _baseObject._object
# define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(BoraEngine,bora,function)
namespace Bora {
using namespace std;
using Hurricane::tab;
using Hurricane::Bug;
using Hurricane::Error;
using Hurricane::Warning;
using Hurricane::Exception;
using Isobar::__cs;
using Isobar::Converter;
using Isobar::ProxyProperty;
using Isobar::ProxyError;
using Isobar::ConstructorError;
using Isobar::HurricaneError;
using Isobar::HurricaneWarning;
using Isobar::ParseOneArg;
using Isobar::ParseTwoArg;
using Isobar::PyCell;
using Isobar::PyCell_Link;
using Isobar::PyAny_AsLong;
using CRL::PyToolEngine;
using Bora::BoraEngine;
extern "C" {
#if defined(__PYTHON_MODULE__)
// +=================================================================+
// | "PyBoraEngine" Python Module Code Part |
// +=================================================================+
static PyObject* PyBoraEngine_get ( PyObject*, PyObject* args )
{
cdebug.log(61) << "PyBoraEngine_get()" << endl;
BoraEngine* bora = NULL;
HTRY
PyObject* arg0;
if (not ParseOneArg("Bora.get", args, CELL_ARG, &arg0)) return NULL;
bora = BoraEngine::get(PYCELL_O(arg0));
HCATCH
return PyBoraEngine_Link(bora);
}
static PyObject* PyBoraEngine_create ( PyObject*, PyObject* args )
{
cdebug.log(61) << "PyBoraEngine_create()" << endl;
BoraEngine* bora = NULL;
HTRY
PyObject* arg0;
if (not ParseOneArg("Bora.get", args, CELL_ARG, &arg0)) return NULL;
Cell* cell = PYCELL_O(arg0);
bora = BoraEngine::get(cell);
if (bora == NULL) {
bora = BoraEngine::create(cell);
//if (cmess1.enabled())
// bora->getBoraConfiguration()->print(cell);
} else
cerr << Warning("%s already has a Bora engine.",getString(cell).c_str()) << endl;
HCATCH
return PyBoraEngine_Link(bora);
}
static PyObject* PyBoraEngine_updatePlacement ( PyBoraEngine* self, PyObject* args )
{
unsigned int bsIndex = 0;
METHOD_HEAD( "BoraEngine.updatePlacement()" )
HTRY
PyObject* arg0;
PyObject* arg1;
__cs.init ("BoraEngine.updatePlacement");
if (not PyArg_ParseTuple(args, "O&|O&:BoraEngine.updatePlacement"
, Converter, &arg0
, Converter, &arg1 )) {
return NULL;
}
if (__cs.getObjectIds() == INT_ARG ) { bora->updatePlacement( PyAny_AsLong(arg0) ); }
else if (__cs.getObjectIds() == INTS2_ARG) { bora->updatePlacement( PyAny_AsLong(arg0), PyAny_AsLong(arg1) ); }
else {
PyErr_SetString( ConstructorError, "BoraEngine.updatePlacement(): Invalid/bad type parameters ." );
return NULL;
}
HCATCH
Py_RETURN_NONE;
}
// Standart Accessors (Attributes).
DirectVoidMethod(BoraEngine,bora,updateSlicingTree)
// DirectVoidMethod(BoraEngine,bora,runNegociate)
// DirectVoidMethod(BoraEngine,bora,printConfiguration)
// DirectVoidMethod(BoraEngine,bora,saveGlobalSolution)
// DirectVoidMethod(BoraEngine,bora,finalizeLayout)
// DirectVoidMethod(BoraEngine,bora,dumpMeasures)
// DirectGetBoolAttribute(PyBoraEngine_getToolSuccess,getToolSuccess,PyBoraEngine,BoraEngine)
// Standart Destroy (Attribute).
DBoDestroyAttribute(PyBoraEngine_destroy,PyBoraEngine)
PyMethodDef PyBoraEngine_Methods[] =
{ { "get" , (PyCFunction)PyBoraEngine_get , METH_VARARGS|METH_STATIC
, "Returns the Bora engine attached to the Cell, None if there isn't." }
, { "create" , (PyCFunction)PyBoraEngine_create , METH_VARARGS|METH_STATIC
, "Create an Bora engine on this cell." }
//, { "place" , (PyCFunction)PyBoraEngine_place , METH_NOARGS
// , "Run the placer (Bora)." }
, { "updateSlicingTree" , (PyCFunction)PyBoraEngine_updateSlicingTree , METH_NOARGS
, "Update/compute slicing tree possible dimensions table." }
, { "updatePlacement" , (PyCFunction)PyBoraEngine_updatePlacement , METH_VARARGS
, "Select placement at the given index in the table." }
, { "destroy" , (PyCFunction)PyBoraEngine_destroy , METH_NOARGS
, "Destroy the associated hurricane object. The python object remains." }
, {NULL, NULL, 0, NULL} /* sentinel */
};
DBoDeleteMethod(BoraEngine)
PyTypeObjectLinkPyType(BoraEngine)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyBoraEngine" Shared Library Code Part |
// +=================================================================+
// Link/Creation Method.
PyTypeInheritedObjectDefinitions(BoraEngine,PyToolEngine)
DBoLinkCreateMethod(BoraEngine)
extern void PyBoraEngine_postModuleInit ()
{
//PyObject* constant;
//LoadObjectConstant(PyTypeBoraEngine.tp_dict,BoraEngine::SlowMotion,"SlowMotion");
}
#endif // Shared Library Code Part.
} // extern "C".
} // Bora namespace.

152
bora/src/PyDSlicingNode.cpp Normal file
View File

@ -0,0 +1,152 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PyDSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/analog/PyDevice.h"
#include "crlcore/PyRoutingGauge.h"
#include "bora/PyDSlicingNode.h"
namespace Bora {
using namespace Hurricane;
using namespace Isobar;
using CRL::PyRoutingGauge;
using CRL::PyTypeRoutingGauge;
using CRL::RoutingGauge;
using Analog::Device;
extern "C" {
#undef ACCESS_OBJECT
#undef ACCESS_CLASS
#define ACCESS_OBJECT _baseObject._object
#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(DSlicingNode,node,function)
// +=================================================================+
// | "PyDSlicingNode" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
// +-------------------------------------------------------------+
// | "PyDSlicingNode" Attribute Methods |
// +-------------------------------------------------------------+
static PyObject* PyDSlicingNode_create ( PyObject* , PyObject* args )
{
PyObject* pyInstance = NULL;
PyObject* pyCell = NULL;
PyObject* pyRoutingGauge = NULL;
double start = 0.0;
double step = 0.0;
double count = 0.0;
DSlicingNode* node = NULL;
HTRY
if (not PyArg_ParseTuple( args,"SOddd|O:DSlicingNode.create"
, &pyInstance
, &pyCell
, &start
, &step
, &count
, &pyRoutingGauge ) ) {
PyErr_SetString ( ConstructorError, "DSlicingNode.create(): Invalid/bad number of parameters ." );
return NULL;
}
if (not IsPyCell(pyCell)) {
PyErr_SetString( ConstructorError, "DSlicingNode.create(): First argument *must* be of type Cell." );
return NULL;
}
if (pyRoutingGauge and not IsPyRoutingGauge(pyRoutingGauge)) {
PyErr_SetString( ConstructorError, "DSlicingNode.create(): Fifth argument *must* be of type RoutingGauge." );
return NULL;
}
Cell* cell = PYCELL_O( pyCell );
Instance* instance = cell->getInstance( PyString_AsString(pyInstance) );
//Device* device = dynamic_cast<Device*>( instance->getMasterCell() );
RoutingGauge* rg = (pyRoutingGauge) ? PYROUTINGGAUGE_O(pyRoutingGauge) : NULL;
node = DSlicingNode::create( NodeSets::create( instance->getMasterCell(), start, step, count, rg )
, UnknownAlignment
, instance );
HCATCH
return PyDSlicingNode_NEW(node);
}
DirectGetIntAttribute(PyDSlicingNode_getNFing,getNFing,PyDSlicingNode,DSlicingNode)
DirectSetIntAttribute(PyDSlicingNode_setNFing,setNFing,PyDSlicingNode,DSlicingNode)
// Standart Destroy (Attribute).
// ---------------------------------------------------------------
// PyDSlicingNode Attribute Method table.
PyMethodDef PyDSlicingNode_Methods[] =
{ { "create" , (PyCFunction)PyDSlicingNode_create , METH_VARARGS|METH_STATIC
, "Create a new DSlicingNode." }
, { "getNFing" , (PyCFunction)PyDSlicingNode_getNFing , METH_NOARGS , "To be documented." }
, { "setNFing" , (PyCFunction)PyDSlicingNode_setNFing , METH_VARARGS, "To be documented." }
, { NULL, NULL, 0, NULL } /* sentinel */
};
// +-------------------------------------------------------------+
// | "PyDSlicingNode" Object Methods |
// +-------------------------------------------------------------+
PythonOnlyDeleteMethod(DSlicingNode)
PyTypeObjectLinkPyType(DSlicingNode)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyDSlicingNode" Shared Library Code Part |
// +=================================================================+
extern PyObject* PyDSlicingNode_NEW ( DSlicingNode* node )
{
if (not node) Py_RETURN_NONE;
PyDSlicingNode* pyNode = NULL;
HTRY
pyNode = PyObject_NEW( PyDSlicingNode, &PyTypeDSlicingNode );
if (not pyNode) return NULL;
pyNode->ACCESS_OBJECT = node;
HCATCH
return (PyObject*)pyNode;
}
PyTypeInheritedObjectDefinitions(DSlicingNode, SlicingNode)
#endif // End of Shared Library Code Part.
} // extern "C".
} // Bora namespace.

View File

@ -0,0 +1,116 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PyGraphicBoraEngine.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyCell.h"
#include "bora/PyGraphicBoraEngine.h"
#undef ACCESS_OBJECT
#undef ACCESS_CLASS
#define ACCESS_OBJECT _baseObject._object
#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(GraphicBoraEngine,gtool,function)
namespace Bora {
using namespace Hurricane;
using namespace Isobar;
extern "C" {
// +=================================================================+
// | "PyGraphicBoraEngine" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
static PyObject* PyGraphicBoraEngine_grab ( PyObject* )
{
cdebug.log(61) << "PyGraphicBoraEngine_grab()" << endl;
PyGraphicBoraEngine* pyGraphicBoraEngine = NULL;
HTRY
pyGraphicBoraEngine = PyObject_NEW ( PyGraphicBoraEngine, &PyTypeGraphicBoraEngine );
if ( pyGraphicBoraEngine == NULL ) return NULL;
pyGraphicBoraEngine->ACCESS_OBJECT = GraphicBoraEngine::grab();
HCATCH
return (PyObject*)pyGraphicBoraEngine;
}
static PyObject* PyGraphicBoraEngine_getCell ( PyGraphicBoraEngine* self )
{
cdebug.log(61) << "PyGraphicBoraEngine_getCell ()" << endl;
Cell* cell = NULL;
HTRY
METHOD_HEAD("GraphicBoraEngine.getCell()")
cell = gtool->getCell ();
HCATCH
if (cell == NULL) Py_RETURN_NONE;
return PyCell_Link(cell);
}
GetNameMethod(GraphicBoraEngine, gtool)
// Standart destroy (Attribute).
PyMethodDef PyGraphicBoraEngine_Methods[] =
{ { "grab" , (PyCFunction)PyGraphicBoraEngine_grab , METH_NOARGS|METH_STATIC
, "Returns the GraphicBoraEngine singleton." }
, { "getName" , (PyCFunction)PyGraphicBoraEngine_getName , METH_NOARGS
, "Returns the name of the GraphicBoraEngine (class attribute)." }
, { "getCell" , (PyCFunction)PyGraphicBoraEngine_getCell , METH_NOARGS
, "Returns the Cell on which this GraphicBoraEngine is attached." }
, {NULL, NULL, 0, NULL} /* sentinel */
};
// ---------------------------------------------------------------
// PyGraphicBoraEngine Type Methods.
PythonOnlyDeleteMethod(GraphicBoraEngine)
PyTypeObjectLinkPyType(GraphicBoraEngine)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyGraphicBoraEngine" Shared Library Code Part |
// +=================================================================+
// Link/Creation Method.
LinkCreateMethod(GraphicBoraEngine)
PyTypeInheritedObjectDefinitions(GraphicBoraEngine,GraphicTool)
#endif // End of Shared Library Code Part.
} // extern "C".
} // Bora namespace.

115
bora/src/PyHSlicingNode.cpp Normal file
View File

@ -0,0 +1,115 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PyHSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "bora/PyHSlicingNode.h"
namespace Bora {
using namespace Hurricane;
using namespace Isobar;
extern "C" {
#undef ACCESS_OBJECT
#undef ACCESS_CLASS
#define ACCESS_OBJECT _baseObject._object
#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(HSlicingNode,node,function)
// +=================================================================+
// | "PyHSlicingNode" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
// +-------------------------------------------------------------+
// | "PyHSlicingNode" Attribute Methods |
// +-------------------------------------------------------------+
static PyObject* PyHSlicingNode_create ( PyObject* , PyObject* args )
{
unsigned int alignment = AlignLeft;
HSlicingNode* node = NULL;
HTRY
if (not PyArg_ParseTuple(args,"I:HSlicingNode.create", &alignment) ) {
PyErr_SetString ( ConstructorError, "HSlicingNode.create(): Invalid/bad type parameters ." );
return NULL;
}
node = HSlicingNode::create( alignment );
HCATCH
return PyHSlicingNode_NEW(node);
}
// Standart Destroy (Attribute).
// ---------------------------------------------------------------
// PyHSlicingNode Attribute Method table.
PyMethodDef PyHSlicingNode_Methods[] =
{ { "create" , (PyCFunction)PyHSlicingNode_create , METH_VARARGS|METH_STATIC
, "Create a new HSlicingNode." }
, { NULL, NULL, 0, NULL } /* sentinel */
};
// +-------------------------------------------------------------+
// | "PyHSlicingNode" Object Methods |
// +-------------------------------------------------------------+
PythonOnlyDeleteMethod(HSlicingNode)
PyTypeObjectLinkPyType(HSlicingNode)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyHSlicingNode" Shared Library Code Part |
// +=================================================================+
extern PyObject* PyHSlicingNode_NEW ( HSlicingNode* node )
{
if (not node) Py_RETURN_NONE;
PyHSlicingNode* pyNode = NULL;
HTRY
pyNode = PyObject_NEW( PyHSlicingNode, &PyTypeHSlicingNode );
if (not pyNode) return NULL;
pyNode->ACCESS_OBJECT = node;
HCATCH
return (PyObject*)pyNode;
}
PyTypeInheritedObjectDefinitions(HSlicingNode, SlicingNode)
#endif // End of Shared Library Code Part.
} // extern "C".
} // Bora namespace.

View File

@ -0,0 +1,137 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PyRHSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyNet.h"
#include "hurricane/isobar/PyLayer.h"
#include "bora/PyRHSlicingNode.h"
namespace Bora {
using namespace Hurricane;
using namespace Isobar;
extern "C" {
#undef ACCESS_OBJECT
#undef ACCESS_CLASS
#define ACCESS_OBJECT _baseObject._object
#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(RHSlicingNode,node,function)
// +=================================================================+
// | "PyRHSlicingNode" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
// +-------------------------------------------------------------+
// | "PyRHSlicingNode" Attribute Methods |
// +-------------------------------------------------------------+
static PyObject* PyRHSlicingNode_create ( PyObject* , PyObject* args )
{
PyObject* pyNet = NULL;
PyObject* pyLayer = NULL;
int npitch = 0;
const char* cname;
const char* iname;
RHSlicingNode* node = NULL;
HTRY
if (not PyArg_ParseTuple( args,"OOiss|O:RHSlicingNode.create"
, &pyNet
, &pyLayer
, &npitch
, &cname
, &iname) ) {
PyErr_SetString ( ConstructorError, "RHSlicingNode.create(): Invalid/bad number of parameters ." );
return NULL;
}
if (not IsPyNet(pyNet)) {
PyErr_SetString( ConstructorError, "RHSlicingNode.create(): First argument *must* be of type Net." );
return NULL;
}
Layer* layer = PYDERIVEDLAYER_O( pyLayer );
if (not layer) {
PyErr_SetString( ConstructorError, "RHSlicingNode.create(): Fifth argument *must* be of type Layer." );
return NULL;
}
Net* net = PYNET_O( pyNet );
node = RHSlicingNode::create( net, layer, npitch, cname, iname );
HCATCH
return PyRHSlicingNode_NEW(node);
}
// Standart Destroy (Attribute).
// ---------------------------------------------------------------
// PyRHSlicingNode Attribute Method table.
PyMethodDef PyRHSlicingNode_Methods[] =
{ { "create" , (PyCFunction)PyRHSlicingNode_create , METH_VARARGS|METH_STATIC
, "Create a new RHSlicingNode." }
, { NULL, NULL, 0, NULL } /* sentinel */
};
// +-------------------------------------------------------------+
// | "PyRHSlicingNode" Object Methods |
// +-------------------------------------------------------------+
PythonOnlyDeleteMethod(RHSlicingNode)
PyTypeObjectLinkPyType(RHSlicingNode)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyRHSlicingNode" Shared Library Code Part |
// +=================================================================+
extern PyObject* PyRHSlicingNode_NEW ( RHSlicingNode* node )
{
if (not node) Py_RETURN_NONE;
PyRHSlicingNode* pyNode = NULL;
HTRY
pyNode = PyObject_NEW( PyRHSlicingNode, &PyTypeRHSlicingNode );
if (not pyNode) return NULL;
pyNode->ACCESS_OBJECT = node;
HCATCH
return (PyObject*)pyNode;
}
PyTypeInheritedObjectDefinitions(RHSlicingNode, SlicingNode)
#endif // End of Shared Library Code Part.
} // extern "C".
} // Bora namespace.

View File

@ -0,0 +1,138 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PyRVSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyNet.h"
#include "hurricane/isobar/PyLayer.h"
#include "bora/PyRVSlicingNode.h"
namespace Bora {
using namespace Hurricane;
using namespace Isobar;
extern "C" {
#undef ACCESS_OBJECT
#undef ACCESS_CLASS
#define ACCESS_OBJECT _baseObject._object
#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(RVSlicingNode,node,function)
// +=================================================================+
// | "PyRVSlicingNode" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
// +-------------------------------------------------------------+
// | "PyRVSlicingNode" Attribute Methods |
// +-------------------------------------------------------------+
static PyObject* PyRVSlicingNode_create ( PyObject* , PyObject* args )
{
PyObject* pyNet = NULL;
PyObject* pyLayer = NULL;
int npitch = 0;
const char* cname = "";
const char* iname = "";
RVSlicingNode* node = NULL;
HTRY
if (not PyArg_ParseTuple( args,"OOiss|O:RVSlicingNode.create"
, &pyNet
, &pyLayer
, &npitch
, &cname
, &iname) ) {
PyErr_SetString ( ConstructorError, "RVSlicingNode.create(): Invalid/bad number of parameters ." );
return NULL;
}
if (not IsPyNet(pyNet)) {
PyErr_SetString( ConstructorError, "RVSlicingNode.create(): First argument *must* be of type Net." );
return NULL;
}
Layer* layer = PYDERIVEDLAYER_O( pyLayer );
if (not layer) {
PyErr_SetString( ConstructorError, "RVSlicingNode.create(): Fifth argument *must* be of type Layer." );
return NULL;
}
Net* net = PYNET_O( pyNet );
node = RVSlicingNode::create( net, layer, npitch, cname, iname );
HCATCH
return PyRVSlicingNode_NEW(node);
}
// Standart Destroy (Attribute).
// ---------------------------------------------------------------
// PyRVSlicingNode Attribute Method table.
PyMethodDef PyRVSlicingNode_Methods[] =
{ { "create" , (PyCFunction)PyRVSlicingNode_create , METH_VARARGS|METH_STATIC
, "Create a new RVSlicingNode." }
, { NULL, NULL, 0, NULL } /* sentinel */
};
// +-------------------------------------------------------------+
// | "PyRVSlicingNode" Object Methods |
// +-------------------------------------------------------------+
PythonOnlyDeleteMethod(RVSlicingNode)
PyTypeObjectLinkPyType(RVSlicingNode)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyRVSlicingNode" Shared Library Code Part |
// +=================================================================+
extern PyObject* PyRVSlicingNode_NEW ( RVSlicingNode* node )
{
if (not node) Py_RETURN_NONE;
PyRVSlicingNode* pyNode = NULL;
HTRY
pyNode = PyObject_NEW( PyRVSlicingNode, &PyTypeRVSlicingNode );
if (not pyNode) return NULL;
pyNode->ACCESS_OBJECT = node;
HCATCH
return (PyObject*)pyNode;
}
PyTypeInheritedObjectDefinitions(RVSlicingNode, SlicingNode)
#endif // End of Shared Library Code Part.
} // extern "C".
} // Bora namespace.

542
bora/src/PySlicingNode.cpp Normal file
View File

@ -0,0 +1,542 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PySlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "bora/PySlicingNode.h"
#include "bora/PyHSlicingNode.h"
#include "bora/PyVSlicingNode.h"
#include "bora/PyDSlicingNode.h"
#include "bora/PyRHSlicingNode.h"
#include "bora/PyRVSlicingNode.h"
#include "hurricane/isobar/PyCell.h"
#include "hurricane/isobar/PyNet.h"
#include "crlcore/PyRoutingGauge.h"
namespace Bora {
using namespace Hurricane;
using namespace Isobar;
using CRL::PyRoutingGauge;
using CRL::PyRoutingGauge_Link;
using CRL::PyTypeRoutingGauge;
extern "C" {
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(SlicingNode,node,function)
// +=================================================================+
// | "PySlicingNode" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
// +-------------------------------------------------------------+
// | "PySlicingNode" Attribute Methods |
// +-------------------------------------------------------------+
// Standart destroy (Attribute).
//DBoDestroyAttribute(PySlicingNode_destroy ,PySlicingNode)
static PyObject* PySlicingNode_getCell ( PySlicingNode *self )
{
cdebug_log(20,0) << "PySlicingNode_getCell ()" << endl;
Cell* cell = NULL;
HTRY
METHOD_HEAD( "SlicingNode.getCell()" )
cell = node->getCell();
HCATCH
return PyCell_Link( cell );
}
static PyObject* PySlicingNode_getRoot ( PySlicingNode *self )
{
cdebug_log(20,0) << "PySlicingNode_getRoot ()" << endl;
SlicingNode* node = NULL;
HTRY
METHOD_HEAD( "SlicingNode.getRoot()" )
node = node->getRoot();
HCATCH
return PySlicingNode_NEW( node );
}
static PyObject* PySlicingNode_getParent ( PySlicingNode *self )
{
cdebug_log(20,0) << "PySlicingNode_getParent ()" << endl;
SlicingNode* node = NULL;
HTRY
METHOD_HEAD( "SlicingNode.getParent()" )
node = node->getParent();
HCATCH
return PySlicingNode_NEW( node );
}
static PyObject* PySlicingNode_setCell ( PySlicingNode* self, PyObject* args )
{
PyObject* pyCell = NULL;
HTRY
METHOD_HEAD( "SlicingNode.setCell()" )
if (not PyArg_ParseTuple(args,"O:SlicingNode.setCell", &pyCell)) {
PyErr_SetString( ConstructorError, "SlicingNode.setCell(): Invalid/bad type parameters ." );
return NULL;
}
if (not IsPyCell(pyCell)) {
PyErr_SetString( ConstructorError, "SlicingNode.setCell(): Argument *must* be of Cell type." );
return NULL;
}
node->setCell( PYCELL_O(pyCell) );
HCATCH
Py_RETURN_NONE;
}
static PyObject* PySlicingNode_setParent ( PySlicingNode* self, PyObject* args )
{
PyObject* pyNode = NULL;
HTRY
METHOD_HEAD( "SlicingNode.setParent()" )
if (not PyArg_ParseTuple(args,"O:SlicingNode.setParent", &pyNode)) {
PyErr_SetString( ConstructorError, "SlicingNode.setParent(): Invalid/bad type parameters ." );
return NULL;
}
if (not IsPySlicingNode(pyNode)) {
PyErr_SetString( ConstructorError, "SlicingNode.setParent(): Argument *must* be of SlicingNode type." );
return NULL;
}
node->setParent( PYSLICINGNODE_O(pyNode) );
HCATCH
Py_RETURN_NONE;
}
static PyObject* PySlicingNode_setRoutingGauge ( PySlicingNode* self, PyObject* args )
{
PyObject* pyRG = NULL;
HTRY
METHOD_HEAD( "SlicingNode.setRoutingGauge()" )
if (not PyArg_ParseTuple(args,"O:SlicingNode.setRoutingGauge", &pyRG)) {
PyErr_SetString( ConstructorError, "SlicingNode.setRoutingGauge(): Invalid/bad type parameters ." );
return NULL;
}
if (not IsPyRoutingGauge(pyRG)) {
PyErr_SetString( ConstructorError, "SlicingNode.setRoutingGauge(): Argument *must* be of RoutingGauge type." );
return NULL;
}
node->setRoutingGauge( PYROUTINGGAUGE_O(pyRG) );
HCATCH
Py_RETURN_NONE;
}
static PyObject* PySlicingNode_push_back ( PySlicingNode* self, PyObject* args )
{
PyObject* pyNode = NULL;
PyObject* pyReset = NULL;
HTRY
METHOD_HEAD( "SlicingNode.push_back()" )
if (not PyArg_ParseTuple(args,"O|O:SlicingNode.push_back", &pyNode, &pyReset)) {
PyErr_SetString( ConstructorError, "SlicingNode.push_back(): Invalid/bad type parameters ." );
return NULL;
}
PyObject* pyRepr = PyObject_Repr( pyNode );
string repr = PyString_AsString( pyRepr );
SlicingNode* child = SlicingNodeCast( pyNode );
if (not child) {
PyErr_SetString( ConstructorError, "SlicingNode.push_back(): Argument *must* be of SlicingNode type." );
return NULL;
}
bool reset = false;
if (pyReset) reset = (PyObject_IsTrue(pyReset) == 1);
node->push_back( child, reset );
HCATCH
Py_RETURN_NONE;
}
static PyObject* PySlicingNode_addSymmetryNet ( PySlicingNode* self, PyObject* args )
{
unsigned int type = 0;
PyObject* pyNet1 = NULL;
PyObject* pyNet2 = NULL;
HTRY
METHOD_HEAD( "SlicingNode.addSymmetryNet()" )
if (not PyArg_ParseTuple(args,"IO|O:SlicingNode.addSymmetryNet", &type, &pyNet1, &pyNet2)) {
PyErr_SetString( ConstructorError, "SlicingNode.addSymmetryNet(): Invalid/bad type parameters." );
return NULL;
}
if (not IsPyNet(pyNet1)) {
PyErr_SetString( ConstructorError, "SlicingNode.setParent(): Argument *must* be of Net type." );
return NULL;
}
if (pyNet2){
if (not IsPyNet(pyNet2)) {
PyErr_SetString( ConstructorError, "SlicingNode.setParent(): Argument *must* be of Net type." );
return NULL;
}
//cerr << "type : " << type << endl;
// cerr << "pyNet1: " << pyNet1 << endl;
//cerr << "pyNet2: " << pyNet2 << endl;
node->addSymmetryNet( type, PYNET_O(pyNet1), PYNET_O(pyNet2) );
} else {
//cerr << "type : " << type << endl;
//cerr << "pyNet1: " << pyNet1 << endl;
//cerr << "pyNet2: " << pyNet2 << endl;
node->addSymmetryNet( type, PYNET_O(pyNet1) );
}
HCATCH
Py_RETURN_NONE;
}
static PyObject* PySlicingNode_addSymmetry ( PySlicingNode* self, PyObject* args )
{
int childIndex = 0;
int copyIndex = 0;
PyObject* pyReset = NULL;
HTRY
METHOD_HEAD( "SlicingNode.addSymmetry()" )
if (not PyArg_ParseTuple(args,"ii|O:SlicingNode.addSymmetry", &childIndex, &copyIndex, &pyReset)) {
PyErr_SetString( ConstructorError, "SlicingNode.addSymmetry(): Invalid/bad type parameters ." );
return NULL;
}
bool reset = true;
if (pyReset) reset = (PyObject_IsTrue(pyReset) == 1);
node->addSymmetry( childIndex, copyIndex, reset );
HCATCH
Py_RETURN_NONE;
}
static PyObject* PySlicingNode_setGlobalSize ( PySlicingNode* self, PyObject* args )
{
unsigned int bsIndex = 0;
PyObject* pyWidth = 0;
PyObject* pyHeight = 0;
HTRY
METHOD_HEAD( "SlicingNode.setGlobalSize()" )
if (PyArg_ParseTuple(args,"OO:SlicingNode.setGlobalSize", &pyWidth, &pyHeight)) {
node->setGlobalSize( PyAny_AsLong(pyWidth), PyAny_AsLong(pyHeight) );
} else if (PyArg_ParseTuple(args,"I:SlicingNode.setGlobalSize", &bsIndex)) {
node->setGlobalSize( bsIndex );
} else {
PyErr_SetString( ConstructorError, "SlicingNode.setGlobalSize(): Invalid/bad type parameters ." );
return NULL;
}
HCATCH
Py_RETURN_NONE;
}
// Standart Accessors (Attributes).
DirectGetBoolAttribute(PySlicingNode_isPreset ,isPreset ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isSet ,isSet ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isPlaced ,isPlaced ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isAlignLeft ,isAlignLeft ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isAlignRight ,isAlignRight ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isAlignCenter ,isAlignCenter ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isAlignTop ,isAlignTop ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isAlignBottom ,isAlignBottom ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isHorizontal ,isHorizontal ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isVertical ,isVertical ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isDevice ,isDevice ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isRouting ,isRouting ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isEmpty ,isEmpty ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isOverCell ,isOverCell ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isRoutingCreated ,isRoutingCreated ,PySlicingNode,SlicingNode)
DirectGetBoolAttribute(PySlicingNode_isRoutingEstimated,isRoutingEstimated,PySlicingNode,SlicingNode)
DirectGetUIntAttribute( PySlicingNode_getId ,getId ,PySlicingNode,SlicingNode)
DirectGetUIntAttribute( PySlicingNode_getPreset ,getPreset ,PySlicingNode,SlicingNode)
DirectGetUIntAttribute( PySlicingNode_getSet ,getSet ,PySlicingNode,SlicingNode)
DirectGetUIntAttribute( PySlicingNode_getPlaced ,getPlaced ,PySlicingNode,SlicingNode)
DirectGetUIntAttribute( PySlicingNode_getAlignment ,getAlignment ,PySlicingNode,SlicingNode)
DirectGetUIntAttribute( PySlicingNode_getType ,getType ,PySlicingNode,SlicingNode)
DirectGetIntAttribute( PySlicingNode_getCpt ,getCpt ,PySlicingNode,SlicingNode)
DirectGetDoubleAttribute(PySlicingNode_getRatio ,getRatio ,PySlicingNode,SlicingNode)
DirectGetDoubleAttribute(PySlicingNode_getArea ,getArea ,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getHeight ,getHeight ,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getWidth ,getWidth ,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getX ,getX ,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getY ,getY ,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getXCenter ,getXCenter ,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getYCenter ,getYCenter ,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getToleranceRatioH,getToleranceRatioH,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getToleranceRatioW,getToleranceRatioW,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getToleranceBandH ,getToleranceBandH ,PySlicingNode,SlicingNode)
DirectGetLongAttribute( PySlicingNode_getToleranceBandW ,getToleranceBandW ,PySlicingNode,SlicingNode)
DirectSetIntAttribute (PySlicingNode_setPreset ,setPreset ,PySlicingNode,SlicingNode)
DirectSetIntAttribute (PySlicingNode_setSet ,setSet ,PySlicingNode,SlicingNode)
DirectSetIntAttribute (PySlicingNode_setPlaced ,setPlaced ,PySlicingNode,SlicingNode)
DirectSetIntAttribute (PySlicingNode_setAlignment ,setAlignment ,PySlicingNode,SlicingNode)
DirectSetIntAttribute (PySlicingNode_setType ,setType ,PySlicingNode,SlicingNode)
DirectSetIntAttribute (PySlicingNode_setOverCell ,setOverCell ,PySlicingNode,SlicingNode)
DirectSetIntAttribute (PySlicingNode_setRoutingCreated ,setRoutingCreated ,PySlicingNode,SlicingNode)
DirectSetIntAttribute (PySlicingNode_setRoutingEstimated,setRoutingEstimated,PySlicingNode,SlicingNode)
DirectSetLongAttribute(PySlicingNode_setX ,setX ,PySlicingNode,SlicingNode)
DirectSetLongAttribute(PySlicingNode_setY ,setY ,PySlicingNode,SlicingNode)
DirectSetLongAttribute(PySlicingNode_setToleranceRatioH ,setToleranceRatioH ,PySlicingNode,SlicingNode)
DirectSetLongAttribute(PySlicingNode_setToleranceRatioW ,setToleranceRatioW ,PySlicingNode,SlicingNode)
DirectSetLongAttribute(PySlicingNode_setToleranceBandH ,setToleranceBandH ,PySlicingNode,SlicingNode)
DirectSetLongAttribute(PySlicingNode_setToleranceBandW ,setToleranceBandW ,PySlicingNode,SlicingNode)
DirectVoidMethod(SlicingNode,node,updateGlobalSize)
DirectVoidMethod(SlicingNode,node,clearNodeSets)
DirectVoidMethod(SlicingNode,node,clearParentsNodeSets)
DirectVoidMethod(SlicingNode,node,removeParent)
DirectVoidMethod(SlicingNode,node,resetSlicingTree)
DirectVoidMethod(SlicingNode,node,print)
DirectVoidMethod(SlicingNode,node,updateNetConstraints)
accessorVectorFromVoid(getChildren,PySlicingNode,SlicingNode,SlicingNode)
// ---------------------------------------------------------------
// PySlicingNode Attribute Method table.
PyMethodDef PySlicingNode_Methods[] =
{ { "isPreset" , (PyCFunction)PySlicingNode_isPreset , METH_NOARGS , "To be documented." }
, { "isSet" , (PyCFunction)PySlicingNode_isSet , METH_NOARGS , "To be documented." }
, { "isPlaced" , (PyCFunction)PySlicingNode_isPlaced , METH_NOARGS , "To be documented." }
, { "isAlignLeft" , (PyCFunction)PySlicingNode_isAlignLeft , METH_NOARGS , "To be documented." }
, { "isAlignRight" , (PyCFunction)PySlicingNode_isAlignRight , METH_NOARGS , "To be documented." }
, { "isAlignCenter" , (PyCFunction)PySlicingNode_isAlignCenter , METH_NOARGS , "To be documented." }
, { "isAlignTop" , (PyCFunction)PySlicingNode_isAlignTop , METH_NOARGS , "To be documented." }
, { "isAlignBottom" , (PyCFunction)PySlicingNode_isAlignBottom , METH_NOARGS , "To be documented." }
, { "isHorizontal" , (PyCFunction)PySlicingNode_isHorizontal , METH_NOARGS , "To be documented." }
, { "isVertical" , (PyCFunction)PySlicingNode_isVertical , METH_NOARGS , "To be documented." }
, { "isDevice" , (PyCFunction)PySlicingNode_isDevice , METH_NOARGS , "To be documented." }
, { "isRouting" , (PyCFunction)PySlicingNode_isRouting , METH_NOARGS , "To be documented." }
, { "isEmpty" , (PyCFunction)PySlicingNode_isEmpty , METH_NOARGS , "To be documented." }
, { "isPreset" , (PyCFunction)PySlicingNode_isPreset , METH_NOARGS , "To be documented." }
, { "isOverCell" , (PyCFunction)PySlicingNode_isOverCell , METH_NOARGS , "To be documented." }
, { "isRoutingCreated" , (PyCFunction)PySlicingNode_isRoutingCreated , METH_NOARGS , "To be documented." }
, { "isRoutingEstimated" , (PyCFunction)PySlicingNode_isRoutingEstimated , METH_NOARGS , "To be documented." }
, { "getId" , (PyCFunction)PySlicingNode_getId , METH_NOARGS , "To be documented." }
, { "getPreset" , (PyCFunction)PySlicingNode_getPreset , METH_NOARGS , "To be documented." }
, { "getSet" , (PyCFunction)PySlicingNode_getSet , METH_NOARGS , "To be documented." }
, { "getPlaced" , (PyCFunction)PySlicingNode_getPlaced , METH_NOARGS , "To be documented." }
, { "getAlignment" , (PyCFunction)PySlicingNode_getAlignment , METH_NOARGS , "To be documented." }
, { "getType" , (PyCFunction)PySlicingNode_getType , METH_NOARGS , "To be documented." }
, { "getCpt" , (PyCFunction)PySlicingNode_getCpt , METH_NOARGS , "To be documented." }
, { "getRatio" , (PyCFunction)PySlicingNode_getRatio , METH_NOARGS , "To be documented." }
, { "getArea" , (PyCFunction)PySlicingNode_getArea , METH_NOARGS , "To be documented." }
, { "getHeight" , (PyCFunction)PySlicingNode_getHeight , METH_NOARGS , "To be documented." }
, { "getWidth" , (PyCFunction)PySlicingNode_getWidth , METH_NOARGS , "To be documented." }
, { "getX" , (PyCFunction)PySlicingNode_getX , METH_NOARGS , "To be documented." }
, { "getY" , (PyCFunction)PySlicingNode_getY , METH_NOARGS , "To be documented." }
, { "getXCenter" , (PyCFunction)PySlicingNode_getXCenter , METH_NOARGS , "To be documented." }
, { "getYCenter" , (PyCFunction)PySlicingNode_getYCenter , METH_NOARGS , "To be documented." }
, { "getCell" , (PyCFunction)PySlicingNode_getCell , METH_NOARGS , "To be documented." }
, { "getRoot" , (PyCFunction)PySlicingNode_getRoot , METH_NOARGS , "To be documented." }
, { "getToleranceRatioH" , (PyCFunction)PySlicingNode_getToleranceRatioH , METH_NOARGS , "To be documented." }
, { "getToleranceRatioW" , (PyCFunction)PySlicingNode_getToleranceRatioW , METH_NOARGS , "To be documented." }
, { "getToleranceBandH" , (PyCFunction)PySlicingNode_getToleranceBandW , METH_NOARGS , "To be documented." }
, { "getToleranceBandW" , (PyCFunction)PySlicingNode_getToleranceBandH , METH_NOARGS , "To be documented." }
, { "getParent" , (PyCFunction)PySlicingNode_getParent , METH_NOARGS , "To be documented." }
, { "setPreset" , (PyCFunction)PySlicingNode_setPreset , METH_VARARGS, "To be documented." }
, { "setSet" , (PyCFunction)PySlicingNode_setSet , METH_VARARGS, "To be documented." }
, { "setPlaced" , (PyCFunction)PySlicingNode_setPlaced , METH_VARARGS, "To be documented." }
, { "setAlignment" , (PyCFunction)PySlicingNode_setAlignment , METH_VARARGS, "To be documented." }
, { "setType" , (PyCFunction)PySlicingNode_setType , METH_VARARGS, "To be documented." }
, { "setOverCell" , (PyCFunction)PySlicingNode_setOverCell , METH_VARARGS, "To be documented." }
, { "setRoutingCreated" , (PyCFunction)PySlicingNode_setRoutingCreated , METH_VARARGS, "To be documented." }
, { "setRoutingEstimated" , (PyCFunction)PySlicingNode_setRoutingEstimated , METH_VARARGS, "To be documented." }
, { "setX" , (PyCFunction)PySlicingNode_setX , METH_VARARGS, "To be documented." }
, { "setY" , (PyCFunction)PySlicingNode_setY , METH_VARARGS, "To be documented." }
, { "updateGlobalSize" , (PyCFunction)PySlicingNode_updateGlobalSize , METH_NOARGS , "To be documented." }
, { "setGlobalSize" , (PyCFunction)PySlicingNode_setGlobalSize , METH_VARARGS, "To be documented." }
, { "clearNodeSets" , (PyCFunction)PySlicingNode_clearNodeSets , METH_NOARGS , "To be documented." }
, { "clearParentsNodeSets" , (PyCFunction)PySlicingNode_clearParentsNodeSets, METH_NOARGS , "To be documented." }
, { "removeParent" , (PyCFunction)PySlicingNode_removeParent , METH_NOARGS , "To be documented." }
, { "resetSlicingTree" , (PyCFunction)PySlicingNode_resetSlicingTree , METH_NOARGS , "To be documented." }
, { "setCell" , (PyCFunction)PySlicingNode_setCell , METH_VARARGS, "To be documented." }
, { "setParent" , (PyCFunction)PySlicingNode_setParent , METH_VARARGS, "To be documented." }
, { "setRoutingGauge" , (PyCFunction)PySlicingNode_setRoutingGauge , METH_VARARGS, "To be documented." }
, { "setToleranceRatioH" , (PyCFunction)PySlicingNode_setToleranceRatioH , METH_VARARGS, "To be documented." }
, { "setToleranceRatioW" , (PyCFunction)PySlicingNode_setToleranceRatioW , METH_VARARGS, "To be documented." }
, { "setToleranceBandH" , (PyCFunction)PySlicingNode_setToleranceBandW , METH_VARARGS, "To be documented." }
, { "setToleranceBandW" , (PyCFunction)PySlicingNode_setToleranceBandH , METH_VARARGS, "To be documented." }
, { "addSymmetry" , (PyCFunction)PySlicingNode_addSymmetry , METH_VARARGS, "To be documented." }
, { "push_back" , (PyCFunction)PySlicingNode_push_back , METH_VARARGS, "To be documented." }
, { "getChildren" , (PyCFunction)PySlicingNode_getChildren , METH_NOARGS , "To be documented." }
, { "cprint" , (PyCFunction)PySlicingNode_print , METH_NOARGS , "To be documented." }
, { "updateNetConstraints" , (PyCFunction)PySlicingNode_updateNetConstraints, METH_NOARGS , "To be documented." }
, { "addSymmetryNet" , (PyCFunction)PySlicingNode_addSymmetryNet , METH_VARARGS, "To be documented." }
//, { "destroy" , (PyCFunction)PySlicingNode_destroy , METH_NOARGS
// , "Destroy associated hurricane object, the python object remains." }
, {NULL, NULL, 0, NULL} /* sentinel */
};
// +-------------------------------------------------------------+
// | "PySlicingNode" Object Methods |
// +-------------------------------------------------------------+
PythonOnlyDeleteMethod(SlicingNode)
PyTypeObjectLinkPyType(SlicingNode)
static PyObject* PySlicingNodeIteratorNext ( PySlicingNodeVectorIterator* pyIterator )
{
HTRY
if (pyIterator->_iterator != pyIterator->_pyContainer->_container->end()) {
SlicingNode* object = *(pyIterator->_iterator);
++(pyIterator->_iterator);
return PySlicingNode_NEW(object);
}
HCATCH
return NULL;
}
VectorMethods (SlicingNode)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PySlicingNode" Shared Library Code Part |
// +=================================================================+
// ---------------------------------------------------------------
// Allocator Method : "PySlicingNode_NEW ()"
//
// No PySlicingNode should ever be created, it's not a terminal object
// of the class hierarchy. Instead create the real underlying PyObject.
PyObject* PySlicingNode_NEW ( SlicingNode* node ) {
if (not node) {
PyErr_SetString ( HurricaneError, "PySlicingNode_NEW(): NULL node argument." );
return NULL;
}
// HVSlicingNode* hvnode = dynamic_cast<HVSlicingNode*>(node);
// if (hvnode) return PyHVSlicingNode_NEW( hvnode );
HSlicingNode* hnode = dynamic_cast<HSlicingNode*>(node);
if (hnode) return PyHSlicingNode_NEW( hnode );
VSlicingNode* vnode = dynamic_cast<VSlicingNode*>(node);
if (vnode) return PyVSlicingNode_NEW( vnode );
DSlicingNode* dnode = dynamic_cast<DSlicingNode*>(node);
if (dnode) return PyDSlicingNode_NEW( dnode );
RHSlicingNode* rhnode = dynamic_cast<RHSlicingNode*>(node);
if (rhnode) return PyRHSlicingNode_NEW( rhnode );
RVSlicingNode* rvnode = dynamic_cast<RVSlicingNode*>(node);
if (rvnode) return PyRVSlicingNode_NEW( rvnode );
Py_RETURN_NONE;
}
PyTypeRootObjectDefinitions(SlicingNode)
PyTypeVectorObjectDefinitions(SlicingNodeVector)
PyTypeVectorObjectDefinitions(SlicingNodeVectorIterator)
extern void PySlicingNode_postModuleInit ()
{
PyObject* constant;
LoadObjectConstant(PyTypeSlicingNode.tp_dict,Preset ,"Preset" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,Set ,"Set" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,Placed ,"Placed" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,UnknownAlignment ,"UnknownAlignment" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,AlignLeft ,"AlignLeft" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,AlignRight ,"AlignRight" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,AlignCenter ,"AlignCenter" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,AlignTop ,"AlignTop" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,AlignBottom ,"AlignBottom" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,UnknownType ,"UnknownType" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,HorizontalSNode ,"HorizontalSNode" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,VerticalSNode ,"VerticalSNode" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,DeviceSNode ,"DeviceSNode" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,RoutingSNode ,"RoutingSNode" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,None ,"None" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,MX ,"MX" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,MY ,"MY" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,FixedRoutingSNode,"FixedRoutingSNode");
LoadObjectConstant(PyTypeSlicingNode.tp_dict,OverCell ,"OverCell" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,RoutingEstimated ,"RoutingEstimated" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,RoutingCreated ,"RoutingCreated" );
//LoadObjectConstant(PyTypeSlicingNode.tp_dict,HasDijkstra ,"HasDijkstra" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,presetMask ,"presetMask" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,setMask ,"setMask" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,placedMask ,"placedMask" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,alignmentMask ,"alignmentMask" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,slicingTypeMask ,"slicingTypeMask" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,overCellMask ,"overCellMask" );
LoadObjectConstant(PyTypeSlicingNode.tp_dict,routingEstimatedMask,"routingEstimateMask");
LoadObjectConstant(PyTypeSlicingNode.tp_dict,routingCreatedMask ,"routingCreateMask" );
}
#endif // Shared Library Code Part.
} // extern "C".
// +=================================================================+
// | "PySlicingNode" Shared Library Code Part |
// +=================================================================+
# if !defined(__PYTHON_MODULE__)
SlicingNode* SlicingNodeCast ( PyObject* derivedObject ) {
//if (IsPyHVSlicingNode(derivedObject)) return PYHVSLICINGNODE_O(derivedObject);
if (IsPyHSlicingNode(derivedObject)) return PYHSLICINGNODE_O(derivedObject);
if (IsPyVSlicingNode(derivedObject)) return PYVSLICINGNODE_O(derivedObject);
if (IsPyDSlicingNode(derivedObject)) return PYDSLICINGNODE_O(derivedObject);
if (IsPyRHSlicingNode(derivedObject)) return PYRHSLICINGNODE_O(derivedObject);
if (IsPyRVSlicingNode(derivedObject)) return PYRVSLICINGNODE_O(derivedObject);
return NULL;
}
#endif
} // Bora namespace.

115
bora/src/PyVSlicingNode.cpp Normal file
View File

@ -0,0 +1,115 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/PyVSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "bora/PyVSlicingNode.h"
namespace Isobar {
using namespace Hurricane;
using namespace Bora;
extern "C" {
#undef ACCESS_OBJECT
#undef ACCESS_CLASS
#define ACCESS_OBJECT _baseObject._object
#define ACCESS_CLASS(_pyObject) &(_pyObject->_baseObject)
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(VSlicingNode,node,function)
// +=================================================================+
// | "PyVSlicingNode" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
// +-------------------------------------------------------------+
// | "PyVSlicingNode" Attribute Methods |
// +-------------------------------------------------------------+
static PyObject* PyVSlicingNode_create ( PyObject* , PyObject* args )
{
unsigned int alignment = AlignBottom;
VSlicingNode* node = NULL;
HTRY
if (not PyArg_ParseTuple(args,"I:VSlicingNode.create", &alignment) ) {
PyErr_SetString ( ConstructorError, "VSlicingNode.create(): Invalid/bad type parameters ." );
return NULL;
}
node = VSlicingNode::create( alignment );
HCATCH
return PyVSlicingNode_NEW(node);
}
// Standart Destroy (Attribute).
// ---------------------------------------------------------------
// PyVSlicingNode Attribute Method table.
PyMethodDef PyVSlicingNode_Methods[] =
{ { "create" , (PyCFunction)PyVSlicingNode_create , METH_VARARGS|METH_STATIC
, "Create a new VSlicingNode." }
, { NULL, NULL, 0, NULL } /* sentinel */
};
// +-------------------------------------------------------------+
// | "PyVSlicingNode" Object Methods |
// +-------------------------------------------------------------+
PythonOnlyDeleteMethod(VSlicingNode)
PyTypeObjectLinkPyType(VSlicingNode)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyVSlicingNode" Shared Library Code Part |
// +=================================================================+
extern PyObject* PyVSlicingNode_NEW ( VSlicingNode* node )
{
if (not node) Py_RETURN_NONE;
PyVSlicingNode* pyNode = NULL;
HTRY
pyNode = PyObject_NEW( PyVSlicingNode, &PyTypeVSlicingNode );
if (not pyNode) return NULL;
pyNode->ACCESS_OBJECT = node;
HCATCH
return (PyObject*)pyNode;
}
PyTypeInheritedObjectDefinitions(VSlicingNode, SlicingNode)
#endif // End of Shared Library Code Part.
} // extern "C".
} // Isobar namespace.

208
bora/src/RHSlicingNode.cpp Normal file
View File

@ -0,0 +1,208 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./RHSlicingNode.h" |
// +-----------------------------------------------------------------+
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "hurricane/DataBase.h"
#include "hurricane/NetExternalComponents.h"
#include "crlcore/RoutingGauge.h"
#include "crlcore/AllianceFramework.h"
#include "bora/RHSlicingNode.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::Warning;
using Hurricane::DataBase;
using Hurricane::Box;
using Hurricane::NetExternalComponents;
// -------------------------------------------------------------------
// Class : "Bora::RHSlicingNode".
RHSlicingNode::RHSlicingNode ( DbU::Unit height )
: RHVSlicingNode()
{
RHBoxSet* node = RHBoxSet::create( height );
_nodeSets->push_back( node );
_boxSet = node;
_minHeight = height;
if (_parent) _minWidth = _parent->getWidth();
else _minWidth = 0;
DbU::Unit hpitch = _rg->getHorizontalPitch();
if (height % hpitch)
cerr << Warning( "RHSlicingNode::RHSlicingNode(): On %s, height is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(height).c_str()
, DbU::getValueString(hpitch).c_str()
) << endl;
}
RHSlicingNode::RHSlicingNode ( Hurricane::Instance* instance )
: RHVSlicingNode()
{
RHBoxSet* node = RHBoxSet::create( instance->getMasterCell()->getAbutmentBox().getHeight() );
_nodeSets->push_back( node );
_boxSet = node;
_minHeight = instance->getMasterCell()->getAbutmentBox().getHeight();
setRailInstance( instance );
if (_parent) _minWidth = _parent->getWidth();
else _minWidth = 0;
}
RHSlicingNode::~RHSlicingNode ()
{ }
RHSlicingNode* RHSlicingNode::create ( DbU::Unit height )
{
return new RHSlicingNode( height );
}
RHSlicingNode* RHSlicingNode::create ( Hurricane::Net* net
, Hurricane::Layer* layer
, int npitch
, string cname
, string iname )
{
Cell* cell = Hurricane::Cell::create( Hurricane::DataBase::getDB()->getRootLibrary(), cname );
Net* subnet = Hurricane::Net::create( cell, net->getName() );
DbU::Unit height = CRL::AllianceFramework::get()->getRoutingGauge()->getHorizontalPitch() * npitch;
subnet->setExternal( true );
Hurricane::Horizontal* h = Hurricane::Horizontal::create( subnet, layer, height/2, height );
NetExternalComponents::setExternal( h );
Hurricane::Instance* instance = Hurricane::Instance::create( _cell, iname, cell );
instance->getPlug( subnet )->setNet( net );
cell->setAbutmentBox( Box( 0, 0, 0, height ) );
SlicingNode::addRailSegments( h );
return new RHSlicingNode( instance );
}
RHSlicingNode* RHSlicingNode::clone ( unsigned int tr )
{
RHSlicingNode* node = RHSlicingNode::create( getHeight() );
return node;
}
DbU::Unit RHSlicingNode::getWidth () const
{ return (_parent) ? _parent->getWidth() : 0; }
void RHSlicingNode::setHeight ( DbU::Unit height )
{
_boxSet->setHeight( height );
DbU::Unit hpitch = _rg->getHorizontalPitch();
if (height % hpitch)
cerr << Warning( "RHSlicingNode::getHeight(): On %s, height is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(height).c_str()
, DbU::getValueString(hpitch).c_str()
) << endl;
}
void RHSlicingNode::estimateChannelsSize ()
{
cdebug_log(535,0) << "RHSlicingNode::estimateChannelsSize() " << this << endl;
if (not getRailInstance()) {
if (_gcell and _rg) {
DbU::Unit hpitch = _rg->getHorizontalPitch();
if (getMaxWireOccupation() > 0) {
int occupancyH = getMaxWireOccupation(); //+1 for having enough space
if (occupancyH % 2) ++occupancyH;
updateMasterSize( occupancyH*hpitch );
} else
updateMasterSize( 2*hpitch );
setRoutingEstimated(RoutingEstimated);
} else
cerr << Error( "RHSlicingNode::estimateChannelsSize()): Technology missing." ) << endl;
}
}
void RHSlicingNode::_expandRoutingChannel ()
{
SlicingNode* master = this;
while ( master->getMaster() ) master = master->getMaster();
cdebug_log(535,0) << "RHSlicingNode::_expandRoutingChannel() "
<< this << " height:" << DbU::getValueString(master->getHeight()) << endl;
setHeight( master->getHeight() );
setRoutingEstimated( RoutingEstimated );
}
void RHSlicingNode::expandRoutingChannel ( DbU::Unit height, DbU::Unit width )
{
cdebug_log(535,0) << "RHSlicingNode::expandRoutingChannel(DbU::Unit,DbU::Unit) "
<< this << " height:" << DbU::getValueString(height) << endl;
setHeight( height );
setRoutingEstimated( RoutingEstimated );
}
void RHSlicingNode::updateMasterSize ( DbU::Unit size )
{
SlicingNode* master = this;
while ( master->getMaster() ) master = master->getMaster();
if (master->getHeight() < size) master->setHeight( size );
}
void RHSlicingNode::setGCell ( Anabatic::GCell* gcell )
{
cdebug_log(535,1) << "RHSlicingNode::setGCell() " << gcell << endl;
_gcell = gcell;
if (_gcell) {
if (_railInstance) _gcell->setType( Anabatic::Flags::HRailGCell );
else _gcell->setType( Anabatic::Flags::HChannelGCell );
}
cdebug_tabw(535,-1);
}
void RHSlicingNode::setWidth ( DbU::Unit width )
{
cerr << Error( "RHSlicingNode::setWidth(): Unimplemented on this type." ) << endl;
}
string RHSlicingNode::_getTypeName () const
{ return "RHSlicingNode"; }
}

230
bora/src/RHVSlicingNode.cpp Normal file
View File

@ -0,0 +1,230 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./bora/RHVSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "hurricane/Box.h"
#include "hurricane/Horizontal.h"
#include "hurricane/Vertical.h"
#include "hurricane/Transformation.h"
#include "hurricane/UpdateSession.h"
#include "bora/ChannelRouting.h"
#include "bora/RHVSlicingNode.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::Warning;
using Hurricane::Box;
using Hurricane::Component;
using Hurricane::Horizontal;
using Hurricane::Vertical;
using Hurricane::UpdateSession;
using Hurricane::Transformation;
// -------------------------------------------------------------------
// Class : "Bora::RHVSlicingNode".
int RHVSlicingNode::_count = 0;
int RHVSlicingNode::_countAll = 0;
RHVSlicingNode::RHVSlicingNode()
: SlicingNode( RoutingSNode, NodeSets::create(), UnknownAlignment, NULL )
, _railInstance (NULL)
, _minHeight (0)
, _minWidth (0)
, _wireOccupation(NULL)
{
++_count;
setPreset (Preset);
setSet (Set );
setOverCell(OverCell);
_wireOccupation = ChannelRouting::create();
}
RHVSlicingNode::~RHVSlicingNode ()
{ --_count; }
void RHVSlicingNode::print () const
{
cerr << "- Print from Slicing Node - " << endl;
if (_railInstance) cerr << "RailInstance: " << _railInstance << endl;
SlicingNode::print();
}
void RHVSlicingNode::_setGlobalSize ( DbU::Unit height, DbU::Unit width )
{ }
void RHVSlicingNode::preDestroy ()
{
if(_wireOccupation) _wireOccupation->destroy();
SlicingNode::preDestroy();
}
void RHVSlicingNode::destroy ()
{
RHVSlicingNode::preDestroy();
delete this;
}
void RHVSlicingNode::preRecursiveDestroy ()
{
SlicingNode::preRecursiveDestroy();
}
void RHVSlicingNode::recursiveDestroy ()
{
RHVSlicingNode::preRecursiveDestroy();
delete this;
}
void RHVSlicingNode::resetSize ()
{
_boxSet->setHeight( _minHeight );
_boxSet->setWidth ( _minWidth );
}
bool RHVSlicingNode::isSame ( SlicingNode* node, unsigned int flags ) const
{
return ( (getHeight() == node->getHeight())
and (getWidth () == node->getWidth ()) );
}
bool RHVSlicingNode::isSymmetric ( SlicingNode* node, unsigned int symmetryType, unsigned int flags ) const
{
return ( (getHeight() == node->getHeight())
and (getWidth () == node->getWidth ()) );
}
void RHVSlicingNode::setRailInstance ( Hurricane::Instance* instance )
{ _railInstance = instance; }
void RHVSlicingNode::_place ( DbU::Unit x, DbU::Unit y, bool replace )
{
SlicingNode::_place( x, y, replace );
if (_railInstance) {
Net* supplyNet = NULL;
size_t count = 0;
for ( Net* net : _railInstance->getMasterCell()->getNets())
{ supplyNet = net; ++count; }
if (count != 1)
cerr << Error( "RHVSlicingNode::_place(DbU::Unit,DbU::Unit,bool): Several Nets in Rail Instance Cell." ) << endl;
Component* wire = NULL;
count = 0;
for ( Component* component : supplyNet->getComponents() )
{ wire = component; ++count; }
if (count != 1)
cerr << Error( "RHVSlicingNode::_place(DbU::Unitx,DbU::Unit,bool): Several Components in Rail Instance Cell." ) << endl;
Horizontal* h = dynamic_cast<Horizontal*>(wire);
Vertical* v = dynamic_cast<Vertical*> (wire);
UpdateSession::open();
if (h) {
h->setDxSource( 0 );
h->setDxTarget( getRootWidth() );
_railInstance->getMasterCell()->setAbutmentBox( Box( 0, 0, getRootWidth(), getHeight() ) );
_railInstance->setTransformation( Transformation( _cell->getAbutmentBox().getXMin(), getY() ) );
} else if (v) {
v->setDySource( 0 );
v->setDyTarget( getRootHeight() );
_railInstance->getMasterCell()->setAbutmentBox( Box( 0, 0, getWidth(), getRootHeight() ) );
_railInstance->setTransformation(Transformation( getX(), _cell->getAbutmentBox().getYMin() ) );
} else
cerr << Error( "RHVSlicingNode::_place(DbU::Unit,DbU::Unit,bool): Unknown segment type." ) << endl;
_railInstance->setPlacementStatus( Instance::PlacementStatus::PLACED );
UpdateSession::close();
}
}
void RHVSlicingNode::addWireOccupation ( DbU::Unit min, DbU::Unit max )
{ if ( _wireOccupation and (min != max) ) _wireOccupation->insertChannel(min, max); }
void RHVSlicingNode::resetWireOccupation ()
{ if (_wireOccupation) _wireOccupation->reset(); }
int RHVSlicingNode::getMaxWireOccupation ()
{ return (_wireOccupation) ? _wireOccupation->getMaxCount()+1 : 0; }
unsigned int RHVSlicingNode::getAlignment () const
{
cerr << Error( "RHVSlicingNode::getAlignment(): Unimplemented on this type." ) << endl;
return UnknownAlignment;
}
NodeSets* RHVSlicingNode::getNodeSets () const
{
cerr << Error( "RHVSlicingNode::getNodeSets(): Unimplemented on this type." ) << endl;
return NULL;
}
BoxSet* RHVSlicingNode::getPairH ( DbU::Unit ) const
{
cerr << Error( "RHVSlicingNode::getPaitH(): Unimplemented on this type." ) << endl;
return _boxSet;
}
BoxSet* RHVSlicingNode::getPairHW( DbU::Unit , DbU::Unit ) const
{
cerr << Error( "RHVSlicingNode::getPaitHW(): Unimplemented on this type." ) << endl;
return _boxSet;
}
void RHVSlicingNode::setPairH( DbU::Unit )
{
cerr << Error( "RHVSlicingNode::setPaitH(): Unimplemented on this type." ) << endl;
}
void RHVSlicingNode::setPairHW( DbU::Unit , DbU::Unit )
{
cerr << Error( "RHVSlicingNode::setPaitHW(): Unimplemented on this type." ) << endl;
}
} // Bora namespace.

194
bora/src/RVSlicingNode.cpp Normal file
View File

@ -0,0 +1,194 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./RVSlicingNode.h" |
// +-----------------------------------------------------------------+
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "hurricane/DataBase.h"
#include "hurricane/NetExternalComponents.h"
#include "crlcore/RoutingGauge.h"
#include "crlcore/AllianceFramework.h"
#include "bora/RVSlicingNode.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::Warning;
using Hurricane::DataBase;
using Hurricane::Box;
using Hurricane::NetExternalComponents;
// -------------------------------------------------------------------
// Class : "Bora::RVSlicingNode".
RVSlicingNode::RVSlicingNode ( DbU::Unit width )
: RHVSlicingNode()
{
RVBoxSet* node = RVBoxSet::create( width );
_nodeSets->push_back( node );
_boxSet = node;
_minWidth = width;
if (_parent) _minHeight = _parent->getHeight();
else _minHeight = 0;
DbU::Unit vpitch = _rg->getVerticalPitch();
if (width % vpitch)
cerr << Warning( "RVSlicingNode::RVSlicingNode(): On %s, width is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(width).c_str()
, DbU::getValueString(vpitch).c_str()
) << endl;
}
RVSlicingNode::RVSlicingNode ( Hurricane::Instance* instance )
: RHVSlicingNode()
{
RVBoxSet* node = RVBoxSet::create( instance->getMasterCell()->getAbutmentBox().getWidth() );
_nodeSets->push_back( node );
_boxSet = node;
_minHeight = instance->getMasterCell()->getAbutmentBox().getWidth();
setRailInstance( instance );
if (_parent) _minWidth = _parent->getWidth();
else _minWidth = 0;
}
RVSlicingNode::~RVSlicingNode ()
{ }
RVSlicingNode* RVSlicingNode::create ( DbU::Unit width )
{
return new RVSlicingNode( width );
}
RVSlicingNode* RVSlicingNode::create ( Hurricane::Net* net
, Hurricane::Layer* layer
, int npitch
, string cname
, string iname )
{
Cell* cell = Hurricane::Cell::create( Hurricane::DataBase::getDB()->getRootLibrary(), cname );
Net* subnet = Hurricane::Net::create( cell, net->getName() );
DbU::Unit width = CRL::AllianceFramework::get()->getRoutingGauge()->getVerticalPitch()* npitch;
subnet->setExternal( true );
Hurricane::Vertical* v = Hurricane::Vertical::create( subnet, layer, width/2, width );
NetExternalComponents::setExternal( v );
Hurricane::Instance* instance = Hurricane::Instance::create( _cell, iname, cell );
instance->getPlug( subnet )->setNet( net );
cell->setAbutmentBox( Box( 0, 0, width, 0) );
SlicingNode::addRailSegments( v );
return new RVSlicingNode( instance );
}
RVSlicingNode* RVSlicingNode::clone ( unsigned int tr )
{
RVSlicingNode* node = RVSlicingNode::create( getWidth() );
return node;
}
DbU::Unit RVSlicingNode::getHeight () const
{ return (_parent) ? _parent->getHeight() : 0; }
void RVSlicingNode::setWidth ( DbU::Unit width )
{ _boxSet->setWidth( width ); }
void RVSlicingNode::estimateChannelsSize ()
{
cdebug_log(535,0) << "RVSlicingNode::estimateChannelsSize() " << this << endl;
if (not getRailInstance()) {
if (_gcell and _rg) {
DbU::Unit vpitch = _rg->getVerticalPitch();
if (getMaxWireOccupation() > 0) {
int occupancyV = getMaxWireOccupation(); // +1 for having enough space
cdebug_log(535,0) << this << " has " << getMaxWireOccupation() << " (-1) tracks" << endl;
if (occupancyV % 2) ++occupancyV;
updateMasterSize( occupancyV * vpitch );
} else
updateMasterSize( 2 * vpitch );
setRoutingEstimated( RoutingEstimated );
} else
cerr << Error( "RHSlicingNode::estimateChannelsSize(: Technology missing." ) << endl;
}
}
void RVSlicingNode::_expandRoutingChannel ()
{
SlicingNode* master = this;
while ( master->getMaster() ) master = master->getMaster();
setWidth( master->getWidth() );
setRoutingEstimated( RoutingEstimated );
}
void RVSlicingNode::expandRoutingChannel ( DbU::Unit height, DbU::Unit width )
{
setWidth( width );
setRoutingEstimated( RoutingEstimated );
}
void RVSlicingNode::setGCell ( Anabatic::GCell* gcell )
{
cdebug_log(535,1) << "RVSlicingNode::setGCell() " << gcell << endl;
_gcell = gcell;
if (_gcell) {
if (_railInstance) _gcell->setType( Anabatic::Flags::VRailGCell );
else _gcell->setType( Anabatic::Flags::VChannelGCell );
}
cdebug_tabw(535,-1);
}
void RVSlicingNode::updateMasterSize ( DbU::Unit size )
{
SlicingNode* master = this;
while ( master->getMaster() ) master = master->getMaster();
if (master->getWidth() < size) master->setWidth( size );
}
void RVSlicingNode::setHeight( DbU::Unit height )
{
cerr << Error( "RVSlicingNode::setWidth(): Unimplemented on this type." ) << endl;
}
string RVSlicingNode::_getTypeName () const
{ return "RVSlicingNode"; }
} // Bora namespace.

View File

@ -0,0 +1,163 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./SlicingDataModel.h" |
// +-----------------------------------------------------------------+
#include <iostream>
#include <QFont>
#include "hurricane/DbU.h"
#include "hurricane/viewer/Graphics.h"
#include "hurricane/analog/AnalogCellExtension.h"
#include "bora/SlicingDataModel.h"
namespace Bora {
using namespace std;
using Hurricane::Graphics;
using Hurricane::DbU;
using Analog::AnalogCellExtension;
SlicingDataModel::SlicingDataModel ( QObject* parent )
: QAbstractTableModel(parent)
, _cell(NULL)
{ }
SlicingDataModel::~SlicingDataModel ()
{ }
void SlicingDataModel::setCell( Hurricane::Cell* cell )
{
_cell = cell;
}
QVariant SlicingDataModel::data ( const QModelIndex& index, int role ) const
{
static QFont nameFont = Graphics::getFixedFont ( QFont::Bold );
static QFont valueFont = Graphics::getFixedFont ( QFont::Normal, true );
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _cell );
if ( (not slicingtree) or (not index.isValid()) ) return QVariant();
if ( role == Qt::SizeHintRole ) {
switch (index.column()) {
case 0: return 200;
default:
case 1: return -1;
}
}
if ( role == Qt::FontRole ) {
switch (index.column()) {
case 0: return nameFont;
default:
case 1: return valueFont;
}
}
if ( role == Qt::DisplayRole ) {
int row = index.row();
if ( row < (int)rowCount() ) {
NodeSets nodeSets = slicingtree->getNodeSets();
switch ( index.column() ) {
case 0: return QVariant( row );
case 1: return QVariant( DbU::toPhysical(nodeSets[row]->getHeight() , DbU::Micro) );
case 2: return QVariant( DbU::toPhysical(nodeSets[row]->getWidth() , DbU::Micro) );
case 3: return QVariant( nodeSets[row]->getOccupationArea() );
case 4: return QVariant( nodeSets[row]->getCpt() );
case 5: return QVariant( (double) ( nodeSets[row]->getWidth()
/ nodeSets[row]->getHeight()) );
case 6: return QVariant( DbU::getPhysical( nodeSets[row]->getWidth() ,DbU::Micro)
* DbU::getPhysical( nodeSets[row]->getHeight(),DbU::Micro) );
default:
if (index.column() >= columnCount()) return QVariant();
}
}
}
if ( role == Qt::UserRole ){
return QVariant( index.row() );
}
return QVariant();
}
QVariant SlicingDataModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
if (orientation == Qt::Vertical) return QVariant();
static QFont headerFont = Graphics::getFixedFont ( QFont::Bold, false, false, +0 );
if ( role == Qt::FontRole ) return headerFont;
if ( role != Qt::DisplayRole ) return QVariant();
switch ( section ) {
case 0: return QVariant ( tr("Order" ) );
case 1: return QVariant ( QString::fromUtf8("Height (µm)") );
case 2: return QVariant ( QString::fromUtf8("Width (µm)") );
case 3: return QVariant ( tr("Occupation Area (%)") );
case 4: return QVariant ( tr("Counter" ) );
case 5: return QVariant ( tr("Ratio (W/H)" ) );
case 6: return QVariant ( QString::fromUtf8("Area (µm²)") );
default:
if (section >= columnCount()) return QVariant();
}
return QVariant ( tr("?") );
}
int SlicingDataModel::rowCount ( const QModelIndex& parent ) const
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _cell );
if (slicingtree != NULL){
NodeSets nodeSets = slicingtree->getNodeSets();
return nodeSets.size();
} else {
return 0;
}
}
int SlicingDataModel::columnCount ( const QModelIndex& parent ) const
{
return 7;
}
BoxSet* SlicingDataModel::getBoxSet( int index )
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _cell );
if (slicingtree){
NodeSets nodeSets = slicingtree->getNodeSets();
return nodeSets[index];
}
return NULL;
}
void SlicingDataModel::updateContents()
{
beginResetModel();
endResetModel();
}
} // Bora namespace.

View File

@ -0,0 +1,177 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./SlicingDataWidget.cpp" |
// +-----------------------------------------------------------------+
#include <iostream>
#include <QFontMetrics>
#include <QComboBox>
#include <QLabel>
#include <QLineEdit>
#include <QTableView>
#include <QHeaderView>
#include <QSortFilterProxyModel>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QTableWidgetItem>
#include "hurricane/viewer/Graphics.h"
#include "hurricane/viewer/CellViewer.h"
#include "bora/SlicingDataModel.h"
#include "bora/SlicingDataWidget.h"
#include "bora/GraphicBoraEngine.h"
namespace Bora {
using namespace std;
using Hurricane::Graphics;
using Analog::AnalogCellExtension;
SlicingDataWidget::SlicingDataWidget ( QWidget* parent )
: QWidget (parent)
, _viewer (NULL)
, _baseModel(NULL)
, _sortModel(NULL)
, _view (NULL)
, _rowHeight(20)
{
setAttribute ( Qt::WA_DeleteOnClose );
setAttribute ( Qt::WA_QuitOnClose, false );
_rowHeight = QFontMetrics(Graphics::getFixedFont()).height() + 4;
_view = new QTableView ( this );
_view->setShowGrid ( false );
_view->setAlternatingRowColors ( true );
_view->setSelectionBehavior ( QAbstractItemView::SelectRows );
_view->setSelectionMode ( QAbstractItemView::SingleSelection );
_view->setSortingEnabled ( true );
_view->installEventFilter ( this );
_view->viewport()->installEventFilter ( this );
QHeaderView* horizontalHeader = _view->horizontalHeader ();
//horizontalHeader->setStretchLastSection ( true );
horizontalHeader->setMinimumSectionSize ( 20 );
//horizontalHeader->setResizeMode ( QHeaderView::ResizeToContents );
//horizontalHeader->setDefaultSectionSize ( 100 );
horizontalHeader->setSortIndicatorShown(true);
horizontalHeader->setStretchLastSection(true);
QHeaderView* verticalHeader = _view->verticalHeader ();
verticalHeader->setVisible ( false );
verticalHeader->setDefaultSectionSize ( _rowHeight );
_baseModel = new SlicingDataModel( this );
_sortModel = new QSortFilterProxyModel( this );
_sortModel->setSourceModel ( _baseModel );
_sortModel->setDynamicSortFilter( true );
//_sortModel->setFilterKeyColumn ( 1 );
_view->setModel( _sortModel );
//_view->horizontalHeader()->setStretchLastSection( true );
//_view->resizeColumnToContents( 0 );
//_view->model()->setCurrentIndex()
QGridLayout* slicingDataLayout = new QGridLayout();
slicingDataLayout->addWidget(_view, 0, 0, 1, 1);
setLayout( slicingDataLayout );
setWindowTitle( tr("SlicingTree Datas") );
resize( 500, 300 );
connect( _view->horizontalHeader () , SIGNAL(sectionClicked(int)), this, SLOT(columnPressed(int)) );
connect( _view , SIGNAL(clicked(const QModelIndex &)), this, SLOT(cellClicked(const QModelIndex &)) );
}
SlicingDataWidget::~SlicingDataWidget ()
{ }
void SlicingDataWidget::setViewer ( CellViewer* viewer )
{
if (_viewer) {
disconnect( _viewer, 0, this , 0 );
disconnect( this , 0, _viewer, 0 );
}
_viewer = viewer;
_baseModel->setCell(_viewer->getCellWidget()->getCell());
}
void SlicingDataWidget::columnPressed ( int column )
{
_view->sortByColumn(column);
}
void SlicingDataWidget::cellClicked (const QModelIndex& index)
{
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
if ( index.isValid() ) {
cdebug_log(540,0) << "SlicingDatasWidget::cellClicked(): index=("
<< index.column() << "," << index.row() << ")" << endl;
BoxSet* boxSet = _baseModel->getBoxSet((_view->model()->data(index, Qt::UserRole)).toInt());
emit updatePlacement( boxSet );
emit updateSelectedPoint( DbU::getPhysical(slicingtree->getWidth() , DbU::Micro)
, DbU::getPhysical(slicingtree->getHeight(), DbU::Micro)
);
}
}
BoxSet* SlicingDataWidget::getBoxSet ( int index )
{ return _baseModel->getBoxSet( index ); }
void SlicingDataWidget::updateSelectedRow ( double x, double y )
{
QAbstractItemModel* model = _view->model();
int row = 0;
for( int irow = 0; irow < model->rowCount(); ++irow ) {
QModelIndex idxH = model->index( irow, 1 );
QModelIndex idxW = model->index( irow, 2 );
if ( (_view->model()->data(idxH).toDouble() == y) && (_view->model()->data(idxW).toDouble() == x) ){ row = irow; break; }
}
_view->selectRow(row);
}
bool SlicingDataWidget::eventFilter ( QObject* object, QEvent* event )
{
if ( event->type() == QEvent::KeyPress ) {
QModelIndex index = _view->currentIndex();
if ( index.isValid() ) {
BoxSet* boxSet = _baseModel->getBoxSet((_view->model()->data(index, Qt::UserRole)).toInt());
emit updatePlacement( boxSet );
}
}
return QObject::eventFilter( object, event );
}
void SlicingDataWidget::updateContents()
{
_baseModel->updateContents();
}
} // Bora namespace.

1173
bora/src/SlicingNode.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,409 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./SlicingPlotWidget.cpp" |
// +-----------------------------------------------------------------+
#include <QColor>
#include <QPen>
#include <QPalette>
#include <QPoint>
#include <QFrame>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <qwt_scale_draw.h>
#include <qwt_scale_widget.h>
#include <qwt_symbol.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_picker.h>
#include <qwt_legend.h>
#include <math.h>
#include "hurricane/Error.h"
#include "hurricane/DbU.h"
#include "hurricane/viewer/Graphics.h"
#include "hurricane/viewer/CellViewer.h"
#include "hurricane/viewer/DynamicLabel.h"
#include "hurricane/analog/AnalogCellExtension.h"
#include "hurricane/analog/Device.h"
#include "hurricane/analog/TransistorFamily.h"
#include "crlcore/Utilities.h"
#include "bora/SlicingPlotWidget.h"
namespace {
class SlicingScaleDraw : public QwtScaleDraw {
protected:
virtual QwtText label ( double value ) const;
};
QwtText SlicingScaleDraw::label ( double value ) const
{ return QString("%1").arg( value, 0, 'f', 1 ); }
} // Anonymous namespace.
namespace Bora {
using namespace std;
using Hurricane::tab;
using Hurricane::Error;
using Hurricane::DbU;
using Hurricane::DynamicLabel;
using Hurricane::Graphics;
using Analog::AnalogCellExtension;
using Analog::Device;
using Analog::TransistorFamily;
SlicingPlotWidget::SlicingPlotWidget ( QWidget* parent )
: QWidget (parent)
, _viewer (NULL)
, _plot (new QwtPlot ())
, _picker (new QwtPlotPicker( QwtPlot::xBottom // X Axis id.
, QwtPlot::yLeft // Y Axis id.
, QwtPicker::CrossRubberBand
, QwtPicker::ActiveOnly
, _plot->canvas()) )
, _gridDisplay (new QGridLayout())
, _gridLabel () // Label line 2: text
, _widths (NULL) // Coordinates X for STreeCurve
, _heights (NULL) // Coordinates Y for STreeCurve
, _widthSelected (NULL) // Coordinate X for selectedPoint
, _heightSelected(NULL) // Coordinate Y for selectedPoint
, _pareto ()
, _STreeCurve (new QwtPlotCurve("SlicingTree's dimensions")) // Blue dots : possible dimensions
, _paretoCurve (new QwtPlotCurve("Pareto")) // Black curve: pareto curve
, _selectedPoint (new QwtPlotCurve("Selected")) // Red dot : selected placement
{
_picker->setStateMachine(new QwtPickerClickPointMachine());
setStyleSheet ( "border: 0px" );
int ptSize = Graphics::isHighDpi() ? 5 : 3;
QwtText xTitle ( QString::fromUtf8("Width (µm)") );
QwtText yTitle ( QString::fromUtf8("Height (µm)") );
xTitle.setFont( Graphics::getFixedFont(QFont::Bold,false,false,-1) );
yTitle.setFont( Graphics::getFixedFont(QFont::Bold,false,false,-1) );
_plot->setAxisTitle ( QwtPlot::xBottom, xTitle );
_plot->setAxisTitle ( QwtPlot::yLeft , yTitle );
_plot->insertLegend ( new QwtLegend(), QwtPlot::BottomLegend );
_plot->setAxisFont ( QwtPlot::xBottom, Graphics::getFixedFont(QFont::Normal,false,false,-2) );
_plot->setAxisFont ( QwtPlot::yLeft , Graphics::getFixedFont(QFont::Normal,false,false,-2) );
QString styleSheet("color: black; background:rgb(255,255,221); padding: 5px");
_plot->setStyleSheet(styleSheet);
_plot->canvas()->setStyleSheet(styleSheet);
_plot->legend()->setStyleSheet( QString("padding: 0px") );
QPen paretoPen ( Qt::green );
paretoPen.setWidth( Graphics::isHighDpi() ? 3 : 1 );
_paretoCurve->setStyle( QwtPlotCurve::Lines );
_paretoCurve->setPen ( paretoPen );
_paretoCurve->attach ( _plot );
QPen dotPen ( Qt::blue );
dotPen.setWidth( ptSize );
_STreeCurve->setStyle( QwtPlotCurve::Dots );
_STreeCurve->setPen ( dotPen );
_STreeCurve->attach ( _plot );
QwtSymbol* symbol = new QwtSymbol();
symbol->setStyle( QwtSymbol::Cross );
symbol->setSize ( 20 );
symbol->setPen ( dotPen );
_STreeCurve->setSymbol( symbol );
QPen selectPen ( Qt::red );
selectPen.setWidth( ptSize+2 );
_selectedPoint->setStyle( QwtPlotCurve::Dots );
_selectedPoint->setPen ( selectPen );
_selectedPoint->attach ( _plot );
connect( _picker, SIGNAL(selected(const QPointF&)), this, SLOT(onPointSelect(const QPointF&)) );
QVBoxLayout* vLayout = new QVBoxLayout();
vLayout->addWidget ( _plot );
QHBoxLayout* line = new QHBoxLayout ();
line->addStretch();
DynamicLabel* dlabel = new DynamicLabel();
dlabel->setStaticText ( QString::fromUtf8("Width (µm):") );
dlabel->setDynamicWidth( 4, DynamicLabel::NoIndent );
dlabel->setDynamicText( QString("%1").arg( "0" ) );
_gridLabel.push_back( dlabel );
line->addWidget( dlabel );
line->addStretch();
dlabel = new DynamicLabel();
dlabel->setStaticText ( QString::fromUtf8("Height (µm):") );
dlabel->setDynamicWidth( 4, DynamicLabel::NoIndent );
dlabel->setDynamicText( QString("%1").arg( "0" ) );
_gridLabel.push_back( dlabel );
line->addWidget( dlabel );
line->addStretch();
vLayout->addLayout( line );
line = new QHBoxLayout ();
line->addStretch();
dlabel = new DynamicLabel();
dlabel->setStaticText ( "Occupation Area (%):" );
dlabel->setDynamicWidth( 4, DynamicLabel::NoIndent );
dlabel->setDynamicText( QString("%1").arg( "100" ) );
_gridLabel.push_back( dlabel );
line->addWidget( dlabel );
line->addStretch();
dlabel = new DynamicLabel();
dlabel->setStaticText ( "Ratio(W/H):" );
dlabel->setDynamicWidth( 4, DynamicLabel::NoIndent );
dlabel->setDynamicText( QString("%1").arg( "0" ) );
_gridLabel.push_back( dlabel );
line->addWidget( dlabel );
line->addStretch();
dlabel = new DynamicLabel();
dlabel->setStaticText ( QString::fromUtf8("Area (µm²):") );
dlabel->setDynamicWidth( 4, DynamicLabel::NoIndent );
dlabel->setDynamicText( QString("%1").arg( "0" ) );
_gridLabel.push_back( dlabel );
line->addWidget( dlabel );
line->addStretch();
vLayout->addLayout( line );
QFrame* separator = new QFrame ();
separator->setFrameShape ( QFrame::HLine );
separator->setFrameShadow ( QFrame::Sunken );
vLayout->addWidget ( separator );
vLayout->addLayout ( _gridDisplay );
setLayout( vLayout );
}
SlicingPlotWidget::~SlicingPlotWidget ()
{
delete _STreeCurve;
delete _paretoCurve;
delete _selectedPoint;
delete _plot;
if ( _widths != NULL ) delete [] _widths;
if ( _heights != NULL ) delete [] _heights;
}
void SlicingPlotWidget::setViewer ( CellViewer* viewer )
{
if (_viewer) {
disconnect( _viewer, 0, this , 0 );
disconnect( this , 0, _viewer, 0 );
}
_viewer = viewer;
setDatas();
}
void SlicingPlotWidget::setDatas ()
{
// Clear previous datas
if (_widths != NULL) delete [] _widths;
if (_heights != NULL) delete [] _heights;
_pareto = Pareto();
for ( size_t igrid = 5 ; igrid < _gridLabel.size() ; ++igrid )
delete _gridLabel[igrid];
_gridLabel.resize( 5 );
while ( _gridDisplay->count() ) {
_gridDisplay->removeItem( _gridDisplay->itemAt(0) );
}
if (_widthSelected != NULL) delete [] _widthSelected;
if (_heightSelected != NULL) delete [] _heightSelected;
_selectedPoint->hide();
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
if (not slicingtree) {
_STreeCurve->hide();
_paretoCurve->hide();
_selectedPoint->hide();
return;
}
// Set new datas
_widths = new double [ slicingtree->getNodeSets()->size() ];
_heights = new double [ slicingtree->getNodeSets()->size() ];
size_t i = 0;
NodeSets* nodeSets = slicingtree->getNodeSets();
for (vector<BoxSet*>::iterator it = nodeSets->begin(); it != nodeSets->end(); it++){
_widths [i] = DbU::toPhysical ( (*it)->getWidth (), DbU::Micro );
_heights[i] = DbU::toPhysical ( (*it)->getHeight(), DbU::Micro );
_pareto.mergePoint( _widths[i], _heights[i] );
i++;
}
_STreeCurve->setSamples ( _widths , _heights , nodeSets->size() );
_paretoCurve->setSamples( _pareto.xs(), _pareto.ys(), _pareto.size() );
_STreeCurve->show();
_paretoCurve->show();
_plot->replot();
int ii = 0;
int jj = 0;
Cell* analogCell = _viewer->getCellWidget()->getCell();
vector<Instance*> instances = vector<Instance*>();
for( Instance* instance : analogCell->getInstances() ) {
Cell* model = instance->getMasterCell();
Device* device = dynamic_cast<Device*>( model );
if (device) instances.push_back( instance );
}
for( Instance* instance : instances ) {
Cell* model = instance->getMasterCell();
Device* device = dynamic_cast<Device*>( model );
if (device) {
TransistorFamily* tf = dynamic_cast<TransistorFamily*>( device );
if (tf) {
DynamicLabel* dlabel = new DynamicLabel();
dlabel->setDynamicWidth( 4, DynamicLabel::NoIndent );
dlabel->setStaticText ( QString("%1:").arg( instance->getName()._getString().c_str() ) );
dlabel->setDynamicText ( QString("%1" ).arg( 0 ) );
_gridDisplay->addWidget( dlabel, ii, jj );
_gridLabel.push_back( dlabel );
jj++;
if (jj == 5){
jj = 0;
ii++;
}
}
}
}
}
void SlicingPlotWidget::onPointSelect ( const QPointF& point )
{
// Clicking on SlicingTree's Pareto Graph:
// 1) Update slicing tree
// 2) Update selected point and labels
// 3) Update selected row
double distance = 0.0;
QwtScaleMap xMap = _plot->canvasMap( QwtPlot::xBottom );
QwtScaleMap yMap = _plot->canvasMap( QwtPlot::yLeft );
QPoint qpoint ( xMap.transform(point.x()), yMap.transform(point.y()) );
int iclosest = _STreeCurve->closestPoint( qpoint, &distance );
int dataSize = _STreeCurve->dataSize();
cdebug.log(539) << " Selection: [" << point.x() << " " << point.y() << "]" << endl;
if ( (iclosest >= 0) and (iclosest < dataSize) ) {
double x = _STreeCurve->sample( iclosest ).x();
double y = _STreeCurve->sample( iclosest ).y();
ostringstream message;
message << "(" << DbU::getValueString(x) << "," << DbU::getValueString(y) << ")";
cmess2 << " o Selecting analog placement" << endl;
cmess2 << Dots::asInt ( " - Index" , iclosest ) << endl;
cmess2 << Dots::asString( " - Size (w,h)", message.str() ) << endl;
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
BoxSet* boxSet = slicingtree->getPairHW( DbU::fromPhysical(y, DbU::Micro)
, DbU::fromPhysical(x, DbU::Micro)
);
cdebug.log(539) << " iclosest: " << iclosest
<< " (" << DbU::getValueString(DbU::fromPhysical(x, DbU::Micro))
<< "," << DbU::getValueString(DbU::fromPhysical(y, DbU::Micro))
<< ")" << endl;
emit updatePlacement( boxSet );
updateSelectedPoint ( x, y );
emit updateSelectedRow( x, y );
} else {
cdebug.log(539) << " No closest point " << iclosest << endl;
}
}
void SlicingPlotWidget::updateSelectedPoint ( double x, double y )
{
// Clicking on SlicingTree's possible dimensions table:
// 1) Update selected point
// 2) Update labels
if (_widthSelected != NULL) delete [] _widthSelected;
if (_heightSelected != NULL) delete [] _heightSelected;
double* _widthSelected = new double [ 1 ];
double* _heightSelected = new double [ 1 ];
_widthSelected [0] = x;
_heightSelected[0] = y;
_selectedPoint->setSamples ( _widthSelected, _heightSelected, 1 );
_selectedPoint->show();
_plot->replot();
SlicingNode* slicingtree = AnalogCellExtension::get<SlicingNode>( _viewer->getCellWidget()->getCell() );
_gridLabel[0]->setDynamicText( QString("%1").arg( DbU::getValueString(slicingtree->getWidth ()).c_str() ) );
_gridLabel[1]->setDynamicText( QString("%1").arg( DbU::getValueString(slicingtree->getHeight()).c_str() ) );
_gridLabel[2]->setDynamicText( QString("%1").arg( slicingtree->getOccupationArea() ));
if ( slicingtree->getHeight() != 0 ){
_gridLabel[3]->setDynamicText( QString("%1").arg( DbU::getPhysical( slicingtree->getWidth (), DbU::Micro )
/ DbU::getPhysical( slicingtree->getHeight(), DbU::Micro )
));
} else _gridLabel[3]->setDynamicText( QString("%1").arg(0));
_gridLabel[4]->setDynamicText( QString("%1").arg( DbU::getPhysical( slicingtree->getWidth (), DbU::Micro )
* DbU::getPhysical( slicingtree->getHeight(), DbU::Micro )
));
Cell* analogCell = _viewer->getCellWidget()->getCell();
size_t i = 0;
vector<Instance*> instances;
for( Instance* iInstance : analogCell->getInstances() ) {
Cell* model = iInstance->getMasterCell();
Device* device = dynamic_cast<Device*>(model);
if (device) instances.push_back(iInstance);
}
for( Instance* iInstance : instances ) {
Cell* model = iInstance->getMasterCell();
Device* device = dynamic_cast<Device*>(model);
if (device) {
TransistorFamily* tf = dynamic_cast<TransistorFamily*>( device );
if (tf) _gridLabel[i+5]->setDynamicText ( QString("%1" ).arg( tf->getNfing() ) );
}
i++;
}
}
} // Bora namespace.

201
bora/src/SlicingWidget.cpp Normal file
View File

@ -0,0 +1,201 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./SlicingWidget.cpp" |
// +-----------------------------------------------------------------+
#include <QAction>
#include <QVBoxLayout>
#include "hurricane/Cell.h"
#include "hurricane/viewer/Graphics.h"
#include "hurricane/viewer/CellViewer.h"
#include "bora/SlicingPlotWidget.h"
#include "bora/SlicingDataWidget.h"
#include "bora/SlicingWidget.h"
namespace Bora {
using std::cerr;
using std::endl;
using Hurricane::Graphics;
// -------------------------------------------------------------------
// Class : "Bora::SlicingTab".
SlicingTab::SlicingTab ( QWidget* parent )
: QWidget(parent)
, _viewer(NULL)
{ }
void SlicingTab::setViewer ( CellViewer* viewer ) { _viewer = viewer; }
void SlicingTab::cellPreModificate () { }
void SlicingTab::cellPostModificate () { }
// -------------------------------------------------------------------
// Class : "Bora::TabPlot".
TabPlot::TabPlot ( QWidget* parent )
: SlicingTab(parent)
, _plot (new SlicingPlotWidget())
{
_plot->setObjectName( "STree.tabPlot.plot" );
QVBoxLayout* wLayout = new QVBoxLayout();
wLayout->setContentsMargins( 0, 0, 0, 0 );
wLayout->addWidget( _plot );
setLayout( wLayout );
}
void TabPlot::setViewer ( CellViewer* viewer )
{
if (getViewer() != viewer) {
SlicingTab::setViewer( viewer );
_plot->setViewer( viewer );
}
}
void TabPlot::setDatas()
{
_plot->setDatas();
}
// -------------------------------------------------------------------
// Class : "Bora::TabDatas".
TabDatas::TabDatas ( QWidget* parent )
: SlicingTab(parent)
, _datas (new SlicingDataWidget())
{
_datas->setObjectName( "STree.tabDatas.plot" );
QVBoxLayout* wLayout = new QVBoxLayout();
wLayout->setContentsMargins( 0, 0, 0, 0 );
wLayout->addWidget( _datas );
setLayout( wLayout );
}
void TabDatas::setViewer ( CellViewer* viewer )
{
if (getViewer() != viewer) {
SlicingTab::setViewer( viewer );
_datas->setViewer( viewer );
}
}
void TabDatas::updateContents()
{
_datas->updateContents();
}
// -------------------------------------------------------------------
// Class : "Bora::SlicingWidget".
SlicingWidget::SlicingWidget ( QWidget* parent )
: QTabWidget(parent)
, _cell (NULL)
, _viewer (NULL)
, _tabPlot (new TabPlot())
, _tabDatas (new TabDatas())
{
setObjectName ( "Slicing" );
setAttribute ( Qt::WA_QuitOnClose, false );
setWindowTitle( tr("SlicingTree Viewer") );
_tabPlot ->setObjectName( "slicing.plot" );
_tabDatas->setObjectName( "slicing.datas" );
addTab( _tabPlot , "SlicingTree's Pareto" );
addTab( _tabDatas, "SlicingTree's possible dimensions" );
QAction* toggleShow = new QAction ( tr("SlicingTree Viewer"), this );
toggleShow->setObjectName( "slicing.action.hideShow" );
toggleShow->setShortcut ( QKeySequence(tr("CTRL+J")) );
addAction( toggleShow );
connect( toggleShow , SIGNAL( triggered ()) , this , SLOT ( toggleShow ()) );
connect( _tabPlot->getPlot (), SIGNAL( updatePlacement (BoxSet*)) , this , SIGNAL( updatePlacement (BoxSet*)) );
connect( _tabDatas->getDatas(), SIGNAL( updatePlacement (BoxSet*)) , this , SIGNAL( updatePlacement (BoxSet*)) );
connect( _tabDatas->getDatas(), SIGNAL( updateSelectedPoint(double,double)), _tabPlot->getPlot (), SLOT ( updateSelectedPoint(double,double)) );
connect( _tabPlot->getPlot (), SIGNAL( updateSelectedRow (double,double)), _tabDatas->getDatas(), SLOT ( updateSelectedRow (double,double)) );
resize( Graphics::isHighDpi() ? QSize(1300,1300) : QSize(870,670) );
}
void SlicingWidget::toggleShow ()
{
setVisible(not isVisible());
}
void SlicingWidget::setViewer ( CellViewer* viewer )
{
_viewer = viewer;
if (_viewer) {
for ( int i=0 ; i<count() ; ++i )
(static_cast<SlicingTab*>(widget(i)))->setViewer( _viewer );
connect( _viewer->getCellWidget(), SIGNAL(cellChanged (Cell*)), this, SLOT(cellChanged (Cell*)));
connect( _viewer->getCellWidget(), SIGNAL(cellPreModificated () ), this, SLOT(cellPreModificate () ));
connect( _viewer->getCellWidget(), SIGNAL(cellPostModificated() ), this, SLOT(cellPostModificate() ));
}
}
void SlicingWidget::setCell ( Cell* cell )
{
_cell = cell;
}
void SlicingWidget::cellChanged ( Cell* cell )
{
cerr << "[WARNING] SlicingWidget::cellChanged() does nothing yet." << endl;
}
void SlicingWidget::cellPreModificate ()
{
for ( int i=0 ; i<count() ; ++i )
(static_cast<SlicingTab*>(widget(i)))->cellPreModificate();
}
void SlicingWidget::cellPostModificate ()
{
for ( int i=0 ; i<count() ; ++i )
(static_cast<SlicingTab*>(widget(i)))->cellPostModificate();
}
void SlicingWidget::updateContents()
{
_tabPlot->setDatas();
_tabDatas->updateContents();
}
} // Bora namespace.

450
bora/src/VSlicingNode.cpp Normal file
View File

@ -0,0 +1,450 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./VSlicingNode.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/Error.h"
#include "hurricane/Warning.h"
#include "crlcore/RoutingGauge.h"
#include "bora/HVSetState.h"
#include "bora/VSlicingNode.h"
#include "bora/RVSlicingNode.h"
namespace Bora {
using namespace std;
using Hurricane::Error;
using Hurricane::Warning;
// -------------------------------------------------------------------
// Class : "Bora::VSlicingNode".
int VSlicingNode::_count = 0;
int VSlicingNode::_countAll = 0;
VSlicingNode::VSlicingNode ( unsigned int type, unsigned int alignment )
: HVSlicingNode(type,alignment)
{ ++_count; }
VSlicingNode::~VSlicingNode ()
{ --_count; }
VSlicingNode* VSlicingNode::create ( unsigned int alignment )
{
++_countAll;
return new VSlicingNode( VerticalSNode, alignment );
}
void VSlicingNode::createRouting ( DbU::Unit space )
{
push_back( RVSlicingNode::create( space ) );
resetSlicingTree();
}
void VSlicingNode::print () const
{
cerr << "- Print from Slicing Node - " << endl;
cerr << "SlicingType: Vertical Node" << endl;
if (isAlignBottom()) cerr << "Alignment : Bottom" << endl;
else if (isAlignCenter()) cerr << "Alignment : Middle" << endl;
else if (isAlignTop ()) cerr << "Alignment : Top" << endl;
else cerr << "Alignment : Unknown" << endl;
cerr << "Tolerances : RatioH: " << DbU::getPhysical(_toleranceRatioH,DbU::Micro) << ", RatioW: " << DbU::getPhysical(_toleranceRatioW,DbU::Micro) << ", BandH: " << DbU::getPhysical(_toleranceBandH,DbU::Micro) << ", BandW: " << DbU::getPhysical(_toleranceBandW,DbU::Micro) << endl;
HVSlicingNode::print();
}
VSlicingNode* VSlicingNode::clone ( unsigned int tr )
{
VSlicingNode* node = VSlicingNode::create( this->getAlignment() );
node->setTolerances( getToleranceRatioH()
, getToleranceRatioW()
, getToleranceBandH()
, getToleranceBandW()
);
node->setBoxSet ( getBoxSet() );
node->setNodeSets ( _nodeSets->clone() );
node->setPreset ( getPreset() );
node->setSet ( getSet() );
node->setPlaced ( getPlaced() );
node->setSymmetries( getSymmetries() );
for ( SlicingNode* child : _children ) {
if (tr == MX) node->push_front( child->clone(tr) );
else node->push_back ( child->clone(tr) );
}
return node;
}
void VSlicingNode::place ( DbU::Unit x, DbU::Unit y )
{
if (recursiveCheckSet()) {
if (not _slicingRouting.empty()) {
destroySlicingRouting();
resetSlicingRouting();
}
_place(x,y);
if (_slicingRouting.empty()) createSlicingRouting();
updateCellAbutmentBox();
} else
cerr << Error( "VSlicingNode::place(DbU::Unit x, DbU::Unit y): The SlicingTree is not completely set." ) << endl;
}
void VSlicingNode::replace ( DbU::Unit x, DbU::Unit y )
{
// WARNING: This will change GCell edges.
if (recursiveCheckSet()) {
_place( x, y, true );
updateCellAbutmentBox();
updateGCellPosition();
updateGContacts();
} else {
cerr << Error( "HVlicingNode::place(DbU::Unit,DbU::Unit): The SlicingTree is not completely set." ) << endl;
}
}
void VSlicingNode::_place ( DbU::Unit x, DbU::Unit y, bool replace )
{
cdebug_log(536,1) << "VSlicingNode::_place(DbU::Unit,DbU::Unit,bool)" << endl;
vector<RHVSlicingNode*>::iterator itspace = _slicingRouting.begin();
DbU::Unit xref = x;
DbU::Unit yref = y;
if (isRoutingEstimated()){
(*itspace)->_place( xref, yref, replace );
xref += (*itspace)->getWidth();
itspace++;
}
for ( SlicingNode* child : _children ) {
if ( child->isHorizontal() or child->isVertical() ) {
if (child->isAlignBottom()) {
child->setX( xref );
child->setY( yref );
} else if (child->isAlignCenter()) {
child->setX( xref );
child->setY( yref + (getHeight() - child->getHeight()) / 2 );
} else if (child->isAlignTop()) {
child->setX( xref );
child->setY( yref + getHeight() - child->getHeight() );
}
}
if (child->isAlignBottom()) child->_place( xref, yref , replace );
else if (child->isAlignCenter()) child->_place( xref, yref + (getHeight() - child->getHeight())/2, replace );
else if (child->isAlignTop ()) child->_place( xref, yref + getHeight() - child->getHeight() , replace );
else if (child->isRouting ()) child->_place( xref, yref , replace );
else {
cerr << Error( "VSlicingNode::place(DbU::Unit,DbU::Unit): Unknown Alignment in SlicingTree." ) << endl ;
child->print();
}
xref += child->getWidth();
yref = y;
if (isRoutingEstimated()) {
(*itspace)->_place( xref, yref, replace );
xref += (*itspace)->getWidth();
itspace++;
}
}
setPlaced( Placed );
cdebug_tabw(536,-1);
}
void VSlicingNode::updateGlobalSize ()
{
cdebug_log(535,1) << "VSlicingNode::updateGlobalsize() - " << this << endl;
for ( SlicingNode* child : _children ) child->updateGlobalSize();
if (not getMaster()) {
if (getNbChild() == 1) {
_nodeSets->clear();
NodeSets* node = _children[0]->getNodeSets();
for ( BoxSet* bs : node->getBoxSets() ) {
vector<BoxSet*> bss;
bss.push_back( bs );
_nodeSets->push_back( bss, bs->getHeight(), bs->getWidth(), VerticalSNode );
}
}
else if ( not hasEmptyChildrenNodeSets() and _nodeSets->empty() ) {
VSetState state = VSetState( this );
while ( not state.end() ) state.next();
_nodeSets = state.getNodeSets();
}
if (_nodeSets->empty())
cerr << Error( "VSlicingNode::updateGlobalSize(): No solution has been found. Try to set larger tolerances.\n"
" - Width tolerance ratio: %s\n"
" - Height tolerance ratio: %s\n"
" - Width band: %s\n"
" - Height band: %s"
, DbU::getValueString(getToleranceRatioW()).c_str()
, DbU::getValueString(getToleranceRatioH()).c_str()
, DbU::getValueString(getToleranceBandW ()).c_str()
, DbU::getValueString(getToleranceBandH ()).c_str()
) << endl;
} else {
_nodeSets = _master->getNodeSets();
}
cdebug_log(535,0) << "Computed " << _nodeSets->size() << " choices" << endl;
cdebug_tabw(535,-1);
}
void VSlicingNode::preDestroy ()
{
HVSlicingNode::preDestroy();
}
void VSlicingNode::destroy ()
{
VSlicingNode::preDestroy();
delete this;
}
void VSlicingNode::preRecursiveDestroy ()
{
HVSlicingNode::preRecursiveDestroy();
}
void VSlicingNode::recursiveDestroy ()
{
VSlicingNode::preRecursiveDestroy();
delete this;
}
void VSlicingNode::createSlicingRouting ()
{
if (not isPlaced()) {
cerr << Warning( "VSlicingNode::createSlicingRouting(): SlicingTree needs to be placed first." ) << endl;
return;
}
size_t childrenCount = getNbChild();
size_t ichild = 0;
DbU::Unit x = getX();
DbU::Unit y = getY();
DbU::Unit widthValue = 0;
if (_parent) {
if ( _parent->getType() == HorizontalSNode) {
if ( (getAlignment() == AlignLeft) or (getAlignment() == AlignRight) ) {
widthValue = _parent->getWidth() - getWidth();
} else if (getAlignment() == AlignCenter) {
widthValue = (_parent->getWidth() - getWidth())/2;
}
}
}
DbU::Unit vpitch = _rg->getVerticalPitch();
if (widthValue % vpitch)
cerr << Warning( "VSlicingNode::createSlicingRouting(): On %s, width is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(widthValue).c_str()
, DbU::getValueString(vpitch).c_str()
) << endl;
for ( size_t inode = 0; inode<childrenCount+1; ++inode ) {
RVSlicingNode* node = NULL;
if (inode == 0) {
if ( (getAlignment() == AlignRight )
or (getAlignment() == AlignCenter) ) node = RVSlicingNode::create( widthValue );
else node = RVSlicingNode::create();
} else if (inode == childrenCount) {
if ( (getAlignment() == AlignLeft )
or (getAlignment() == AlignCenter) ) node = RVSlicingNode::create( widthValue );
else node = RVSlicingNode::create();
} else
node = RVSlicingNode::create();
node->setParent( this );
if (inode == 0) {
if (getAlignment() == AlignLeft) node->place( x, y );
else if ( (getAlignment() == AlignCenter)
or (getAlignment() == AlignRight) )
node->place( x-widthValue, y );
} else
node->place( x, y );
_slicingRouting.push_back( node );
if (inode < childrenCount) x += getChild( ichild++ )->getWidth();
}
if (_master) {
if (isVSymmetry()) {
for ( size_t i=0; i<_slicingRouting.size(); ++i ) {
getSlicingRouting( i )->setMaster( _master->getSlicingRouting( _slicingRouting.size()-1-i ) );
}
} else {
for ( size_t i=0; i<_slicingRouting.size(); ++i ) {
getSlicingRouting( i )->setMaster( _master->getSlicingRouting( i ) );
}
}
} else if ( not _symmetries.empty() and isAlignCenter()) {
for ( size_t i=0; i<(_slicingRouting.size()/2); ++i ) {
getSlicingRouting( _slicingRouting.size()-1-i )->setMaster( getSlicingRouting( i ) );
}
}
for ( SlicingNode* child : _children ) {
if ( child->isHorizontal() or child->isVertical() ) child->createSlicingRouting();
}
setRoutingCreated(RoutingCreated);
}
DbU::Unit VSlicingNode::getWidth () const
{
DbU::Unit vpitch = _rg->getVerticalPitch();
DbU::Unit width = 0;
if (isRoutingEstimated()) {
for ( SlicingNode* node : _children ) width += node->getWidth();
for ( RHVSlicingNode* node : _slicingRouting ) width += node->getWidth();
} else {
if (_boxSet) width = _boxSet->getWidth();
}
if (width % vpitch)
cerr << Warning( "VSlicingNode::getWidth(): On %s, width is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(width).c_str()
, DbU::getValueString(vpitch).c_str()
) << endl;
return width;
}
DbU::Unit VSlicingNode::getHeight () const
{
DbU::Unit hpitch = _rg->getHorizontalPitch();
DbU::Unit height = 0;
if (isRoutingEstimated()) {
SlicingNode* m = NULL;
for ( SlicingNode* node : _children ) {
if ( (node->getType() != RoutingSNode) and (node->getHeight() > height) ) {
height = node->getHeight();
m = node;
}
}
if (m->isDevice()) height += hpitch*2;
} else {
if (_boxSet) height = _boxSet->getHeight();
}
if (height % hpitch)
cerr << Warning( "VSlicingNode::getHeight(): On %s, height is not pitched (%s, pitch:%s)."
, getString(this).c_str()
, DbU::getValueString(height).c_str()
, DbU::getValueString(hpitch).c_str()
) << endl;
return height;
}
void VSlicingNode::setGCell ( Anabatic::GCell* gcell )
{
cdebug_log(535,1) << "VSlicingNode::setGCell(Anabatic::GCell*) " << gcell << endl;
Anabatic::GCell* childGCell = gcell;
Anabatic::GCell* remainGCell = NULL;
DbU::Unit x = _slicingRouting[0]->getX();
for ( size_t ichild=0 ; ichild<_children.size() ; ++ichild ) {
// Setting up the GCell for the channel *before* the current child.
cdebug_log(535,0) << "node[" << ichild << "] width:"
<< DbU::getValueString(_slicingRouting[ ichild ]->getWidth()) << endl;
x += _slicingRouting[ ichild ]->getWidth();
remainGCell = childGCell->vcut( x );
_slicingRouting[ ichild ]->setGCell( childGCell );
childGCell = remainGCell;
// Setting up the GCell for the current child.
cdebug_log(535,0) << "children[" << ichild << "] width:"
<< DbU::getValueString(_slicingRouting[ ichild ]->getWidth()) << endl;
x += _children[ ichild ]->getWidth();
remainGCell = childGCell->vcut( x );
_children[ ichild ]->setGCell( childGCell );
childGCell = remainGCell;
}
// Setting up the GCell for the channel *after* the last child.
_slicingRouting.back()->setGCell( childGCell );
cdebug_tabw(535,-1);
}
void VSlicingNode::adjustBorderChannels ()
{
if (_parent) {
DbU::Unit space = _parent->getWidth() - getWidth();
if (getAlignment() == AlignRight) {
RHVSlicingNode* node = _slicingRouting.front();
node->setWidth( node->getWidth() + space );
} else if (getAlignment() == AlignCenter) {
RHVSlicingNode* first = _slicingRouting.front();
RHVSlicingNode* last = _slicingRouting.back ();
first->setWidth( first->getWidth() + space/2 );
last ->setWidth( last ->getWidth() + space/2 );
} else if (getAlignment() == AlignLeft) {
RHVSlicingNode* node = _slicingRouting.back();
node->setWidth( node->getWidth() + space );
}
}
for ( SlicingNode* child : _children ) child->adjustBorderChannels();
}
string VSlicingNode::_getString () const
{
string s = Super::_getString();
return s;
}
string VSlicingNode::_getTypeName () const
{ return "VSlicingNode"; }
} // Bora namespace.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,302 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/AnalogDistance.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_ANALOG_DISTANCE_H
#define BORA_ANALOG_DISTANCE_H
#include "hurricane/Horizontal.h"
#include "hurricane/Vertical.h"
#include "hurricane/RoutingPad.h"
#include "hurricane/Cell.h"
#include "anabatic/Dijkstra.h"
#include "anabatic/GCell.h"
namespace Bora {
using Hurricane::DbU;
using Hurricane::Net;
using Hurricane::Point;
using Hurricane::Component;
using Hurricane::Horizontal;
using Hurricane::Vertical;
using Hurricane::RoutingPad;
using Anabatic::Edge;
using Anabatic::Vertex;
using Anabatic::GCell;
using Anabatic::Dijkstra;
using Anabatic::IntervalC;
class AnalogDistance {
public:
AnalogDistance ( Cell*, DbU::Unit, DbU::Unit );
inline Net* getNet () const;
inline void setNet ( Net* );
DbU::Unit operator() ( const Vertex*, const Vertex*, const Edge* ) const;
DbU::Unit addCost ( const Vertex*, const Vertex*, DbU::Unit ) const;
DbU::Unit getPenality ( const DbU::Unit ) const;
inline double getReferenceDistance () const;
bool isXUnion ( const GCell*, const GCell* ) const;
bool isYUnion ( const GCell*, const GCell* ) const;
bool isXUnion ( DbU::Unit, DbU::Unit, const GCell* ) const;
bool isYUnion ( DbU::Unit, DbU::Unit, const GCell* ) const;
DbU::Unit calcDistance ( const Point p1, const Point p2 ) const;
private:
Cell* _cell;
DbU::Unit _hpitch;
DbU::Unit _vpitch;
static Net* _net;
};
Net* AnalogDistance::_net = NULL;
AnalogDistance::AnalogDistance ( Cell* cell, DbU::Unit h, DbU::Unit v )
: _cell (cell)
, _hpitch(h)
, _vpitch(v)
{ }
inline void AnalogDistance::setNet ( Net* net ) { _net = net; }
inline Net* AnalogDistance::getNet () const { return _net; }
inline double AnalogDistance::getReferenceDistance () const { return std::max(_cell->getAbutmentBox().getHeight(),_cell->getAbutmentBox().getWidth() ); }
DbU::Unit AnalogDistance::operator() ( const Vertex* vcurr, const Vertex* vnext, const Edge* e ) const
{
cdebug_log(112,1) << "Calcul _distance: "<< _net << endl;
DbU::Unit distance = vcurr->getDistance();
DbU::Unit addedDistance = 0;
if (Vertex::isRestricted(vcurr, vnext, e, _hpitch, _vpitch, _net)) {
distance = Vertex::unreachable;
} else {
if ( (vcurr->getGCell()->isMatrix()) and (vnext->getGCell()->isMatrix()) ) {
cdebug_tabw(112,-1);
return distance + e->getDistance();
} else {
Point pcurrent = vcurr->getStartPathPoint( vnext );
Point pneighbour = vcurr->getNextPathPoint ( pcurrent, vnext );
addedDistance = std::abs( pneighbour.getX() - pcurrent.getX()) + std::abs(pneighbour.getY() - pcurrent.getY() );
cdebug_log(112,0) << "Pcurrent : X:" << DbU::getValueString(pcurrent.getX()) << ", Y:" << DbU::getValueString(pcurrent.getY()) << endl;
cdebug_log(112,0) << "Pneighbour: X:" << DbU::getValueString(pneighbour.getX()) << ", Y:" << DbU::getValueString(pneighbour.getY()) << endl;
addedDistance += addCost(vcurr, vnext, addedDistance);
distance += addedDistance;
}
}
cdebug_tabw(112,-1);
return distance;
}
DbU::Unit AnalogDistance::addCost ( const Vertex* vcurr, const Vertex* vnext, DbU::Unit aDistance ) const
{
cdebug_log(112,1) << "AnalogDistance::addCost(const Vertex* vcurr,const Vertex* vnext): aDistance: "
<< DbU::getValueString(aDistance) << endl;
double addedDistance = aDistance;
DbU::Unit supDist = 0;
Vertex* vprev = NULL;
GCell* gcurr = vcurr->getGCell();
GCell* gnext = vnext->getGCell();
GCell* gprev = vcurr->getGPrev(Vertex::From2Mode);
if (gprev) vprev = gprev->getObserver<Vertex>(GCell::Observable::Vertex);
// Case: Device, only simple turn case possible
if (vcurr->getRpCount()) {
RoutingPad* rp = NULL;
for ( Component* component : _cell->getComponentsUnder(gcurr->getBoundingBox()) ) {
rp = dynamic_cast<RoutingPad*>( component );
if (rp) break;
}
if (rp) {
Horizontal* h = dynamic_cast<Horizontal*>( rp->_getEntityAsSegment() );
Vertical* v = dynamic_cast<Vertical* >( rp->_getEntityAsSegment() );
cdebug_log(112,0) << "Current: isDevice, ";
if (h) {
cdebug_log(112,0) << " rp: Horizontal and ";
if ( (gcurr->isNorth(gnext)) or (gcurr->isSouth(gnext)) ) {
cdebug_log(112,0) << "COST." << endl;
supDist += getPenality(addedDistance)*1;
} else
cdebug_log(112,0) << "FREE." << endl;
} else if (v) {
cdebug_log(112,0) << " rp: Vertical and ";
if ( (gcurr->isWest(gnext)) or (gcurr->isEast(gnext)) ) {
cdebug_log(112,0) << "COST." << endl;
supDist += getPenality(addedDistance)*1;
} else
cdebug_log(112,0) << "FREE." << endl;
} else
cdebug_log(112,0) << "IS UNKNOWN.1" << endl;
}
} else {
IntervalC intervfrom = vcurr->getIntervFrom( Vertex::From2Mode );
cdebug_log(112,0) << "Case: vcurr is NOT a source nor a device " << endl;
cdebug_log(112,0) << "(gprev->isEast (gcurr):" << gprev->isWest (gcurr) << endl;
cdebug_log(112,0) << "(gcurr->isEast (gnext):" << gcurr->isWest (gnext) << endl;
cdebug_log(112,0) << "isXUnion(gprev, gnext):" << isXUnion(gprev, gnext) << endl;
cdebug_log(112,0) << "isYUnion(gprev, gnext):" << isYUnion(gprev, gnext) << endl;
if (vcurr->areSameSide(vprev,vnext)) {
cdebug_log(112,0) << "Case: Turn around" << endl;
supDist += getPenality(addedDistance)*4;
} else if ( ( (gcurr->isNorth(gprev) or gcurr->isSouth(gprev))
and (gcurr->isEast (gnext) or gcurr->isWest (gnext)) )
or ( (gcurr->isEast (gprev) or gcurr->isWest (gprev))
and (gcurr->isNorth(gnext) or gcurr->isSouth(gnext)) ) ) {
cdebug_log(112,0) << "Case: Simple turn" << endl;
supDist += getPenality( addedDistance );
} else if (vprev->isH()) {
cdebug_log(112,0) << "Case: vprev is horizontal" << endl;
if ( ( ( (gcurr->isSouth(gprev) and gcurr->isNorth(gnext))
or (gcurr->isNorth(gprev) and gcurr->isSouth(gnext)) )
and (not isXUnion(intervfrom.getMin(), intervfrom.getMax(), gnext)) )
or ( ( (gcurr->isWest (gprev) and gcurr->isEast (gnext))
or (gcurr->isEast (gprev) and gcurr->isWest (gnext)) )
and ( (intervfrom.getAxis() < gnext->getYMin())
or (intervfrom.getAxis() > gnext->getYMax()) ) ) ) {
cdebug_log(112,0) << "Case: Double turn1" << endl;
cdebug_log(112,0) << "((gcurr->isSouth(gprev)) && (gcurr->isNorth(gnext))) : " << ((gcurr->isSouth(gprev)) && (gcurr->isNorth(gnext))) << endl;
cdebug_log(112,0) << "((gcurr->isNorth(gprev)) && (gcurr->isSouth(gnext))) : " << ((gcurr->isNorth(gprev)) && (gcurr->isSouth(gnext))) << endl;
cdebug_log(112,0) << "(!isXUnion(intervfrom.getMin(), intervfrom.getMax(), gnext)): " << (!isXUnion(intervfrom.getMin(), intervfrom.getMax(), gnext)) << endl;
supDist += getPenality( addedDistance )*1;
} else
cdebug_log(112,0) << "Case: No cost" << endl;
} else if (vprev->isV()) {
cdebug_log(112,0) << "Case: vprev is vertical" << endl;
if ( ( ( (gcurr->isWest(gprev) and gcurr->isEast (gnext))
or (gcurr->isEast(gprev) and gcurr->isWest (gnext)) )
and (not isYUnion(intervfrom.getMin(), intervfrom.getMax(), gnext)) )
or ( ( (gcurr->isSouth(gprev) and gcurr->isNorth(gnext))
or (gcurr->isNorth(gprev) and gcurr->isSouth(gnext)) )
and ( (intervfrom.getAxis() < gnext->getXMin())
or (intervfrom.getAxis() > gnext->getXMax()) ) ) ) {
cdebug_log(112,0) << "Case: Double turn2" << endl;
cdebug_log(112,0) << "((gcurr->isWest(gprev)) && (gcurr->isEast(gnext))) :" << ((gcurr->isWest(gprev)) && (gcurr->isEast(gnext))) << endl;
cdebug_log(112,0) << "((gcurr->isEast(gprev)) && (gcurr->isWest(gnext))) :" << ((gcurr->isEast(gprev)) && (gcurr->isWest(gnext))) << endl;
cdebug_log(112,0) << "(!isYUnion(intervfrom.getMin(), intervfrom.getMax(), gnext)): " << (!isYUnion(intervfrom.getMin(), intervfrom.getMax(), gnext)) << endl;
supDist += getPenality( addedDistance )*1;
} else
cdebug_log(112,0) << "Case: No cost" << endl;
} else cdebug_log(112,0) << "Case: No cost" << endl;
}
// Case: Next is Device, add cost to arrive to RP
if (vcurr->getRpCount()) {
RoutingPad* rp = NULL;
for ( Component* component : _cell->getComponentsUnder(gnext->getBoundingBox()) ) {
rp = dynamic_cast<RoutingPad*>( component );
if (rp) break;
}
if (rp) {
cdebug_log(112,0) << "Case: Next is a Device and ";
Horizontal* h = dynamic_cast<Horizontal*>( rp->_getEntityAsSegment() );
Vertical* v = dynamic_cast<Vertical* >( rp->_getEntityAsSegment() );
if (h) {
if (gcurr->isNorth(gnext) or gcurr->isSouth(gnext)) {
cdebug_log(112,0) << "COST." << endl;
supDist += getPenality( addedDistance )*1;
} else
cdebug_log(112,0) << "FREE." << endl;
} else if (v) {
if (gcurr->isWest(gnext) or gcurr->isEast(gnext)) {
cdebug_log(112,0) << "COST." << endl;
supDist += getPenality( addedDistance )*1;
} else
cdebug_log(112,0) << "FREE." << endl;
}
}
}
cdebug_log(112,0) << "supDist = " << DbU::getValueString(supDist) << endl;
cdebug_tabw(112,-1);
return supDist;
}
inline DbU::Unit AnalogDistance::getPenality ( const DbU::Unit addedDistance ) const
{
double refcost = std::max( _hpitch, _vpitch )*1;
double refdist = getReferenceDistance();
DbU::Unit pen = refcost;
if (addedDistance < refdist) pen = ( (refdist - addedDistance) / refdist) * refcost;
return pen;
}
bool AnalogDistance::isXUnion( const GCell* prev, const GCell* next ) const
{
if ( not prev or not next) return false;
if ( (prev->getXMin() > next->getXMax())
or (prev->getXMax() < next->getXMin()) ) return false;
return true;
}
bool AnalogDistance::isXUnion ( DbU::Unit xmin, DbU::Unit xmax, const GCell* next ) const
{
if (not next) return false;
if ( (xmin > next->getXMax())
or (xmax < next->getXMin()) ) return false;
return true;
}
bool AnalogDistance::isYUnion ( const GCell* prev, const GCell* next ) const
{
if (not prev or not next) return false;
if ( (prev->getYMin() > next->getYMax())
or (prev->getYMax() < next->getYMin()) ) return false;
return true;
}
bool AnalogDistance::isYUnion ( DbU::Unit ymin, DbU::Unit ymax, const GCell* next ) const
{
if (not next) return false;
if ( (ymin > next->getYMax())
or (ymax < next->getYMin()) ) return false;
return true;
}
DbU::Unit AnalogDistance::calcDistance ( const Point p1, const Point p2 ) const
{
return abs( p1.getX() - p2.getX() ) + abs( p1.getY() - p2.getY() );
}
} // Bora namespace.
#endif // BORA_ANALOG_DISTANCE_H

View File

@ -0,0 +1,85 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/BoraEngine.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_BORA_ENGINE_H
#define BORA_BORA_ENGINE_H
#include <iostream>
#include "hurricane/viewer/CellViewer.h"
namespace Hurricane {
class Cell;
class CellWidget;
}
#include "crlcore/ToolEngine.h"
namespace Bora {
using Hurricane::Name;
using Hurricane::DbU;
using Hurricane::Cell;
using Hurricane::CellWidget;
using Hurricane::CellViewer;
class SlicingPlotWidget;
class BoxSet;
class BoraEngine : public CRL::ToolEngine {
public:
typedef CRL::ToolEngine Super;
public:
static const Name& staticGetName ();
static BoraEngine* get ( const Cell* );
static BoraEngine* create ( Cell* );
virtual const Name& getName () const;
inline CellViewer* getViewer () const;
void setViewer ( CellViewer* );
void updateSlicingTree ();
void updatePlacement ( size_t index );
void updatePlacement ( DbU::Unit width, DbU::Unit height );
void updatePlacement ( BoxSet* );
void setToleranceRatio ( DbU::Unit, DbU::Unit );
void setToleranceBand ( DbU::Unit, DbU::Unit );
void showPareto ();
inline CellWidget* getCellWidget ();
inline void emitCellPreModificated ();
inline void emitCellPostModificated ();
void resetPlacement ();
DbU::Unit getToleranceRatioH () const;
DbU::Unit getToleranceRatioW () const;
DbU::Unit getToleranceBandH () const;
DbU::Unit getToleranceBandW () const;
protected:
BoraEngine ( Cell* );
virtual ~BoraEngine ();
virtual void _postCreate ();
virtual void _preDestroy ();
private:
static Hurricane::Name _toolName;
Hurricane::CellViewer* _viewer;
};
inline Hurricane::CellWidget* BoraEngine::getCellWidget () { return (_viewer) ? _viewer->getCellWidget() : NULL; }
inline void BoraEngine::emitCellPreModificated () { if (_viewer) _viewer->emitCellPreModificated() ; }
inline void BoraEngine::emitCellPostModificated () { if (_viewer) _viewer->emitCellPostModificated(); }
inline Hurricane::CellViewer* BoraEngine::getViewer () const { return _viewer; }
} // Bora namespace.
#endif // BORA_BORA_ENGINE_H

306
bora/src/bora/BoxSet.h Normal file
View File

@ -0,0 +1,306 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/BoxSet.h" |
// +-----------------------------------------------------------------+
//
// A dimension defined by a width and a height for slicing nodes.
// - HBoxSet are used for HSlicingNode:
// -> width = max(children's widths), height = sum(children's heights)
// - VBoxSet are used for VSlicingNode:
// -> width = sum(children's widths), height = max(children's heights)
// - DBoxSet are used for DSlicingNode:
// -> width = device's width, height = device's height
// - RHBoxSet are used for RHSlicingNode:
// -> height = routing space's height
// - RVBoxSet are used for RVSlicingNode:
// -> width = routing space's width
#ifndef BORA_BOX_SET_H
#define BORA_BOX_SET_H
#include <iostream>
#include <vector>
#include "hurricane/DbU.h"
#include "bora/Constants.h"
namespace Bora {
using Hurricane::DbU;
// -------------------------------------------------------------------
// Class : "Bora::BoxSet".
class BoxSet
{
public:
BoxSet ( DbU::Unit height=0, DbU::Unit width=0 );
BoxSet ( BoxSet* boxSet );
virtual ~BoxSet ();
inline DbU::Unit getHeight () const;
inline DbU::Unit getWidth () const;
inline unsigned int getCpt () const;
inline void incrementCpt ();
virtual BoxSet* clone () = 0;
inline double getRatio ();
inline double getArea ();
void preDestroy ();
virtual void destroy ();
virtual unsigned int getType () const;
virtual double getOccupationArea () const;
virtual const std::vector<BoxSet*>& getSet () const;
virtual int getNFing () const;
virtual void print () const;
virtual double getDevicesArea () const = 0;
virtual void setHeight ( DbU::Unit );
virtual void setWidth ( DbU::Unit );
protected:
DbU::Unit _height;
DbU::Unit _width;
unsigned int _cpt;
};
inline DbU::Unit BoxSet::getHeight () const { return _height; }
inline DbU::Unit BoxSet::getWidth () const { return _width; }
inline unsigned int BoxSet::getCpt () const { return _cpt; }
inline void BoxSet::incrementCpt () { _cpt++; }
inline double BoxSet::getRatio () { return _width/_height; }
inline double BoxSet::getArea () { return _width*_height; }
inline unsigned int BoxSet::getType () const { return UnknownType; }
inline double BoxSet::getOccupationArea () const { return 100; }
// -------------------------------------------------------------------
// Class : "Bora::HVBoxSet".
class HVBoxSet: public BoxSet
{
protected:
HVBoxSet ( const std::vector<BoxSet*>& , DbU::Unit height=0, DbU::Unit width=0 );
HVBoxSet ( HVBoxSet* );
virtual ~HVBoxSet ();
inline const std::vector<BoxSet*>& getSet () const;
inline double getOccupationArea () const;
double getDevicesArea () const;
virtual inline void calculateHeight () = 0;
virtual inline void calculateWidth () = 0;
protected:
std::vector<BoxSet*> _dimensionSet;
};
inline const std::vector<BoxSet*>& HVBoxSet::getSet () const { return _dimensionSet; }
inline double HVBoxSet::getOccupationArea () const { return getDevicesArea()/(_height * _width)*100; }
// -------------------------------------------------------------------
// Class : "Bora::HBoxSet".
class HBoxSet: public HVBoxSet
{
protected:
HBoxSet ( const std::vector<BoxSet*>& , DbU::Unit height, DbU::Unit width );
HBoxSet ( HBoxSet* boxSet );
~HBoxSet ();
public:
static HBoxSet* create ( const std::vector<BoxSet*>& , DbU::Unit height=0, DbU::Unit width=0 );
HBoxSet* clone ();
inline unsigned int getType () const;
void calculateHeight ();
void calculateWidth ();
static inline int getCount ();
static inline void printCount ();
static inline void printCountAll ();
void destroy ();
private:
static int _count;
static int _countAll;
};
inline unsigned int HBoxSet::getType () const { return HorizontalSNode; }
inline int HBoxSet::getCount () { return _count; }
inline void HBoxSet::printCount () { std::cerr << "HBoxSet::Count = " << _count << std::endl; }
inline void HBoxSet::printCountAll () { std::cerr << "HBoxSet::CountAll = " << _countAll << std::endl; }
// -------------------------------------------------------------------
// Class : "Bora::VBoxSet".
class VBoxSet: public HVBoxSet
{
protected:
VBoxSet ( const std::vector<BoxSet*>& , DbU::Unit height, DbU::Unit width );
VBoxSet ( VBoxSet* boxSet );
~VBoxSet ();
public:
static VBoxSet* create ( const std::vector<BoxSet*>& , DbU::Unit height=0, DbU::Unit width=0 );
VBoxSet* clone ();
inline unsigned int getType () const;
void calculateHeight ();
void calculateWidth ();
static inline int getCount ();
static inline void printCount ();
static inline void printCountAll ();
void destroy ();
private:
static int _count;
static int _countAll;
};
inline unsigned int VBoxSet::getType () const { return VerticalSNode; }
inline int VBoxSet::getCount () { return _count; }
inline void VBoxSet::printCount () { std::cerr << "VBoxSet::Count = " << _count << std::endl; }
inline void VBoxSet::printCountAll () { std::cerr << "VBoxSet::CountAll = " << _countAll << std::endl; }
// -------------------------------------------------------------------
// Class : "Bora::DBoxSet".
class DBoxSet: public BoxSet
{
protected:
DBoxSet ( DbU::Unit height, DbU::Unit width, int nfing );
DBoxSet ( DBoxSet* boxSet );
~DBoxSet ();
public:
static DBoxSet* create ( DbU::Unit height, DbU::Unit width, int nfing=1 );
DBoxSet* clone ();
inline unsigned int getType () const;
inline double getDevicesArea () const;
inline int getNFing () const;
static inline int getCount ();
static inline void printCount ();
static inline void printCountAll ();
void destroy ();
private:
int _nfing;
static int _count;
static int _countAll;
};
inline unsigned int DBoxSet::getType () const { return DeviceSNode; }
inline double DBoxSet::getDevicesArea () const { return _height*_width; }
inline int DBoxSet::getNFing () const { return _nfing; }
inline int DBoxSet::getCount () { return _count; }
inline void DBoxSet::printCount () { std::cerr << "DBoxSet::Count = " << _count << std::endl; }
inline void DBoxSet::printCountAll () { std::cerr << "DBoxSet::CountAll = " << _countAll << std::endl; }
// -------------------------------------------------------------------
// Class : "Bora::RHVBoxSet".
class RHVBoxSet: public BoxSet
{
public:
RHVBoxSet ( DbU::Unit height=0, DbU::Unit width=0 );
RHVBoxSet ( RHVBoxSet* boxSet );
~RHVBoxSet ();
inline DbU::Unit getHeight () const;
inline DbU::Unit getWidth () const;
inline unsigned int getType () const;
inline double getDevicesArea () const;
static inline int getCount ();
static inline void printCount ();
static inline void printCountAll ();
void destroy ();
virtual void setHeight ( DbU::Unit height ) { _height = 0; };
virtual void setWidth ( DbU::Unit width ) { _width = 0; };
void print () const;
protected:
static int _count;
static int _countAll;
};
inline DbU::Unit RHVBoxSet::getHeight () const { return _height; }
inline DbU::Unit RHVBoxSet::getWidth () const { return _width; }
inline unsigned int RHVBoxSet::getType () const { return RoutingSNode; }
inline double RHVBoxSet::getDevicesArea () const { return 0; }
inline int RHVBoxSet::getCount () { return _count; }
inline void RHVBoxSet::printCount () { std::cerr << "RHVBoxSet::Count = " << _count << std::endl; }
inline void RHVBoxSet::printCountAll () { std::cerr << "RHVBoxSet::CountAll = " << _countAll << std::endl; }
// -------------------------------------------------------------------
// Class : "Bora::RHBoxSet".
class RHBoxSet: public RHVBoxSet
{
protected:
RHBoxSet ( DbU::Unit height=0 );
RHBoxSet ( RHBoxSet* );
~RHBoxSet ();
public:
static RHBoxSet* create ( DbU::Unit height );
RHBoxSet* clone ();
inline void setHeight ( DbU::Unit height );
};
inline void RHBoxSet::setHeight ( DbU::Unit height ) { _height = height; }
// -------------------------------------------------------------------
// Class : "Bora::RVBoxSet".
class RVBoxSet: public RHVBoxSet
{
protected:
RVBoxSet ( DbU::Unit width=0 );
RVBoxSet ( RVBoxSet* boxSet );
~RVBoxSet ();
public:
static RVBoxSet* create ( DbU::Unit width );
RVBoxSet* clone ();
inline void setWidth ( DbU::Unit width );
};
inline void RVBoxSet::setWidth ( DbU::Unit width ) { _width = width; }
// -------------------------------------------------------------------
// Class : "Bora::compBoxSet".
class compBoxSet
{
public:
inline bool operator() ( const BoxSet* lhs, const BoxSet* rhs ) const;
};
inline bool compBoxSet::operator() ( const BoxSet* lhs, const BoxSet* rhs ) const
{
return ( (lhs->getHeight() < rhs->getHeight()) or
( (lhs->getHeight() == rhs->getHeight()) and (lhs->getWidth() < rhs->getWidth())) );
}
} // Bora namespace.
#endif // BORA_BOX_SET_H

View File

@ -0,0 +1,54 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/ChannelRouting.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_CHANNEL_ROUTING_H
#define BORA_CHANNEL_ROUTING_H
#include "hurricane/DbU.h"
namespace Bora {
using Hurricane::DbU;
// -------------------------------------------------------------------
// Class : "Bora::ChannelRouting".
class ChannelRouting
{
private:
ChannelRouting ();
~ChannelRouting ();
public:
static ChannelRouting* create ();
void destroy ();
int getMaxCount () const;
void insertChannel ( DbU::Unit xy1, DbU::Unit xy2 );
void insertChannel ( DbU::Unit xy1, DbU::Unit xy2, unsigned int w );
void reset ();
void print () const;
private:
std::vector<DbU::Unit> _limits;
std::vector<int> _counts;
};
} // Bora namespace.
#endif // BORA_CHANNEL_ROUTING_H

103
bora/src/bora/Constants.h Normal file
View File

@ -0,0 +1,103 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/Constants.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_CONSTANTS_H
#define BORA_CONSTANTS_H
#include <utility>
#include <vector>
#include <list>
namespace Bora {
const unsigned int presetMask = 0x1;
const unsigned int setMask = 0x2;
const unsigned int placedMask = 0x4;
const unsigned int alignmentMask = 0x1F8;
const unsigned int slicingTypeMask = 0x3E00;
const unsigned int overCellMask = 0x8000;
const unsigned int routingEstimatedMask = 0x10000;
const unsigned int routingCreatedMask = 0x20000;
const unsigned int symmetricMask = 0xC0000;
enum Flags { Preset = 1 << 0
, Set = 1 << 1
, Placed = 1 << 2
, UnknownAlignment = 1 << 3
, AlignLeft = 1 << 4
, AlignRight = 1 << 5
, AlignCenter = 1 << 6
, AlignTop = 1 << 7
, AlignBottom = 1 << 8
, UnknownType = 1 << 9
, HorizontalSNode = 1 << 10
, VerticalSNode = 1 << 11
, DeviceSNode = 1 << 12
, RoutingSNode = 1 << 13
, None = 1 << 14
, MX = 1 << 15
, MY = 1 << 16
, FixedRoutingSNode = 1 << 17
, OverCell = 1 << 19
, RoutingEstimated = 1 << 20
, RoutingCreated = 1 << 21
, HSymmetry = 1 << 23
, VSymmetry = 1 << 24
};
const unsigned int sideMask = 0x1F;
const unsigned int targetMask = 0x20;
const unsigned int notPassableMask = 0x3C0; // North - South - East - West
const unsigned int notPassableNMask = 0x40; // North
const unsigned int notPassableSMask = 0x80; // South
const unsigned int notPassableEMask = 0x100; // East
const unsigned int notPassableWMask = 0x200; // West
enum FunctionFlags { NoFlags = 0
, ShowDiff = (1<<0)
};
// Make sure these restrictions are the same than in the class Device
enum Restriction { NorthBlocked = (1<<0)
, SouthBlocked = (1<<1)
, EastBlocked = (1<<2)
, WestBlocked = (1<<3)
, AllBlocked = NorthBlocked|SouthBlocked|EastBlocked|WestBlocked
};
class BoxSet;
class NodeSets;
class ChannelRouting;
class SlicingNode;
class HVSlicingNode;
class HSlicingNode;
class VSlicingNode;
class RHVSlicingNode;
class RHSlicingNode;
class RVSlicingNode;
typedef std::pair<size_t,size_t> Symmetry;
typedef std::list<Symmetry> LSymmetries;
typedef std::list<SlicingNode*> LSlicingNodes;
typedef std::vector<SlicingNode*> VSlicingNodes;
} // Bora namespace.
#endif // BORA_CONSTANTS_H

View File

@ -0,0 +1,109 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/DSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_D_SLICING_NODE_H
#define BORA_D_SLICING_NODE_H
#include "bora/SlicingNode.h"
namespace Bora {
// -------------------------------------------------------------------
// Class : "Bora::DSlicingNode".
class DSlicingNode: public SlicingNode
{
public:
typedef SlicingNode Super;
private:
DSlicingNode ( unsigned int type
, NodeSets* nodeSets
, unsigned int alignment
, Instance* instance
, BoxSet* boxSet
);
~DSlicingNode ();
public:
static DSlicingNode* create ( NodeSets* nodeSets
, unsigned int alignment = UnknownAlignment
, Instance* instance = NULL
, BoxSet* boxSet = NULL
);
void print () const;
DSlicingNode* clone ( unsigned int tr=None );
inline double getDevicesArea () const;
void setNFing ( int );
int getNFing () const;
inline Instance* getInstance () const;
inline void setInstance ( Instance* );
void place ( DbU::Unit x=0, DbU::Unit y=0 );
void _place ( DbU::Unit x=0, DbU::Unit y=0, bool replace=false );
static inline int getCount ();
static inline void printCount ();
static inline void printCountAll ();
void preDestroy ();
void destroy ();
void preRecursiveDestroy ();
void recursiveDestroy ();
double getStartParameter () const;
double getStepParameter () const;
double getCountParameter () const;
bool checkInitialPlacement ( int& cpt ) const;// see notes in .cpp
void setGCell ( Anabatic::GCell* );
bool isSame ( SlicingNode* ) const;
bool isSymmetric ( SlicingNode* , unsigned int symmetryType, unsigned int flags=NoFlags ) const;
bool isSame ( SlicingNode* , unsigned int glags=NoFlags ) const;
void updateGCellPosition ();
void updateGContacts ();
void updateMatrixGCellPosition ();
void updateMatrixGContacts ();
void restrictDevices ();
void printLine () const;
bool isAnalog () const;
bool isDigital () const;
bool checkCellInstances ( Cell* cell );
virtual void resetWireOccupation ();
virtual std::string _getString () const;
virtual std::string _getTypeName () const;
private:
static int _count;
static int _countAll;
Instance* _instance;
};
inline double DSlicingNode::getDevicesArea () const { return getHeight()*getWidth(); }
inline Instance* DSlicingNode::getInstance () const { return _instance; }
inline void DSlicingNode::setInstance ( Instance* instance ) { _instance = instance; }
inline int DSlicingNode::getCount () { return _count ; }
inline void DSlicingNode::printCount () { std::cerr << "DSlicingNode::Count = " << _count << std::endl; }
inline void DSlicingNode::printCountAll () { std::cerr << "DSlicingNode::CountAll = " << _countAll << std::endl; }
} // Bora namespace.
GETSTRING_POINTER_SUPPORT(Bora::DSlicingNode)
IOSTREAM_POINTER_SUPPORT(Bora::DSlicingNode)
#endif // BORA_D_SLICING_NODE_H

View File

@ -0,0 +1,94 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/GraphicBoraEngine.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_GRAPHIC_BORA_ENGINE_H
#define BORA_GRAPHIC_BORA_ENGINE_H
#include <QObject>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include "hurricane/DbU.h"
namespace Hurricane {
class Go;
class BasicLayer;
class Transformation;
class CellWidget;
class CellViewer;
}
#include "crlcore/GraphicToolEngine.h"
#include "bora/BoraEngine.h"
namespace Bora {
using Hurricane::Go;
using Hurricane::Box;
using Hurricane::BasicLayer;
using Hurricane::Transformation;
using Hurricane::Cell;
using Hurricane::CellWidget;
using Hurricane::CellViewer;
using CRL::GraphicTool;
class SlicingPlotWidget;
class SlicingDataWidget;
class SlicingWidget;
// -------------------------------------------------------------------
// Class : "Bora::GraphicBoraEngine".
class GraphicBoraEngine : public GraphicTool {
Q_OBJECT;
public:
enum Flags { NoFlags=0x0000, CreateEngine=0x0001 };
public:
BoraEngine* createEngine ();
BoraEngine* getForFramework ( unsigned int flags );
static GraphicBoraEngine* grab ();
virtual const Name& getName () const;
Cell* getCell ();
virtual size_t release ();
virtual void addToMenu ( CellViewer* );
void updateSlicingTree ();
void setToleranceRatio ();
void setToleranceBand ();
void showPareto ();
inline SlicingWidget* getSlicingWidget ();
public slots:
void updatePlacementST ( BoxSet* );
void updatePlacementST ( size_t index );
protected:
static size_t _references;
static GraphicBoraEngine* _singleton;
CellViewer* _viewer;
SlicingWidget* _slicingWidget;
protected:
GraphicBoraEngine ();
virtual ~GraphicBoraEngine ();
};
inline SlicingWidget* GraphicBoraEngine::getSlicingWidget () { return _slicingWidget; }
} // Bora namespace.
#endif // BORA_GRAPHIC_BORA_ENGINE_H

View File

@ -0,0 +1,76 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/HSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_H_SLICING_NODE_H
#define BORA_H_SLICING_NODE_H
#include "bora/HVSlicingNode.h"
namespace Bora {
// -------------------------------------------------------------------
// Class : "Bora::HSlicingNode".
class HSlicingNode: public HVSlicingNode
{
public:
typedef HVSlicingNode Super;
private:
HSlicingNode ( unsigned int type, unsigned int alignment=UnknownAlignment );
~HSlicingNode ();
public:
static HSlicingNode* create ( unsigned int alignment = AlignLeft );
void createRouting ( DbU::Unit space );
void print () const;
HSlicingNode* clone ( unsigned int tr=None );
void place ( DbU::Unit x=0, DbU::Unit y=0 );
void replace ( DbU::Unit x=0, DbU::Unit y=0 );
void _place ( DbU::Unit x=0, DbU::Unit y=0, bool replace=false );
void updateGlobalSize ();
static inline int getCount ();
static inline void printCount ();
static inline void printCountAll ();
void preDestroy ();
void destroy ();
void preRecursiveDestroy ();
void recursiveDestroy ();
DbU::Unit getHeight () const;
DbU::Unit getWidth () const;
void createSlicingRouting ();
void setGCell ( Anabatic::GCell* gcell );
void adjustBorderChannels ();
virtual std::string _getString () const;
virtual std::string _getTypeName () const;
private:
static int _count;
static int _countAll;
};
inline int HSlicingNode::getCount () { return _count; }
inline void HSlicingNode::printCount () { std::cerr << "HSlicingNode::Count = " << _count << std::endl; }
inline void HSlicingNode::printCountAll () { std::cerr << "HSlicingNode::CountAll = " << _countAll << std::endl; }
} // Bora namespace.
GETSTRING_POINTER_SUPPORT(Bora::HSlicingNode)
IOSTREAM_POINTER_SUPPORT(Bora::HSlicingNode)
#endif // BORA_H_SLICING_NODE_H

136
bora/src/bora/HVSetState.h Normal file
View File

@ -0,0 +1,136 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/HVSetState.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_HV_SETSTATE_H
#define BORA_HV_SETSTATE_H
#include "hurricane/DbU.h"
#include "bora/Constants.h"
#include "bora/HVSlicingNode.h"
namespace Bora {
using Hurricane::DbU;
class NodeSets;
class HSlicingNode;
class VSlicingNode;
// -------------------------------------------------------------------
// Class : "Bora::HVSetState".
//
// Description:
//
// HVSetState, HSetState and VSetState are classes used in the algorithm to
// determine the possible dimensions for a slicing tree. They are not part of
// the slicing tree, they only help during the use of updateGlobalSize. At the
// end of the algorithm, it should provide the resulting NodeSets.
//
// In a horizontal/vertical slicing node, the number of possible dimensions
// (EndCounter) to study is:
//
// EndCounter = N(child0) * N(child1) * ... * N(childn)
//
// We call a "state" a dimension for the horizontal/vertical slicing
// node. "EndCounter" states needs to be studied.
//
// For each states, we check if these conditions are filled:
//
// - Horizontal case: toleranceBandW <= max(children's width )-min(children's width )
// - Vertical case: toleranceBandH <= max(children's height)-min(children's height)
//
// When the condition is filled, we add the dimensions to the NodeSets and we
// proceed to the next combinations.
class HVSetState
{
protected:
HVSetState ( HVSlicingNode* );
virtual ~HVSetState ();
public:
virtual DbU::Unit getCurrentH () = 0;
virtual DbU::Unit getCurrentW () = 0;
inline bool end ();
inline int getEndCounter ();
NodeSets* getNodeSets ();
bool isSymmetry ( size_t index, Symmetry& symmetry );
bool isSymmetry ( size_t index );
virtual void print ();
void initSet ();
void initModulos (); // see notes in .cpp
void next (); // see notes in .cpp
virtual void push_back () = 0;
protected:
HVSlicingNode* _HVSnode;
size_t _counter;
std::vector<size_t> _modulos;
std::vector<size_t> _currentSet;
std::vector<size_t> _nextSet;
NodeSets* _nodeSets;
};
inline bool HVSetState::end () { return (_counter == _modulos.back()+1); }
inline int HVSetState::getEndCounter () { return _modulos.back()+1; }
inline bool HVSetState::isSymmetry ( size_t index, Symmetry& symmetry ) { return _HVSnode->isSymmetry(index,symmetry); }
inline bool HVSetState::isSymmetry ( size_t index ) { return _HVSnode->isSymmetry(index); }
// -------------------------------------------------------------------
// Class : "Bora::HSetState".
class HSetState: public HVSetState
{
public:
HSetState ( HSlicingNode* );
~HSetState ();
std::pair<DbU::Unit,DbU::Unit> getCurrentWs (); // See notes in .cpp
virtual DbU::Unit getCurrentH (); // See notes in .cpp
virtual DbU::Unit getCurrentW (); // See notes in .cpp
void print ();
void next ();
void push_back (); // See notes in .cpp
};
// -------------------------------------------------------------------
// Class : "Bora::HSetState".
class VSetState: public HVSetState
{
public:
VSetState ( VSlicingNode* );
~VSetState ();
std::pair<DbU::Unit,DbU::Unit> getCurrentHs (); // See notes in .cpp
virtual DbU::Unit getCurrentH (); // See notes in .cpp
virtual DbU::Unit getCurrentW (); // See notes in .cpp
void print ();
void next ();
void push_back (); // See notes in .cpp
};
} // Bora namespace.
#endif // BORA_HV_SETSTATE_H

View File

@ -0,0 +1,175 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/HVSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_HV_SLICING_NODE_H
#define BORA_HV_SLICING_NODE_H
#include "bora/SlicingNode.h"
namespace Bora {
class RHVSlicingNode;
// -------------------------------------------------------------------
// Class : "Bora::HVSlicingNode".
class HVSlicingNode: public SlicingNode
{
public:
typedef SlicingNode Super;
typedef std::tuple<unsigned int, Hurricane::Net*, Hurricane::Net*> NetSymmetry;
typedef std::vector<NetSymmetry> VNetSymmetries;
protected:
HVSlicingNode ( unsigned int type, unsigned int alignment = AlignLeft );
virtual ~HVSlicingNode ();
public:
DbU::Unit getToleranceRatioH () const;
DbU::Unit getToleranceRatioW () const;
void setToleranceRatioH ( DbU::Unit );
void setToleranceRatioW ( DbU::Unit );
DbU::Unit getToleranceBandH () const;
DbU::Unit getToleranceBandW () const;
void setToleranceBandH ( DbU::Unit );
void setToleranceBandW ( DbU::Unit );
void recursiveSetToleranceRatioH ( DbU::Unit );
void recursiveSetToleranceRatioW ( DbU::Unit );
void recursiveSetToleranceBandH ( DbU::Unit );
void recursiveSetToleranceBandW ( DbU::Unit );
void _recursiveSetToleranceRatioH ( DbU::Unit );
void _recursiveSetToleranceRatioW ( DbU::Unit );
void _recursiveSetToleranceBandH ( DbU::Unit );
void _recursiveSetToleranceBandW ( DbU::Unit );
void setTolerances ( DbU::Unit trh
, DbU::Unit trw
, DbU::Unit tbh
, DbU::Unit tbw
);
void recursiveSetTolerances ( DbU::Unit trh
, DbU::Unit trw
, DbU::Unit tbh
, DbU::Unit tbw
);
void _recursiveSetTolerances ( DbU::Unit trh
, DbU::Unit trw
, DbU::Unit tbh
, DbU::Unit tbw
);
bool hasEmptyChildrenNodeSets () const;
inline const VSlicingNodes& getChildren () const;
SlicingNode* getChild ( size_t index ) const;
size_t getChildIndex ( SlicingNode* node ) const;
inline size_t getNbChild () const;
void createChild ( unsigned int type, unsigned int alignment );
void createChild ( NodeSets* nodeSets
, unsigned int alignment = UnknownAlignment
, Instance* instance = NULL
, BoxSet* boxSet = NULL
);
void createChild ( size_t childIndex, size_t copyIndex, unsigned int tr );
void insertNode ( SlicingNode* , size_t index );
void push_back ( SlicingNode* , bool reset = true );
void push_front ( SlicingNode* );
void removeNode ( SlicingNode* );
inline void removeAllNodes ();
inline const LSymmetries& getSymmetries () const;
inline void setSymmetries ( const LSymmetries& sym );
bool isSymmetry ( size_t index, Symmetry& );
bool isSymmetry ( size_t index );
void addSymmetry ( size_t childIndex, size_t copyIndex, bool reset = true );
void removeSymmetry ( size_t index );
void normalizeSymmetries (); // see notes in .cpp
void preDestroy ();
void destroy ();
void preRecursiveDestroy ();
void recursiveDestroy ();
void _resetSlicingTree ();
void print () const;
void printChildren () const;
void printLine () const;
void printChildrenLine () const;
bool recursiveCheckPreset () const;
bool recursiveCheckSet () const;
bool recursiveCheckPlaced () const;
int getLeafNumber () const;
double getDevicesArea () const;
double getOccupationArea () const;
void setGlobalSize ( DbU::Unit height, DbU::Unit width );
void setGlobalSize ( size_t index );
void _setGlobalSize ( BoxSet* boxSet );
LSlicingNodes getLeaves ();
bool checkInitialPlacement ( int& cpt ) const; // see notes in .cpp
bool isSymmetric ( SlicingNode* , unsigned int symmetryType, unsigned int flags=NoFlags ) const;
bool isSame ( SlicingNode* , unsigned int flags=NoFlags ) const;
void restrictDevices ();
void setVertexRestriction ( Net* , Katana::KatanaEngine* );
void estimateChannelsSize ();
void expandRoutingChannel ();
void _expandRoutingChannel ();
void expandRoutingChannel ( DbU::Unit height, DbU::Unit width );
bool isRoutingEstimated () const;
void updateGCellPosition ();
void updateGContacts ();
int getNbDevices ();
virtual std::string _getString () const;
virtual std::string _getTypeName () const;
void setSymmetryFlag ( unsigned int flag );
void setMaster ( SlicingNode* );
bool checkCellInstances ( Cell* );
SlicingNode* findInstance ( Instance* );
SlicingNode* findSlicingNode ( Anabatic::GCell* );
void resetSlicingRouting ();
void destroySlicingRouting ();
size_t getRoutingIndex ( SlicingNode* ) const;
SlicingNode* getSlicingRouting ( size_t index ) const;
void clearGCells ();
bool checkSymmetryNet ( unsigned int type, Net* net1, Net* net2 = NULL ) const;
void addSymmetryNet ( unsigned int type, Net* net1, Net* net2 = NULL );
void updateNetConstraints ();
void updateSymNetAxis ();
void flattenDigitalNets ();
void updateWireOccupation ( Anabatic::VertexSet );
void resetWireOccupation ();
protected:
VSlicingNodes _children;
DbU::Unit _toleranceRatioH;
DbU::Unit _toleranceRatioW;
DbU::Unit _toleranceBandH;
DbU::Unit _toleranceBandW;
LSymmetries _symmetries;
std::vector<RHVSlicingNode*> _slicingRouting;
VNetSymmetries _netSymmetries;
};
inline const VSlicingNodes& HVSlicingNode::getChildren () const { return _children; }
inline size_t HVSlicingNode::getNbChild () const { return _children.size(); }
inline void HVSlicingNode::removeAllNodes () { _children.clear(); }
inline const LSymmetries& HVSlicingNode::getSymmetries () const { return _symmetries; }
inline void HVSlicingNode::setSymmetries ( const LSymmetries& syms ) { _symmetries = syms; }
} // Bora namespace.
GETSTRING_POINTER_SUPPORT(Bora::HVSlicingNode)
IOSTREAM_POINTER_SUPPORT(Bora::HVSlicingNode)
#endif // BORA_HV_SLICING_NODE_H

107
bora/src/bora/NodeSets.h Normal file
View File

@ -0,0 +1,107 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/NodeSets.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_NODE_SETS_H
#define BORA_NODE_SETS_H
#include <cstddef>
#include <limits>
#include "BoxSet.h"
namespace Hurricane {
class Cell;
}
namespace CRL {
class RoutingGauge;
}
namespace Bora {
using std::size_t;
using Hurricane::Cell;
using CRL::RoutingGauge;
// -------------------------------------------------------------------
// Class : "Bora::NodeSets".
//
// Contains all the possible dimensions (BoxSet) for a SlicingNode
class NodeSets
{
public:
//static const size_t NotFound = std::numeric_limits<size_t>()::max;
static const size_t NotFound = (size_t)-1L;
public:
NodeSets ( double start, double step, double count );
NodeSets ( const NodeSets* other );
~NodeSets ();
static NodeSets* create ( Cell* cell =NULL
, double start=0.0
, double step =0.0
, double count=0.0
, CRL::RoutingGauge* rg =NULL );
BoxSet* operator[] ( size_t );
BoxSet* at ( size_t );
inline std::vector<BoxSet*>::iterator begin ();
inline std::vector<BoxSet*>::iterator end ();
inline const std::vector<BoxSet*>& getBoxSets () const;
inline std::vector<BoxSet*>& getBoxSets ();
inline size_t size () const;
inline bool empty () const;
void clear ();
inline void sort ();
BoxSet* getPairH ( DbU::Unit height ) const;
BoxSet* getPairHW ( DbU::Unit height, DbU::Unit width ) const;
BoxSet* getPairHW ( unsigned int index ) const;
size_t findIndex ( DbU::Unit height, DbU::Unit width ) const;
BoxSet* find ( DbU::Unit height, DbU::Unit width );
BoxSet* find ( BoxSet* boxSet );
BoxSet* find ( int nfing );
void print () const;
bool compare ( NodeSets nodeSets2, unsigned int flags=NoFlags ) const;
void push_back ( BoxSet* boxSet );
void push_back ( std::vector<BoxSet*> vect, DbU::Unit height, DbU::Unit width, unsigned int type );
void push_back ( DbU::Unit height, DbU::Unit width );
NodeSets* clone ();
inline double getStartParameter () const;
inline double getStepParameter () const;
inline double getCountParameter () const;
private:
std::vector<BoxSet*> _boxSets;
int _start;
int _step;
int _count;
};
inline std::vector<BoxSet*>::iterator NodeSets::begin () { return _boxSets.begin(); }
inline std::vector<BoxSet*>::iterator NodeSets::end () { return _boxSets.end (); }
inline const std::vector<BoxSet*>& NodeSets::getBoxSets () const { return _boxSets; }
inline std::vector<BoxSet*>& NodeSets::getBoxSets () { return _boxSets; }
inline size_t NodeSets::size () const { return _boxSets.size() ; }
inline bool NodeSets::empty () const { return _boxSets.empty(); }
inline void NodeSets::sort () { std::sort( _boxSets.begin(),_boxSets.end(), compBoxSet() ); }
inline double NodeSets::getStartParameter () const { return _start; }
inline double NodeSets::getStepParameter () const { return _step ; }
inline double NodeSets::getCountParameter () const { return _count; }
} // Bora namespace.
#endif // BORA_NODE_SET_H

54
bora/src/bora/Pareto.h Normal file
View File

@ -0,0 +1,54 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/Pareto.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_PARETO_H
#define BORA_PARETO_H
namespace Bora {
class Pareto {
public:
Pareto ();
~Pareto ();
void mergePoint ( double x, double y );
inline int size () const;
inline int capacity () const;
inline const double* xs () const;
inline const double* ys () const;
void clear ();
void dump ();
private:
void _resize ( int newsize );
void _insert ( int index, double x, double y );
void _remove ( int index );
void _restoreMonotonic ();
private:
int _capacity;
int _size;
double* _xs;
double* _ys;
};
inline int Pareto::capacity () const { return _size; }
inline int Pareto::size () const { return _size; }
inline const double* Pareto::xs () const { return _xs; }
inline const double* Pareto::ys () const { return _ys; }
} // Bora namespace.
#endif // BORA_PARETO_H

View File

@ -0,0 +1,61 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/PyBoraEngine.h" |
// +-----------------------------------------------------------------+
#ifndef PY_BORA_ENGINE_H
#define PY_BORA_ENGINE_H
#include "hurricane/isobar/PyHurricane.h"
#include "crlcore/PyToolEngine.h"
#include "bora/BoraEngine.h"
namespace Bora {
using Bora::BoraEngine;
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyBoraEngine".
typedef struct {
CRL::PyToolEngine _baseObject;
} PyBoraEngine;
// -------------------------------------------------------------------
// Functions & Types exported to "PyBora.ccp".
extern PyTypeObject PyTypeBoraEngine;
extern PyMethodDef PyBoraEngine_Methods[];
extern PyObject* PyBoraEngine_Link ( BoraEngine* );
extern void PyBoraEngine_LinkPyType ();
extern void PyBoraEngine_postModuleInit ();
#define IsPyBoraEngine(v) ( (v)->ob_type == &PyTypeBoraEngine )
#define PYBORAENGINE(v) ( (PyBoraEngine*)(v) )
#define PYBORAENGINE_O(v) ( PYBORAENGINE(v)->_baseObject._object )
} // extern "C".
} // Bora namespace.
#endif // PY_BORA_ENGINE_H

View File

@ -0,0 +1,55 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/PyDSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_PY_DSLICING_NODE_H
#define BORA_PY_DSLICING_NODE_H
#include "bora/PySlicingNode.h"
#include "bora/DSlicingNode.h"
namespace Bora {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyDSlicingNode".
typedef struct {
PySlicingNode _baseObject;
} PyDSlicingNode;
// -------------------------------------------------------------------
// Functions & Types exported to "PyBora.cpp".
extern PyTypeObject PyTypeDSlicingNode;
extern PyMethodDef PyDSlicingNode_Methods[];
extern PyObject* PyDSlicingNode_NEW ( DSlicingNode* node );
extern void PyDSlicingNode_LinkPyType ();
#define IsPyDSlicingNode(v) ( (v)->ob_type == &PyTypeDSlicingNode )
#define PYDSLICINGNODE(v) ( (PyDSlicingNode*)(v) )
#define PYDSLICINGNODE_O(v) ( dynamic_cast<DSlicingNode*>(PYDSLICINGNODE(v)->_baseObject._object) )
} // extern "C".
} // Bora namespace.
#endif // BORA_PY_DSLICING_NODE_H

View File

@ -0,0 +1,55 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/PyGraphicBoraEngine.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_PY_GRAPHIC_BORA_ENGINE_H
#define BORA_PY_GRAPHIC_BORA_ENGINE_H
#include "crlcore/PyGraphicToolEngine.h"
#include "bora/GraphicBoraEngine.h"
namespace Bora {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyGraphicBoraEngine".
typedef struct {
CRL::PyGraphicTool _baseObject;
} PyGraphicBoraEngine;
// -------------------------------------------------------------------
// Functions & Types exported to "PyBora.ccp".
extern PyTypeObject PyTypeGraphicBoraEngine;
extern PyMethodDef PyGraphicBoraEngine_Methods[];
extern void PyGraphicBoraEngine_LinkPyType ();
#define IsPyGraphicBoraEngine(v) ( (v)->ob_type == &PyTypeGraphicBoraEngine )
#define PY_GRAPHIC_BORA_ENGINE(v) ( (PyGraphicBoraEngine*)(v) )
#define PY_GRAPHIC_BORA_ENGINE_O(v) ( PY_GRAPHIC_BORA_ENGINE(v)->_baseObject._object )
} // extern "C".
} // Bora namespace.
#endif // BORA_PY_GRAPHIC_BORA_ENGINE_H

View File

@ -0,0 +1,55 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/PyHSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_PY_HSLICING_NODE_H
#define BORA_PY_HSLICING_NODE_H
#include "bora/PySlicingNode.h"
#include "bora/HSlicingNode.h"
namespace Bora {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyHSlicingNode".
typedef struct {
PySlicingNode _baseObject;
} PyHSlicingNode;
// -------------------------------------------------------------------
// Functions & Types exported to "PyHurricaneAMS.cpp".
extern PyTypeObject PyTypeHSlicingNode;
extern PyMethodDef PyHSlicingNode_Methods[];
extern PyObject* PyHSlicingNode_NEW ( HSlicingNode* node );
extern void PyHSlicingNode_LinkPyType ();
#define IsPyHSlicingNode(v) ( (v)->ob_type == &PyTypeHSlicingNode )
#define PYHSLICINGNODE(v) ( (PyHSlicingNode*)(v) )
#define PYHSLICINGNODE_O(v) ( dynamic_cast<HSlicingNode*>(PYHSLICINGNODE(v)->_baseObject._object) )
} // extern "C".
} // Bora namespace.
#endif // BORA_PY_HSLICING_NODE_H

View File

@ -0,0 +1,55 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/PyRHSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_PY_RHSLICING_NODE_H
#define BORA_PY_RHSLICING_NODE_H
#include "bora/PySlicingNode.h"
#include "bora/RHSlicingNode.h"
namespace Bora {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyRHSlicingNode".
typedef struct {
PySlicingNode _baseObject;
} PyRHSlicingNode;
// -------------------------------------------------------------------
// Functions & Types exported to "PyHurricaneAMS.cpp".
extern PyTypeObject PyTypeRHSlicingNode;
extern PyMethodDef PyRHSlicingNode_Methods[];
extern PyObject* PyRHSlicingNode_NEW ( RHSlicingNode* node );
extern void PyRHSlicingNode_LinkPyType ();
#define IsPyRHSlicingNode(v) ( (v)->ob_type == &PyTypeRHSlicingNode )
#define PYRHSLICINGNODE(v) ( (PyRHSlicingNode*)(v) )
#define PYRHSLICINGNODE_O(v) ( dynamic_cast<RHSlicingNode*>(PYRHSLICINGNODE(v)->_baseObject._object) )
} // extern "C".
} // Bora namespace.
#endif // BORA_PY_RHSLICING_NODE_H

View File

@ -0,0 +1,55 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/PyRVSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_PY_RVSLICING_NODE_H
#define BORA_PY_RVSLICING_NODE_H
#include "bora/PySlicingNode.h"
#include "bora/RVSlicingNode.h"
namespace Bora {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyRVSlicingNode".
typedef struct {
PySlicingNode _baseObject;
} PyRVSlicingNode;
// -------------------------------------------------------------------
// Functions & Types exported to "PyHurricaneAMS.cpp".
extern PyTypeObject PyTypeRVSlicingNode;
extern PyMethodDef PyRVSlicingNode_Methods[];
extern PyObject* PyRVSlicingNode_NEW ( RVSlicingNode* node );
extern void PyRVSlicingNode_LinkPyType ();
#define IsPyRVSlicingNode(v) ( (v)->ob_type == &PyTypeRVSlicingNode )
#define PYRVSLICINGNODE(v) ( (PyRVSlicingNode*)(v) )
#define PYRVSLICINGNODE_O(v) ( dynamic_cast<RVSlicingNode*>(PYRVSLICINGNODE(v)->_baseObject._object) )
} // extern "C".
} // Bora namespace.
#endif // BORA_PY_RVSLICING_NODE_H

View File

@ -0,0 +1,65 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/PySlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_PY_SLICING_NODE_H
#define BORA_PY_SLICING_NODE_H
#include "hurricane/isobar/PyHurricane.h"
#include "bora/SlicingNode.h"
namespace Bora {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PySlicingNode".
typedef struct {
PyObject_HEAD
SlicingNode* _object;
} PySlicingNode;
// -------------------------------------------------------------------
// Functions & Types exported to "PyBora.ccp".
extern PyObject* PySlicingNode_NEW ( SlicingNode* node );
extern void PySlicingNode_LinkPyType ();
extern void PySlicingNode_postModuleInit ();
extern PyTypeObject PyTypeSlicingNode;
extern PyMethodDef PySlicingNode_Methods[];
#define IsPySlicingNode(v) ( (v)->ob_type == &PyTypeSlicingNode )
#define PYSLICINGNODE(v) ( (PySlicingNode*)(v) )
#define PYSLICINGNODE_O(v) ( PYSLICINGNODE(v)->_object )
// Vector of DrawingGroups.
declareVectorObject(SlicingNode);
} // extern "C".
SlicingNode* SlicingNodeCast ( PyObject* derivedObject );
} // Bora namespace.
#endif // BORA_PY_SLICING_NODE_H

View File

@ -0,0 +1,55 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2016-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/PyVSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_PY_VSLICING_NODE_H
#define BORA_PY_VSLICING_NODE_H
#include "bora/PySlicingNode.h"
#include "bora/VSlicingNode.h"
namespace Bora {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyVSlicingNode".
typedef struct {
PySlicingNode _baseObject;
} PyVSlicingNode;
// -------------------------------------------------------------------
// Functions & Types exported to "PyBora.cpp".
extern PyTypeObject PyTypeVSlicingNode;
extern PyMethodDef PyVSlicingNode_Methods[];
extern PyObject* PyVSlicingNode_NEW ( VSlicingNode* node );
extern void PyVSlicingNode_LinkPyType ();
#define IsPyVSlicingNode(v) ( (v)->ob_type == &PyTypeVSlicingNode )
#define PYVSLICINGNODE(v) ( (PyVSlicingNode*)(v) )
#define PYVSLICINGNODE_O(v) ( dynamic_cast<VSlicingNode*>(PYVSLICINGNODE(v)->_baseObject._object) )
} // extern "C".
} // Bora namespace.
#endif // BORA_PY_VSLICING_NODE_H

View File

@ -0,0 +1,65 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/RHSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_RH_SLICING_NODE_H
#define BORA_RH_SLICING_NODE_H
#include "bora/RHVSlicingNode.h"
namespace Bora {
// -------------------------------------------------------------------
// Class : "Bora::RHSlicingNode".
class RHSlicingNode: public RHVSlicingNode
{
private:
RHSlicingNode ( DbU::Unit height );
RHSlicingNode ( Hurricane::Instance* );
~RHSlicingNode ();
public:
static RHSlicingNode* create ( DbU::Unit height=DbU::Unit(0) );
static RHSlicingNode* create ( Hurricane::Net* net
, Hurricane::Layer* layer
, int npitch
, std::string cname
, std::string iname
);
RHSlicingNode* clone ( unsigned int tr=None );
DbU::Unit getWidth () const;
void setHeight ( DbU::Unit );
void estimateChannelsSize ();
void _expandRoutingChannel ();
void expandRoutingChannel ( DbU::Unit height, DbU::Unit width );
void setGCell ( Anabatic::GCell* );
void updateMasterSize ( DbU::Unit size );
virtual std::string _getTypeName () const;
void setWidth ( DbU::Unit width );
};
} // Bora namespace.
GETSTRING_POINTER_SUPPORT(Bora::RHSlicingNode)
IOSTREAM_POINTER_SUPPORT(Bora::RHSlicingNode)
#endif // BORA_RH_SLICING_NODE_H

View File

@ -0,0 +1,87 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/RHVSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_RHV_SLICING_NODE_H
#define BORA_RHV_SLICING_NODE_H
#include "SlicingNode.h"
namespace Bora {
// -------------------------------------------------------------------
// Class : "Bora::RHVSlicingNode".
class RHVSlicingNode: public SlicingNode
{
protected:
RHVSlicingNode ();
~RHVSlicingNode ();
public:
void print () const;
void _setGlobalSize ( DbU::Unit height, DbU::Unit width = 0 );
inline double getDevicesArea () const;
inline bool isRoutingEstimated () const;
unsigned int getAlignment () const;
NodeSets* getNodeSets () const;
BoxSet* getPairH ( DbU::Unit height ) const;
BoxSet* getPairHW ( DbU::Unit height, DbU::Unit width ) const;
void setPairH ( DbU::Unit height );
void setPairHW ( DbU::Unit height, DbU::Unit width );
static inline int getCount ();
static inline void printCount ();
static inline void printCountAll ();
void preDestroy ();
void destroy ();
void preRecursiveDestroy ();
void recursiveDestroy ();
void resetSize ();
bool isSame ( SlicingNode* , unsigned int flags=NoFlags ) const;
bool isSymmetric ( SlicingNode* , unsigned int symmetryType, unsigned int flags=NoFlags ) const;
void _place ( DbU::Unit x=0, DbU::Unit y=0, bool replace=false );
void setRailInstance ( Hurricane::Instance* i );
inline Hurricane::Instance* getRailInstance () const ;
void addWireOccupation ( DbU::Unit min, DbU::Unit max );
void resetWireOccupation ();
int getMaxWireOccupation ();
protected:
static int _count;
static int _countAll;
Hurricane::Instance* _railInstance;
DbU::Unit _minHeight;
DbU::Unit _minWidth;
ChannelRouting* _wireOccupation;
};
inline double RHVSlicingNode::getDevicesArea () const { return 0; }
inline int RHVSlicingNode::getCount () { return _count; }
inline void RHVSlicingNode::printCount () { std::cerr << "RHVSlicingNode::Count = " << _count << std::endl; }
inline void RHVSlicingNode::printCountAll () { std::cerr << "RHVSlicingNode::CountAll = " << _countAll << std::endl; }
inline bool RHVSlicingNode::isRoutingEstimated () const { return (_flags & RoutingEstimated); }
inline Hurricane::Instance* RHVSlicingNode::getRailInstance () const { return _railInstance; }
} // Bora namespace.
GETSTRING_POINTER_SUPPORT(Bora::RHVSlicingNode)
IOSTREAM_POINTER_SUPPORT(Bora::RHVSlicingNode)
#endif // BORA_RHV_SLICING_NODE_H

View File

@ -0,0 +1,64 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/RVSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_RV_SLICING_NODE_H
#define BORA_RV_SLICING_NODE_H
#include "bora/RHVSlicingNode.h"
namespace Bora {
// -------------------------------------------------------------------
// Class : "Bora::RVSlicingNode".
class RVSlicingNode: public RHVSlicingNode
{
private:
RVSlicingNode ( DbU::Unit width );
RVSlicingNode ( Hurricane::Instance* );
~RVSlicingNode ();
public:
static RVSlicingNode* create ( DbU::Unit width=DbU::Unit(0) );
static RVSlicingNode* create ( Hurricane::Vertical* );
static RVSlicingNode* create ( Hurricane::Net* net
, Hurricane::Layer* layer
, int npitch
, std::string cname
, std::string iname
);
RVSlicingNode* clone ( unsigned int tr = None );
DbU::Unit getHeight () const;
void setWidth ( DbU::Unit width );
void estimateChannelsSize ();
void _expandRoutingChannel ();
void expandRoutingChannel ( DbU::Unit height, DbU::Unit width );
void setGCell ( Anabatic::GCell* );
void updateMasterSize ( DbU::Unit size );
virtual std::string _getTypeName () const;
void setHeight ( DbU::Unit );
};
} // Bora namespace.
GETSTRING_POINTER_SUPPORT(Bora::RVSlicingNode)
IOSTREAM_POINTER_SUPPORT(Bora::RVSlicingNode)
#endif // BORA_RV_SLICING_NODE_H

View File

@ -0,0 +1,52 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/SlicingDataModel.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_SLICING_DATA_MODEL_H
#define BORA_SLICING_DATA_MODEL_H
#include <vector>
#include <QAbstractTableModel>
namespace Hurricane {
class Cell;
}
#include "bora/SlicingNode.h"
namespace Bora {
using Hurricane::Cell;
class SlicingDataModel : public QAbstractTableModel {
Q_OBJECT;
public:
SlicingDataModel ( QObject* parent=NULL );
~SlicingDataModel ();
void setCell ( Cell* cell );
int rowCount ( const QModelIndex& parent=QModelIndex() ) const;
int columnCount ( const QModelIndex& parent=QModelIndex() ) const;
QVariant data ( const QModelIndex& index, int role=Qt::DisplayRole ) const;
QVariant headerData ( int section, Qt::Orientation orientation, int role=Qt::DisplayRole ) const;
BoxSet* getBoxSet ( int index );
void updateContents ();
private:
Cell* _cell;
};
} // Bora namespace.
#endif // BORA_SLICING_DATA_MODEL_H

View File

@ -0,0 +1,63 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/SlicingDataWidget.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_SLICING_DATAS_WIDGET_H
#define BORA_SLICING_DATAS_WIDGET_H
#include <QWidget>
#include <QModelIndex>
class QTableView;
class QSortFilterProxyModel;
namespace Hurricane {
class CellViewer;
}
#include "bora/SlicingNode.h"
namespace Bora {
using Hurricane::CellViewer;
class SlicingDataModel;
class SlicingDataWidget : public QWidget {
Q_OBJECT;
public:
SlicingDataWidget ( QWidget* parent=NULL );
~SlicingDataWidget ();
void setViewer ( CellViewer* );
bool eventFilter ( QObject*, QEvent* );
void updateContents ();
BoxSet* getBoxSet ( int index );
public slots:
void columnPressed ( int column );
void cellClicked ( const QModelIndex& index );
void updateSelectedRow ( double x, double y );
signals:
void updatePlacement ( BoxSet* boxSet );
void updateSelectedPoint ( double x, double y );
private:
CellViewer* _viewer;
SlicingDataModel* _baseModel;
QSortFilterProxyModel* _sortModel;
QTableView* _view;
int _rowHeight;
};
} // Bora namespace.
#endif // BORA_SLICING_DATAS_WIDGET_H

391
bora/src/bora/SlicingNode.h Normal file
View File

@ -0,0 +1,391 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/SlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_SLICING_NODE_H
#define BORA_SLICING_NODE_H
#include "hurricane/DbU.h"
#include "hurricane/analog/AnalogCellExtension.h"
namespace Hurricane {
class Technology;
class Net;
class Segment;
class Plug;
class Instance;
}
namespace CRL {
class RoutingGauge;
}
#include "anabatic/Dijkstra.h"
namespace Katana {
class KatanaEngine;
}
#include "bora/Constants.h"
#include "bora/NodeSets.h"
namespace Bora {
using Hurricane::DbU;
using Hurricane::Technology;
using Hurricane::Net;
using Hurricane::Plug;
using Hurricane::Segment;
using Hurricane::Cell;
using Hurricane::Instance;
using Analog::AnalogData;
using CRL::RoutingGauge;
using Anabatic::GCell;
using Katana::KatanaEngine;
// -------------------------------------------------------------------
// Class : "Bora::SlicingNode".
//
// Description:
// Node used for building a slicing tree used for device's placement.
// Step 1: Build - build the slicing tree
// Step 2: Update - possible dimensions (updateGlobalSize)
// Step 3: Select - select the desired dimension (setGlobalSize)
class SlicingNode : public AnalogData
{
public:
typedef AnalogData Super;
protected:
SlicingNode ( unsigned int type );
SlicingNode ( unsigned int type
, NodeSets* nodeSets
, unsigned int alignment = UnknownAlignment
, BoxSet* boxSet = NULL
);
virtual ~SlicingNode ();
public:
// Predicates.
inline bool isPreset () const;
inline bool isSet () const;
inline bool isPlaced () const;
inline bool isAlignLeft () const;
inline bool isAlignRight () const;
inline bool isAlignCenter () const;
inline bool isAlignTop () const;
inline bool isAlignBottom () const;
inline bool isHorizontal () const;
inline bool isVertical () const;
inline bool isDevice () const;
inline bool isRouting () const;
bool isSameSize ( BoxSet* ) const;
bool isSameSize ( DbU::Unit height, DbU::Unit width ) const;
bool isEmpty () const;
inline bool isOverCell () const;
inline bool isRoutingCreated () const;
virtual inline bool isRoutingEstimated () const;
bool isHSymmetry () const;
bool isVSymmetry () const;
virtual inline bool isAnalog () const;
virtual inline bool isDigital () const;
// Accessors.
inline size_t getId () const;
inline unsigned int getPreset () const;
inline unsigned int getSet () const;
inline unsigned int getPlaced () const;
inline unsigned int getAlignment () const;
inline unsigned int getType () const;
virtual DbU::Unit getHeight () const;
virtual DbU::Unit getWidth () const;
DbU::Unit getRootHeight () const;
DbU::Unit getRootWidth () const;
inline BoxSet* getBoxSet () const;
inline DbU::Unit getX () const;
inline DbU::Unit getY () const;
DbU::Unit getRootX () const;
DbU::Unit getRootY () const;
inline DbU::Unit getXCenter () const;
inline DbU::Unit getYCenter () const;
inline NodeSets* getNodeSets () const;
inline SlicingNode* getParent () const;
inline BoxSet* getPairH ( DbU::Unit height ) const;
inline BoxSet* getPairHW ( DbU::Unit height, DbU::Unit width ) const;
inline BoxSet* getPairHW ( int index ) const;
inline SlicingNode* getRoot () const;
int getCpt ();
double getRatio ();
double getArea ();
static inline Technology* getTechnology ();
static inline Cell* getCell ();
inline Anabatic::GCell* getGCell () const;
inline CRL::RoutingGauge* getRoutingGauge () const;
inline SlicingNode* getMaster () const;
DbU::Unit getVPitch ();
DbU::Unit getHPitch ();
// Mutators.
inline void setPreset ( unsigned int );
inline void setSet ( unsigned int );
virtual inline void setPlaced ( unsigned int );
inline void setAlignment ( unsigned int );
inline void setType ( unsigned int );
void setBoxSet ( BoxSet* );
void setBoxSet ( DbU::Unit height, DbU::Unit width );
void setBoxSet ( size_t index );
void _setBoxSet ( BoxSet* boxSet );
void setX ( DbU::Unit x );
void setY ( DbU::Unit y );
inline void setNodeSets ( NodeSets* );
inline void setParent ( SlicingNode* );
inline void setPairH ( DbU::Unit height );
inline void setPairHW ( DbU::Unit height, DbU::Unit width );
inline void setOverCell ( unsigned int overCell );
inline void setRoutingCreated ( unsigned int );
inline void setRoutingEstimated ( unsigned int );
static void setRoutingGauge ( CRL::RoutingGauge* );
void setCell ( Cell* );
void setKatana ( Katana::KatanaEngine* );
virtual inline void setSymmetryFlag ( unsigned int );
virtual inline void setMaster ( SlicingNode* );
virtual void setHeight ( DbU::Unit );
virtual void setWidth ( DbU::Unit );
inline void clearNodeSets ();
void clearParentsNodeSets ();
inline void removeParent ();
virtual void resetSlicingTree (); // see notes in .cpp
virtual void _resetSlicingTree ();
virtual void print () const;
virtual void printLine () const;
virtual void printParent () const;
void printBoxSet () const;
virtual void place ( DbU::Unit x=0 , DbU::Unit y=0 );
virtual void replace ( DbU::Unit x=0 , DbU::Unit y=0 );
virtual void _place ( DbU::Unit x=0 , DbU::Unit y=0, bool replace=false );
virtual void updateGlobalSize () { };
virtual void setGlobalSize ( DbU::Unit height, DbU::Unit width );
virtual void setGlobalSize ( size_t index );
virtual void _setGlobalSize ( BoxSet* );
virtual inline bool recursiveCheckPreset () const;
virtual inline bool recursiveCheckSet () const;
virtual inline bool recursiveCheckPlaced () const;
virtual inline int getLeafNumber () const;
virtual void preDestroy ();
virtual void destroy ();
virtual void preRecursiveDestroy ();
virtual void recursiveDestroy ();
virtual LSlicingNodes getLeaves ();
virtual bool checkInitialPlacement ( int& cpt ) const; // see notes in .cpp
void updateCellAbutmentBox ();
virtual void setGCell ( Anabatic::GCell* );
virtual bool isSymmetric ( SlicingNode* , unsigned int symmetryType, unsigned int flags=NoFlags ) const;
virtual bool isSame ( SlicingNode* , unsigned int flags=NoFlags ) const;
static void createRoutingPads ();
static void clearRoutingPads ();
virtual void restrictDevices ();
virtual void setVertexRestriction ( Net* , Katana::KatanaEngine* );
virtual void estimateChannelsSize ();
virtual void expandRoutingChannel ();
virtual void _expandRoutingChannel ();
virtual void expandRoutingChannel ( DbU::Unit height, DbU::Unit width );
virtual void clearGlobalRouting ();
virtual void clearGCells ();
virtual void adjustBorderChannels () {};
bool containAxis ( DbU::Unit axis, unsigned int symmetryType );
virtual void updateMasterSize ( DbU::Unit size ) { }
// Error Methods
virtual DbU::Unit getToleranceRatioH () const;
virtual DbU::Unit getToleranceRatioW () const;
virtual void setToleranceRatioH ( DbU::Unit );
virtual void setToleranceRatioW ( DbU::Unit );
virtual DbU::Unit getToleranceBandH () const;
virtual DbU::Unit getToleranceBandW () const;
virtual void setToleranceBandH ( DbU::Unit );
virtual void setToleranceBandW ( DbU::Unit );
virtual void recursiveSetToleranceRatioH ( DbU::Unit );
virtual void recursiveSetToleranceRatioW ( DbU::Unit );
virtual void recursiveSetToleranceBandH ( DbU::Unit );
virtual void recursiveSetToleranceBandW ( DbU::Unit );
virtual void _recursiveSetToleranceRatioH ( DbU::Unit );
virtual void _recursiveSetToleranceRatioW ( DbU::Unit );
virtual void _recursiveSetToleranceBandH ( DbU::Unit );
virtual void _recursiveSetToleranceBandW ( DbU::Unit );
virtual void setTolerances ( DbU::Unit trh, DbU::Unit trw, DbU::Unit tbh, DbU::Unit tbw );
virtual void recursiveSetTolerances ( DbU::Unit trh, DbU::Unit trw, DbU::Unit tbh, DbU::Unit tbw );
virtual void _recursiveSetTolerances ( DbU::Unit trh, DbU::Unit trw, DbU::Unit tbh, DbU::Unit tbw );
virtual bool hasEmptyChildrenNodeSets () const ;
virtual const VSlicingNodes& getChildren () const ;
virtual SlicingNode* getChild ( size_t ) const ;
virtual size_t getChildIndex ( SlicingNode* ) const;
virtual size_t getNbChild () const ;
virtual void createChild ( unsigned int type, unsigned int alignment );
virtual void createChild ( NodeSets* nodeSets
, unsigned int alignment = UnknownAlignment
, Instance* instance = NULL
, BoxSet* boxSet = NULL
);
virtual void createChild ( size_t childIndex, size_t copyIndex, unsigned int tr );
virtual void createRouting ( DbU::Unit );
virtual void insertNode ( SlicingNode* , size_t index );
virtual void push_back ( SlicingNode* , bool reset=false );
virtual void push_front ( SlicingNode* );
virtual void removeNode ( SlicingNode* );
virtual void removeAllNodes ();
virtual const LSymmetries& getSymmetries () const;
virtual void setSymmetries ( const LSymmetries& );
virtual bool isSymmetry ( size_t index, Symmetry& );
virtual bool isSymmetry ( size_t index );
virtual void addSymmetry ( size_t childIndex, size_t copyIndex, bool reset=true );
virtual void removeSymmetry ( size_t index );
virtual void normalizeSymmetries ();
virtual void printChildren () const;
virtual void printChildrenLine () const;
virtual SlicingNode* clone ( unsigned int tr=None );
virtual double getDevicesArea () const;
virtual double getOccupationArea () const;
virtual void setNFing ( int );
virtual int getNFing () const;
virtual double getStartParameter () const;
virtual double getStepParameter () const;
virtual double getCountParameter () const;
virtual Instance* getInstance () const;
virtual void setInstance ( Instance* );
virtual bool checkCellInstances ( Cell* );
virtual SlicingNode* findInstance ( Instance* );
virtual SlicingNode* findSlicingNode ( Anabatic::GCell* );
virtual void updateGCellPosition ();
virtual void updateGContacts ();
virtual void updateMatrixGCellPosition ();
virtual void updateMatrixGContacts ();
virtual int getNbDevices ();
// Methods to be tested.
virtual void createSlicingRouting ();
virtual void resetSlicingRouting ();
virtual void destroySlicingRouting ();
virtual size_t getRoutingIndex ( SlicingNode* ) const;
virtual SlicingNode* getSlicingRouting ( size_t index ) const;
SlicingNode* findHorizontalParent () const;
SlicingNode* findVerticalParent () const;
size_t getIndexInHorizontalParent () const;
size_t getIndexInVerticalParent () const;
virtual bool checkSymmetryNet ( unsigned int type, Net* net1, Net* net2=NULL ) const;
virtual void addSymmetryNet ( unsigned int type, Net* net1, Net* net2=NULL );
virtual void updateNetConstraints ();
virtual void updateSymNetAxis ();
virtual std::string _getString () const;
virtual std::string _getTypeName () const;
static void addRailSegments ( Hurricane::Segment* );
static bool isRailSegments ( Hurricane::Segment* );
static bool isRailSegments ( Hurricane::Plug* );
void createRailCell ();
virtual void flattenDigitalNets ();
virtual void updateWireOccupation ( Anabatic::VertexSet );
virtual void resetWireOccupation ();
virtual void addWireOccupation ( DbU::Unit min, DbU::Unit max );
virtual int getMaxWireOccupation ();
protected:
static CRL::RoutingGauge* _rg;
static Cell* _cell;
static Katana::KatanaEngine* _katana;
static std::vector<Segment*> _railSegments;
static size_t _idCounter;
size_t _id;
SlicingNode* _parent;
unsigned int _flags;
NodeSets* _nodeSets;
DbU::Unit _x;
DbU::Unit _y;
BoxSet* _boxSet;
Anabatic::GCell* _gcell;
SlicingNode* _master;
};
inline bool SlicingNode::isPreset () const { return (_flags & Preset); }
inline bool SlicingNode::isSet () const { return (_flags & Set); }
inline bool SlicingNode::isPlaced () const { return (_flags & Placed); }
inline bool SlicingNode::isAlignLeft () const { return (_flags & AlignLeft); }
inline bool SlicingNode::isAlignRight () const { return (_flags & AlignRight); }
inline bool SlicingNode::isAlignCenter () const { return (_flags & AlignCenter); }
inline bool SlicingNode::isAlignTop () const { return (_flags & AlignTop); }
inline bool SlicingNode::isAlignBottom () const { return (_flags & AlignBottom); }
inline bool SlicingNode::isHorizontal () const { return (_flags & HorizontalSNode); }
inline bool SlicingNode::isVertical () const { return (_flags & VerticalSNode); }
inline bool SlicingNode::isDevice () const { return (_flags & DeviceSNode); }
inline bool SlicingNode::isRouting () const { return (_flags & RoutingSNode); }
inline bool SlicingNode::isHSymmetry () const { return (_flags & HSymmetry); }
inline bool SlicingNode::isVSymmetry () const { return (_flags & VSymmetry); }
inline bool SlicingNode::isOverCell () const { return (_flags & OverCell); }
inline bool SlicingNode::isRoutingCreated () const { return (_flags & RoutingCreated); }
inline bool SlicingNode::isRoutingEstimated () const { return true; }
inline bool SlicingNode::isAnalog () const { return false; }
inline bool SlicingNode::isDigital () const { return false; }
inline size_t SlicingNode::getId () const { return _id; }
inline unsigned int SlicingNode::getPreset () const { return (_flags & presetMask); }
inline unsigned int SlicingNode::getSet () const { return (_flags & setMask); }
inline unsigned int SlicingNode::getPlaced () const { return (_flags & placedMask); }
inline unsigned int SlicingNode::getAlignment () const { return (_flags & alignmentMask); }
inline unsigned int SlicingNode::getType () const { return (_flags & slicingTypeMask); }
inline BoxSet* SlicingNode::getBoxSet () const { return _boxSet; }
inline DbU::Unit SlicingNode::getX () const { return _x; }
inline DbU::Unit SlicingNode::getY () const { return _y; }
inline DbU::Unit SlicingNode::getXCenter () const { return getX() + getWidth()/2; }
inline DbU::Unit SlicingNode::getYCenter () const { return getY() + getHeight()/2; }
inline NodeSets* SlicingNode::getNodeSets () const { return _nodeSets; }
inline SlicingNode* SlicingNode::getParent () const { return _parent; }
inline Cell* SlicingNode::getCell () { return _cell; }
inline Anabatic::GCell* SlicingNode::getGCell () const { return _gcell; }
inline CRL::RoutingGauge* SlicingNode::getRoutingGauge () const { return _rg; }
inline SlicingNode* SlicingNode::getMaster () const { return _master; }
inline BoxSet* SlicingNode::getPairH ( DbU::Unit height ) const { return _nodeSets->getPairH(height); }
inline BoxSet* SlicingNode::getPairHW ( DbU::Unit height, DbU::Unit width ) const { return _nodeSets->getPairHW(height, width); }
inline BoxSet* SlicingNode::getPairHW ( int index ) const { return _nodeSets->getPairHW(index); }
inline void SlicingNode::setPreset ( unsigned int preset ) { _flags = ((_flags & ~presetMask ) | preset ); }
inline void SlicingNode::setSet ( unsigned int set ) { _flags = ((_flags & ~setMask ) | set ); }
inline void SlicingNode::setPlaced ( unsigned int placed ) { _flags = ((_flags & ~placedMask ) | placed ); }
inline void SlicingNode::setAlignment ( unsigned int alignment ) { _flags = ((_flags & ~alignmentMask ) | alignment); }
inline void SlicingNode::setType ( unsigned int type ) { _flags = ((_flags & ~slicingTypeMask ) | type ); }
inline void SlicingNode::setNodeSets ( NodeSets* nodeSets ) { _nodeSets = nodeSets; }
inline void SlicingNode::setParent ( SlicingNode* parent ) { _parent = parent; }
inline void SlicingNode::setPairH ( DbU::Unit height ) { _boxSet = getPairH(height); }
inline void SlicingNode::setPairHW ( DbU::Unit height, DbU::Unit width ) { _boxSet = getPairHW(height, width); }
inline void SlicingNode::setSymmetryFlag ( unsigned int flag ) { _flags = ((_flags & ~(symmetricMask) ) | flag ); }
inline void SlicingNode::setMaster ( SlicingNode* master ) { _master = master; }
inline void SlicingNode::setOverCell ( unsigned int overCell ) { _flags = ((_flags & ~(overCellMask )) | overCell) ; }
inline void SlicingNode::setRoutingCreated ( unsigned int routingCreated ) { _flags = ((_flags & ~(routingCreatedMask )) | routingCreated ); }
inline void SlicingNode::setRoutingEstimated ( unsigned int routingEstimated ) { _flags = ((_flags & ~(routingEstimatedMask)) | routingEstimated); }
inline void SlicingNode::clearNodeSets () { _nodeSets->clear(); }
inline void SlicingNode::removeParent () { _parent = NULL; }
inline bool SlicingNode::recursiveCheckPreset () const { return isPreset(); }
inline bool SlicingNode::recursiveCheckSet () const { return isSet (); }
inline bool SlicingNode::recursiveCheckPlaced () const { return isPlaced(); }
inline int SlicingNode::getLeafNumber () const { return 1; }
inline SlicingNode* SlicingNode::getRoot() const
{
SlicingNode* parent = const_cast<SlicingNode*>( this );
while ( parent->getParent() ) parent = parent->getParent();
return parent;
}
} // Bora namespace.
GETSTRING_POINTER_SUPPORT(Bora::SlicingNode)
IOSTREAM_POINTER_SUPPORT(Bora::SlicingNode)
#endif // BORA_SLICING_NODE_H

View File

@ -0,0 +1,76 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/DSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_SLICING_PLOT_WIDGET_H
#define BORA_SLICING_PLOT_WIDGET_H
#include <vector>
#include <qwt_plot.h>
#include <qwt_picker.h>
#include <qwt_picker_machine.h>
class QHBoxLayout;
class QGridLayout;
class QwtPlotCurve;
class QwtPlotPicker;
#include <hurricane/DbU.h>
namespace Hurricane {
class DynamicLabel;
class CellViewer;
}
#include "bora/SlicingNode.h"
#include "bora/Pareto.h"
namespace Bora {
using Hurricane::CellViewer;
class GraphicBoraEngine;
class SlicingPlotWidget : public QWidget {
Q_OBJECT;
public:
SlicingPlotWidget ( QWidget* parent=NULL );
virtual ~SlicingPlotWidget ();
Cell* getCell ();
void setViewer ( CellViewer* );
void setDatas ();
public slots:
void onPointSelect ( const QPointF& );
void updateSelectedPoint ( double x, double y );
signals:
void updatePlacement ( BoxSet* );
void updateSelectedRow ( double x, double y );
private:
CellViewer* _viewer;
QwtPlot* _plot;
QwtPlotPicker* _picker;
QGridLayout* _gridDisplay;
std::vector<Hurricane::DynamicLabel*> _gridLabel;
double* _widths;
double* _heights;
double* _widthSelected;
double* _heightSelected;
Pareto _pareto;
QwtPlotCurve* _STreeCurve;
QwtPlotCurve* _paretoCurve;
QwtPlotCurve* _selectedPoint;
} ;
} // Bora namespace.
#endif // BORA_SLICING_PLOT_WIDGET_H

View File

@ -0,0 +1,135 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Jean-Paul Chaput, Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/SlicingWidget.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_SLICING_WIDGET_H
#define BORA_SLICING_WIDGET_H
#include <QTabWidget>
namespace Hurricane {
class Cell;
class CellViewer;
}
#include "bora/SlicingNode.h"
namespace Bora {
using Hurricane::Cell;
using Hurricane::CellViewer;
class BoraEngine;
class SlicingPlotWidget;
class SlicingDataWidget;
// -------------------------------------------------------------------
// Class : "Bora::SlicingTab".
class SlicingTab : public QWidget {
Q_OBJECT;
public:
SlicingTab ( QWidget* parent=NULL );
inline CellViewer* getViewer ();
public slots:
virtual void setViewer ( CellViewer* );
virtual void cellPreModificate ();
virtual void cellPostModificate ();
private:
CellViewer* _viewer;
};
inline CellViewer* SlicingTab::getViewer () { return _viewer; }
// -------------------------------------------------------------------
// Class : "Bora::TabPlot".
class TabPlot : public SlicingTab {
Q_OBJECT;
public:
TabPlot ( QWidget* parent=NULL );
inline SlicingPlotWidget* getPlot ();
void setDatas ();
public slots:
void setViewer ( CellViewer* );
signals:
void updateSelectedRow ( double x, double y );
private:
SlicingPlotWidget* _plot;
};
inline SlicingPlotWidget* TabPlot::getPlot () { return _plot; }
// -------------------------------------------------------------------
// Class : "Bora::TabDatas".
class TabDatas : public SlicingTab {
Q_OBJECT;
public:
TabDatas ( QWidget* parent=NULL );
inline SlicingDataWidget* getDatas ();
void updateContents ();
public slots:
void setViewer ( CellViewer* );
signals:
void updateSelectedPoint ( double x, double y );
private:
SlicingDataWidget* _datas;
};
inline SlicingDataWidget* TabDatas::getDatas () { return _datas; }
// -------------------------------------------------------------------
// Class : "Bora::SlicingWidget".
class SlicingWidget : public QTabWidget {
Q_OBJECT;
public:
SlicingWidget ( QWidget* parent=NULL );
inline CellViewer* getViewer ();
inline SlicingPlotWidget* getPlotWidget ();
inline SlicingDataWidget* getDataWidget ();
void setViewer ( CellViewer* );
void setCell ( Cell* );
void updateContents();
signals:
void updatePlacement ( BoxSet* );
public slots:
void cellPreModificate ();
void cellPostModificate ();
void cellChanged ( Cell* );
void toggleShow ();
private:
Cell* _cell;
CellViewer* _viewer;
TabPlot* _tabPlot;
TabDatas* _tabDatas;
};
inline SlicingPlotWidget* SlicingWidget::getPlotWidget () { return _tabPlot->getPlot(); }
inline SlicingDataWidget* SlicingWidget::getDataWidget () { return _tabDatas->getDatas(); }
} // Bora namespace.
#endif // BORA_SLICING_WIDGET_H

View File

@ -0,0 +1,78 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2015-2018, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | B o r a - A n a l o g S l i c i n g T r e e |
// | |
// | Authors : Eric LAO |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./bora/VSlicingNode.h" |
// +-----------------------------------------------------------------+
#ifndef BORA_V_SLICING_NODE_H
#define BORA_V_SLICING_NODE_H
#include "bora/HVSlicingNode.h"
namespace Bora {
// -------------------------------------------------------------------
// Class : "Bora::VSlicingNode".
class VSlicingNode: public HVSlicingNode
{
public:
typedef HVSlicingNode Super;
private:
VSlicingNode ( unsigned int type, unsigned int alignment=UnknownAlignment);
~VSlicingNode ();
public:
static VSlicingNode* create ( unsigned int alignment=AlignBottom );
void createRouting ( DbU::Unit space );
void print () const;
VSlicingNode* clone ( unsigned int tr=None );
void place ( DbU::Unit x=0, DbU::Unit y=0 );
void replace ( DbU::Unit x=0, DbU::Unit y=0 );
void _place ( DbU::Unit x=0, DbU::Unit y=0, bool replace=false );
void updateGlobalSize ();
static inline int getCount ();
static inline void printCount ();
static inline void printCountAll ();
void preDestroy ();
void destroy ();
void preRecursiveDestroy ();
void recursiveDestroy ();
DbU::Unit getHeight () const;
DbU::Unit getWidth () const;
void createSlicingRouting ();
void setGCell ( Anabatic::GCell* );
void adjustBorderChannels ();
virtual std::string _getString () const;
virtual std::string _getTypeName () const;
private:
static int _count;
static int _countAll;
};
inline int VSlicingNode::getCount () { return _count; }
inline void VSlicingNode::printCount () { std::cerr << "VSlicingNode::Count = " << _count << std::endl; }
inline void VSlicingNode::printCountAll () { std::cerr << "VSlicingNode::CountAll = " << _countAll << std::endl; }
} // Bora namespace.
GETSTRING_POINTER_SUPPORT(Bora::VSlicingNode)
IOSTREAM_POINTER_SUPPORT(Bora::VSlicingNode)
#endif // BORA_V_SLICING_NODE_H

58
bora/src/cpps Normal file
View File

@ -0,0 +1,58 @@
bora/AnalogGlobalRoute.h
bora/BoraEngine.h
bora/BoxSet.h
bora/ChannelRouting.h
bora/DSlicingNode.h
bora/GraphicBoraEngine.h
bora/HSlicingNode.h
bora/HVSetState.h
bora/HVSlicingNode.h
bora/NodeSets.h
bora/Pareto.h
bora/RHSlicingNode.h
bora/RHVSlicingNode.h
bora/RVSlicingNode.h
bora/SlicingDataModel.h
bora/SlicingDataWidget.h
bora/SlicingNode-full.h
bora/SlicingNode.h
bora/SlicingPlotWidget.h
bora/SlicingWidget.h
bora/VSlicingNode.h
BoraEngine.cpp
BoxSet.cpp
ChannelRouting.cpp
DSlicingNode.cpp
GraphicBoraEngine.cpp
HSlicingNode.cpp
HVSetState.cpp
HVSlicingNode.cpp
NodeSets.cpp
Pareto.cpp
RHSlicingNode.cpp
RHVSlicingNode.cpp
RVSlicingNode.cpp
SlicingDataModel.cpp
SlicingDataWidget.cpp
SlicingNode.cpp
SlicingNode-full.cpp
SlicingPlotWidget.cpp
SlicingWidget.cpp
VSlicingNode.cpp
PyBora.cpp
PyBoraEngine.cpp
PyDSlicingNode.cpp
PyGraphicBoraEngine.cpp
PyHSlicingNode.cpp
PyRHSlicingNode.cpp
PyRVSlicingNode.cpp
PySlicingNode.cpp
PyVSlicingNode.cpp
bora/PyBoraEngine.h
bora/PyDSlicingNode.h
bora/PyGraphicBoraEngine.h
bora/PyHSlicingNode.h
bora/PyRHSlicingNode.h
bora/PyRVSlicingNode.h
bora/PySlicingNode.h
bora/PyVSlicingNode.h

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li class="current"><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
@ -50,22 +42,21 @@
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="namespaceConstant.html" target="_self">Constant</a></td><td class="desc">Store various constants </td></tr>
<tr id="row_1_"><td class="entry"><img id="arr_1_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('1_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="namespaceCRL.html" target="_self">CRL</a></td><td class="desc">The namespace of Coriolis Core </td></tr>
<tr id="row_1_0_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1Environment.html" target="_self">Environment</a></td><td class="desc">Holds all the Alliance environment variables </td></tr>
<tr id="row_1_1_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1Banner.html" target="_self">Banner</a></td><td class="desc">Print Formatted Banners (on ttys) </td></tr>
<tr id="row_1_2_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img id="arr_1_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_2_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1Catalog.html" target="_self">Catalog</a></td><td class="desc">A Registry to store Alliance Cell metadatas </td></tr>
<tr id="row_1_2_0_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1Catalog_1_1State.html" target="_self">State</a></td><td class="desc">An entry to store the Cell <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">State</a> in the <a class="el" href="classCRL_1_1Catalog.html" title="A Registry to store Alliance Cell metadatas. ">Catalog</a> </td></tr>
<tr id="row_1_3_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1CatalogExtension.html" target="_self">CatalogExtension</a></td><td class="desc">Wrapper to access a <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">Catalog::State</a> </td></tr>
<tr id="row_1_4_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img id="arr_1_4_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('1_4_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1SearchPath.html" target="_self">SearchPath</a></td><td class="desc">An ordered list of search pathes </td></tr>
<tr id="row_1_4_0_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1SearchPath_1_1Element.html" target="_self">Element</a></td><td class="desc">An element of the search path (mapping a directory) </td></tr>
<tr id="row_1_5_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1AllianceLibrary.html" target="_self">AllianceLibrary</a></td><td class="desc">A small wrapper around <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Hurricane::Library</a> </td></tr>
<tr id="row_1_6_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1RoutingLayerGauge.html" target="_self">RoutingLayerGauge</a></td><td class="desc">Gauge of a Layer for the detailed routing </td></tr>
<tr id="row_1_7_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1RoutingGauge.html" target="_self">RoutingGauge</a></td><td class="desc">Gauge for the detailed routing </td></tr>
<tr id="row_1_8_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1AllianceFramework.html" target="_self">AllianceFramework</a></td><td class="desc">A Framework to work with Alliance formats </td></tr>
<tr id="row_1_9_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1AcmSigda.html" target="_self">AcmSigda</a></td><td class="desc">A Parser of ACM/Sigda 89' benchmarks </td></tr>
<tr id="row_1_10_" class="even"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1ToolEngine.html" target="_self">ToolEngine</a></td><td class="desc">Base Class of all Coriolis Tools </td></tr>
<tr id="row_1_11_"><td class="entry"><img src="ftv2blank.png" alt="&#160;" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classCRL_1_1GraphicTool.html" target="_self">GraphicTool</a></td><td class="desc">Base Class to Hook ToolEngines into the CellViewer </td></tr>
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespaceCRL.html" target="_self">CRL</a></td><td class="desc">The namespace of Coriolis Core </td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1AcmSigda.html" target="_self">AcmSigda</a></td><td class="desc">A Parser of ACM/Sigda 89' benchmarks </td></tr>
<tr id="row_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1AllianceFramework.html" target="_self">AllianceFramework</a></td><td class="desc">A Framework to work with Alliance formats </td></tr>
<tr id="row_0_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1AllianceLibrary.html" target="_self">AllianceLibrary</a></td><td class="desc">A small wrapper around <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Hurricane::Library</a> </td></tr>
<tr id="row_0_3_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1Banner.html" target="_self">Banner</a></td><td class="desc">Print Formatted Banners (on ttys) </td></tr>
<tr id="row_0_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_4_" class="arrow" onclick="toggleFolder('0_4_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1Catalog.html" target="_self">Catalog</a></td><td class="desc">A Registry to store Alliance Cell metadatas </td></tr>
<tr id="row_0_4_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1Catalog_1_1State.html" target="_self">State</a></td><td class="desc">An entry to store the Cell <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">State</a> in the <a class="el" href="classCRL_1_1Catalog.html" title="A Registry to store Alliance Cell metadatas. ">Catalog</a> </td></tr>
<tr id="row_0_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1CatalogExtension.html" target="_self">CatalogExtension</a></td><td class="desc">Wrapper to access a <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">Catalog::State</a> </td></tr>
<tr id="row_0_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1Environment.html" target="_self">Environment</a></td><td class="desc">Holds all the Alliance environment variables </td></tr>
<tr id="row_0_7_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1GraphicTool.html" target="_self">GraphicTool</a></td><td class="desc">Base Class to Hook ToolEngines into the CellViewer </td></tr>
<tr id="row_0_8_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1RoutingGauge.html" target="_self">RoutingGauge</a></td><td class="desc">Gauge for the detailed routing </td></tr>
<tr id="row_0_9_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1RoutingLayerGauge.html" target="_self">RoutingLayerGauge</a></td><td class="desc">Gauge of a Layer for the detailed routing </td></tr>
<tr id="row_0_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_10_" class="arrow" onclick="toggleFolder('0_10_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1SearchPath.html" target="_self">SearchPath</a></td><td class="desc">An ordered list of search pathes </td></tr>
<tr id="row_0_10_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1SearchPath_1_1Element.html" target="_self">Element</a></td><td class="desc">An element of the search path (mapping a directory) </td></tr>
<tr id="row_0_11_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCRL_1_1ToolEngine.html" target="_self">ToolEngine</a></td><td class="desc">Base Class of all Coriolis Tools </td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
@ -73,7 +64,7 @@
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1AcmSigda.html">AcmSigda</a></li> </ul>
@ -61,7 +53,7 @@
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1AcmSigda.html">AcmSigda</a></li> </ul>
@ -67,8 +59,7 @@ Static Public Member Functions</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>A Parser of ACM/Sigda 89' benchmarks. </p>
<p>Thoses benches are also known as the MCNC or ISCAS98.</p>
<p>The generic cells have been mapped into the sxlib Alliance library in a straighforward way. </p>
<center> <table class="doxtable">
<p>The generic cells have been mapped into the sxlib Alliance library in a straighforward way. </p><center> <table class="doxtable">
<tr>
<th>Boolean Function</th><th>SxLib mapping </th></tr>
<tr>
@ -91,7 +82,9 @@ Static Public Member Functions</h2></td></tr>
<td><code>DFF</code> </td><th><code>sff1_x4</code> </th></tr>
</table>
</center> </div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a5e61fb60049f5a2dca1f2ca05fd5857a"></a>
<a id="a5e61fb60049f5a2dca1f2ca05fd5857a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e61fb60049f5a2dca1f2ca05fd5857a">&#9670;&nbsp;</a></span>load()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -125,7 +118,7 @@ Static Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1AllianceFramework.html">AllianceFramework</a></li> </ul>
@ -66,14 +58,14 @@
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a4085f3bc96ca5e4bf2d41a4ada9658f2">getAllianceLibrary</a>(unsigned int index)</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a8e007b3f2ac45feec2907f77530a718c">getAllianceLibrary</a>(Library *)</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a036bd6fa8f837c81f60b9d424f817add">getCatalog</a>()</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a5f0b56b303c51af5ea5c1eb1096786dd">getCell</a>(const string &amp;name, unsigned int mode, unsigned int depth=(unsigned int)-1)</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#aa584786d09bbb2469923a181b6f8e0d4">getDefaultCGPinLayerName</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a329d04c188668968308108523d16e2be">getCell</a>(const string &amp;name, unsigned int mode, unsigned int depth=(unsigned int) -1)</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#ae2bf20fc92a4684bebdab666c68c8aab">getDefaultCGPinLayerName</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a8e044592d2ceaea0060aec5dc5cc6900">getEnvironment</a>()</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a95aa8c6b8ab3f995daf22a0317324933">getInstancesCount</a>(Cell *, unsigned int flags)</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#ab6f9ac0f07b20c2444b13ef8bc55c9ea">getLibrary</a>(unsigned int index)</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#afe822e9e04b613862aec5066743e1ffd">getParentLibrary</a>()</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a9d2ad16894430081a00545d8fae952ed">getParentLibraryName</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a5992ef0669bfdefc4d712db9369bfb81">getPrint</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a4f1d2d34c254ac596e8c4a408ef6ba43">getParentLibraryName</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#ab142ba712b0e6388e45bb8d2fa05d93e">getPrint</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#ae102d655820c5d0a29a0200c5e83d42c">getRoutingGauge</a>(const Name &amp;name=&quot;&quot;)</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a0ec1cd09dec34dfecfec22927b92cc25a8d9678631764327cbfe81f8184fa9e05">HasCatalog</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html#a03ef94e043d2d25eb7a6a5f1ae176432a4a10630340ffb5b0aa9983f8b7f4cbe0">IgnoreFeeds</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1AllianceFramework.html">CRL::AllianceFramework</a></td><td class="entry"></td></tr>
@ -95,7 +87,7 @@
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1AllianceFramework.html">AllianceFramework</a></li> </ul>
@ -63,18 +55,18 @@
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a03ef94e043d2d25eb7a6a5f1ae176432"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a03ef94e043d2d25eb7a6a5f1ae176432">InstancesCountFlags</a> { <br/>
<tr class="memitem:a03ef94e043d2d25eb7a6a5f1ae176432"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a03ef94e043d2d25eb7a6a5f1ae176432">InstancesCountFlags</a> { <br />
&#160;&#160;<a class="el" href="classCRL_1_1AllianceFramework.html#a03ef94e043d2d25eb7a6a5f1ae176432a3c65ebdaecc4b34b54a01ff3a5c3195a">Recursive</a> = (1&lt;&lt;0),
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1AllianceFramework.html#a03ef94e043d2d25eb7a6a5f1ae176432a4a10630340ffb5b0aa9983f8b7f4cbe0">IgnoreFeeds</a> = (1&lt;&lt;1)
<br/>
<br />
}</td></tr>
<tr class="separator:a03ef94e043d2d25eb7a6a5f1ae176432"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ec1cd09dec34dfecfec22927b92cc25"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a0ec1cd09dec34dfecfec22927b92cc25">LibraryFlags</a> { <br/>
<tr class="memitem:a0ec1cd09dec34dfecfec22927b92cc25"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a0ec1cd09dec34dfecfec22927b92cc25">LibraryFlags</a> { <br />
&#160;&#160;<a class="el" href="classCRL_1_1AllianceFramework.html#a0ec1cd09dec34dfecfec22927b92cc25ade58398b3ec849dc3aedb6a0812fbc7a">CreateLibrary</a> = (1&lt;&lt;0)
, <br/>
, <br />
&#160;&#160;<a class="el" href="classCRL_1_1AllianceFramework.html#a0ec1cd09dec34dfecfec22927b92cc25a8d9678631764327cbfe81f8184fa9e05">HasCatalog</a> = (1&lt;&lt;2)
<br/>
<br />
}</td></tr>
<tr class="separator:a0ec1cd09dec34dfecfec22927b92cc25"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
@ -82,8 +74,8 @@ Public Types</h2></td></tr>
Public Member Functions</h2></td></tr>
<tr class="memitem:a7877a201b66f2ade7621810acd842f47"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a7877a201b66f2ade7621810acd842f47">destroy</a> ()</td></tr>
<tr class="separator:a7877a201b66f2ade7621810acd842f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5992ef0669bfdefc4d712db9369bfb81"><td class="memItemLeft" align="right" valign="top">string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a5992ef0669bfdefc4d712db9369bfb81">getPrint</a> () const </td></tr>
<tr class="separator:a5992ef0669bfdefc4d712db9369bfb81"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab142ba712b0e6388e45bb8d2fa05d93e"><td class="memItemLeft" align="right" valign="top">string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#ab142ba712b0e6388e45bb8d2fa05d93e">getPrint</a> () const</td></tr>
<tr class="separator:ab142ba712b0e6388e45bb8d2fa05d93e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc7dc5aa7e84b1fd94bc4a29bc6260e1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#adc7dc5aa7e84b1fd94bc4a29bc6260e1">isPOWER</a> (const string &amp;name)</td></tr>
<tr class="separator:adc7dc5aa7e84b1fd94bc4a29bc6260e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0dcd1a667226f37353fdf0ea232d9c5d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a0dcd1a667226f37353fdf0ea232d9c5d">isGROUND</a> (const string &amp;name)</td></tr>
@ -98,8 +90,8 @@ Public Member Functions</h2></td></tr>
<tr class="separator:a8e044592d2ceaea0060aec5dc5cc6900"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a036bd6fa8f837c81f60b9d424f817add"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1Catalog.html">Catalog</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a036bd6fa8f837c81f60b9d424f817add">getCatalog</a> ()</td></tr>
<tr class="separator:a036bd6fa8f837c81f60b9d424f817add"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d2ad16894430081a00545d8fae952ed"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a9d2ad16894430081a00545d8fae952ed">getParentLibraryName</a> () const </td></tr>
<tr class="separator:a9d2ad16894430081a00545d8fae952ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f1d2d34c254ac596e8c4a408ef6ba43"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a4f1d2d34c254ac596e8c4a408ef6ba43">getParentLibraryName</a> () const</td></tr>
<tr class="separator:a4f1d2d34c254ac596e8c4a408ef6ba43"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afe822e9e04b613862aec5066743e1ffd"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Library</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#afe822e9e04b613862aec5066743e1ffd">getParentLibrary</a> ()</td></tr>
<tr class="separator:afe822e9e04b613862aec5066743e1ffd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6f9ac0f07b20c2444b13ef8bc55c9ea"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Library</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#ab6f9ac0f07b20c2444b13ef8bc55c9ea">getLibrary</a> (unsigned int index)</td></tr>
@ -116,14 +108,14 @@ Public Member Functions</h2></td></tr>
<tr class="separator:afe7a103d54e865511fd55af90eddcf4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae102d655820c5d0a29a0200c5e83d42c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1RoutingGauge.html">RoutingGauge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#ae102d655820c5d0a29a0200c5e83d42c">getRoutingGauge</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a> &amp;name=&quot;&quot;)</td></tr>
<tr class="separator:ae102d655820c5d0a29a0200c5e83d42c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa584786d09bbb2469923a181b6f8e0d4"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#aa584786d09bbb2469923a181b6f8e0d4">getDefaultCGPinLayerName</a> () const </td></tr>
<tr class="separator:aa584786d09bbb2469923a181b6f8e0d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae2bf20fc92a4684bebdab666c68c8aab"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#ae2bf20fc92a4684bebdab666c68c8aab">getDefaultCGPinLayerName</a> () const</td></tr>
<tr class="separator:ae2bf20fc92a4684bebdab666c68c8aab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae182fd150c695fd24c1b10ddbc377b32"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#ae182fd150c695fd24c1b10ddbc377b32">addRoutingGauge</a> (<a class="el" href="classCRL_1_1RoutingGauge.html">RoutingGauge</a> *)</td></tr>
<tr class="separator:ae182fd150c695fd24c1b10ddbc377b32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab16db33a0ce2e3bce5739f7cadb3d5a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#aab16db33a0ce2e3bce5739f7cadb3d5a">addCellGauge</a> (CellGauge *)</td></tr>
<tr class="separator:aab16db33a0ce2e3bce5739f7cadb3d5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f0b56b303c51af5ea5c1eb1096786dd"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a5f0b56b303c51af5ea5c1eb1096786dd">getCell</a> (const string &amp;name, unsigned int mode, unsigned int depth=(unsigned int)-1)</td></tr>
<tr class="separator:a5f0b56b303c51af5ea5c1eb1096786dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a329d04c188668968308108523d16e2be"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#a329d04c188668968308108523d16e2be">getCell</a> (const string &amp;name, unsigned int mode, unsigned int depth=(unsigned int) -1)</td></tr>
<tr class="separator:a329d04c188668968308108523d16e2be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4381ad0c3799d584ef3ea160846e2bb"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#ac4381ad0c3799d584ef3ea160846e2bb">createCell</a> (const string &amp;name, <a class="el" href="classCRL_1_1AllianceLibrary.html">AllianceLibrary</a> *library=NULL)</td></tr>
<tr class="separator:ac4381ad0c3799d584ef3ea160846e2bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb34a606c7cd21638b4439701a8dcef9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceFramework.html#abb34a606c7cd21638b4439701a8dcef9">saveCell</a> (<a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *, unsigned int mode)</td></tr>
@ -146,7 +138,9 @@ Static Public Member Functions</h2></td></tr>
<div class="textblock"><p>A Framework to work with Alliance formats. </p>
<p>The <a class="el" href="classCRL_1_1AllianceFramework.html" title="A Framework to work with Alliance formats. ">AllianceFramework</a> is also registered as <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Property.html">Hurricane::Property</a> on the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1DataBase.html">Hurricane::DataBase</a>. </p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a class="anchor" id="a03ef94e043d2d25eb7a6a5f1ae176432"></a>
<a id="a03ef94e043d2d25eb7a6a5f1ae176432"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a03ef94e043d2d25eb7a6a5f1ae176432">&#9670;&nbsp;</a></span>InstancesCountFlags</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -157,17 +151,17 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Flags to control the way <a class="el" href="classCRL_1_1AllianceFramework.html#a95aa8c6b8ab3f995daf22a0317324933">AllianceFramework::getInstancesCount()</a> work. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a03ef94e043d2d25eb7a6a5f1ae176432a3c65ebdaecc4b34b54a01ff3a5c3195a"></a>Recursive</em>&nbsp;</td><td class="fielddoc">
<p>Account the instances down to the leaf cells. </p>
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a03ef94e043d2d25eb7a6a5f1ae176432a3c65ebdaecc4b34b54a01ff3a5c3195a"></a>Recursive&#160;</td><td class="fielddoc"><p>Account the instances down to the leaf cells. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a03ef94e043d2d25eb7a6a5f1ae176432a4a10630340ffb5b0aa9983f8b7f4cbe0"></a>IgnoreFeeds</em>&nbsp;</td><td class="fielddoc">
<p>Don't count feed cells. </p>
<tr><td class="fieldname"><a id="a03ef94e043d2d25eb7a6a5f1ae176432a4a10630340ffb5b0aa9983f8b7f4cbe0"></a>IgnoreFeeds&#160;</td><td class="fielddoc"><p>Don't count feed cells. </p>
</td></tr>
</table>
</div>
</div>
<a class="anchor" id="a0ec1cd09dec34dfecfec22927b92cc25"></a>
<a id="a0ec1cd09dec34dfecfec22927b92cc25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0ec1cd09dec34dfecfec22927b92cc25">&#9670;&nbsp;</a></span>LibraryFlags</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -178,18 +172,18 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Flags to control Library creation. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a0ec1cd09dec34dfecfec22927b92cc25ade58398b3ec849dc3aedb6a0812fbc7a"></a>CreateLibrary</em>&nbsp;</td><td class="fielddoc">
<p>Ask to create a library if it doesn't exists. </p>
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a0ec1cd09dec34dfecfec22927b92cc25ade58398b3ec849dc3aedb6a0812fbc7a"></a>CreateLibrary&#160;</td><td class="fielddoc"><p>Ask to create a library if it doesn't exists. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a0ec1cd09dec34dfecfec22927b92cc25a8d9678631764327cbfe81f8184fa9e05"></a>HasCatalog</em>&nbsp;</td><td class="fielddoc">
<p>This flag is set if the CATALOG file metadata is present in the library directory. </p>
<tr><td class="fieldname"><a id="a0ec1cd09dec34dfecfec22927b92cc25a8d9678631764327cbfe81f8184fa9e05"></a>HasCatalog&#160;</td><td class="fielddoc"><p>This flag is set if the CATALOG file metadata is present in the library directory. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a8cff32ced8cc163cadca885d8ed8a5fc"></a>
<a id="a8cff32ced8cc163cadca885d8ed8a5fc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8cff32ced8cc163cadca885d8ed8a5fc">&#9670;&nbsp;</a></span>create()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -214,7 +208,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a7877a201b66f2ade7621810acd842f47"></a>
<a id="a7877a201b66f2ade7621810acd842f47"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7877a201b66f2ade7621810acd842f47">&#9670;&nbsp;</a></span>destroy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -230,7 +226,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a976479af696a86c998c10d9d2604839d"></a>
<a id="a976479af696a86c998c10d9d2604839d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a976479af696a86c998c10d9d2604839d">&#9670;&nbsp;</a></span>get()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -254,7 +252,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a5992ef0669bfdefc4d712db9369bfb81"></a>
<a id="ab142ba712b0e6388e45bb8d2fa05d93e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab142ba712b0e6388e45bb8d2fa05d93e">&#9670;&nbsp;</a></span>getPrint()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -270,7 +270,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="adc7dc5aa7e84b1fd94bc4a29bc6260e1"></a>
<a id="adc7dc5aa7e84b1fd94bc4a29bc6260e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc7dc5aa7e84b1fd94bc4a29bc6260e1">&#9670;&nbsp;</a></span>isPOWER()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -295,7 +297,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0dcd1a667226f37353fdf0ea232d9c5d"></a>
<a id="a0dcd1a667226f37353fdf0ea232d9c5d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0dcd1a667226f37353fdf0ea232d9c5d">&#9670;&nbsp;</a></span>isGROUND()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -320,7 +324,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a79ae573b6b685c1796e29ccc15c1c146"></a>
<a id="a79ae573b6b685c1796e29ccc15c1c146"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a79ae573b6b685c1796e29ccc15c1c146">&#9670;&nbsp;</a></span>isCLOCK()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -345,7 +351,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa41d24d292c19624236fff250a28b102"></a>
<a id="aa41d24d292c19624236fff250a28b102"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa41d24d292c19624236fff250a28b102">&#9670;&nbsp;</a></span>isBLOCKAGE()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -370,7 +378,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0c48b5b15d769c6f17c4098dcaf46bcd"></a>
<a id="a0c48b5b15d769c6f17c4098dcaf46bcd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0c48b5b15d769c6f17c4098dcaf46bcd">&#9670;&nbsp;</a></span>isPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -395,7 +405,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8e044592d2ceaea0060aec5dc5cc6900"></a>
<a id="a8e044592d2ceaea0060aec5dc5cc6900"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e044592d2ceaea0060aec5dc5cc6900">&#9670;&nbsp;</a></span>getEnvironment()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -419,7 +431,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a036bd6fa8f837c81f60b9d424f817add"></a>
<a id="a036bd6fa8f837c81f60b9d424f817add"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a036bd6fa8f837c81f60b9d424f817add">&#9670;&nbsp;</a></span>getCatalog()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -443,7 +457,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9d2ad16894430081a00545d8fae952ed"></a>
<a id="a4f1d2d34c254ac596e8c4a408ef6ba43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4f1d2d34c254ac596e8c4a408ef6ba43">&#9670;&nbsp;</a></span>getParentLibraryName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -467,7 +483,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="afe822e9e04b613862aec5066743e1ffd"></a>
<a id="afe822e9e04b613862aec5066743e1ffd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afe822e9e04b613862aec5066743e1ffd">&#9670;&nbsp;</a></span>getParentLibrary()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -491,7 +509,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab6f9ac0f07b20c2444b13ef8bc55c9ea"></a>
<a id="ab6f9ac0f07b20c2444b13ef8bc55c9ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab6f9ac0f07b20c2444b13ef8bc55c9ea">&#9670;&nbsp;</a></span>getLibrary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -508,7 +528,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4085f3bc96ca5e4bf2d41a4ada9658f2"></a>
<a id="a4085f3bc96ca5e4bf2d41a4ada9658f2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4085f3bc96ca5e4bf2d41a4ada9658f2">&#9670;&nbsp;</a></span>getAllianceLibrary() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -525,7 +547,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8e007b3f2ac45feec2907f77530a718c"></a>
<a id="a8e007b3f2ac45feec2907f77530a718c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8e007b3f2ac45feec2907f77530a718c">&#9670;&nbsp;</a></span>getAllianceLibrary() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -542,7 +566,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4efc06e6a6d5413398946453c3fd6649"></a>
<a id="a4efc06e6a6d5413398946453c3fd6649"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4efc06e6a6d5413398946453c3fd6649">&#9670;&nbsp;</a></span>createLibrary()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -583,7 +609,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a5e5a3d137a2c141bf8984877b7f7d18a"></a>
<a id="a5e5a3d137a2c141bf8984877b7f7d18a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5e5a3d137a2c141bf8984877b7f7d18a">&#9670;&nbsp;</a></span>saveLibrary() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -600,7 +628,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="afe7a103d54e865511fd55af90eddcf4e"></a>
<a id="afe7a103d54e865511fd55af90eddcf4e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afe7a103d54e865511fd55af90eddcf4e">&#9670;&nbsp;</a></span>saveLibrary() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -617,7 +647,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae102d655820c5d0a29a0200c5e83d42c"></a>
<a id="ae102d655820c5d0a29a0200c5e83d42c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae102d655820c5d0a29a0200c5e83d42c">&#9670;&nbsp;</a></span>getRoutingGauge()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -635,7 +667,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa584786d09bbb2469923a181b6f8e0d4"></a>
<a id="ae2bf20fc92a4684bebdab666c68c8aab"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae2bf20fc92a4684bebdab666c68c8aab">&#9670;&nbsp;</a></span>getDefaultCGPinLayerName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -659,7 +693,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae182fd150c695fd24c1b10ddbc377b32"></a>
<a id="ae182fd150c695fd24c1b10ddbc377b32"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae182fd150c695fd24c1b10ddbc377b32">&#9670;&nbsp;</a></span>addRoutingGauge()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -676,7 +712,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aab16db33a0ce2e3bce5739f7cadb3d5a"></a>
<a id="aab16db33a0ce2e3bce5739f7cadb3d5a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab16db33a0ce2e3bce5739f7cadb3d5a">&#9670;&nbsp;</a></span>addCellGauge()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -693,7 +731,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a5f0b56b303c51af5ea5c1eb1096786dd"></a>
<a id="a329d04c188668968308108523d16e2be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a329d04c188668968308108523d16e2be">&#9670;&nbsp;</a></span>getCell()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -734,7 +774,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac4381ad0c3799d584ef3ea160846e2bb"></a>
<a id="ac4381ad0c3799d584ef3ea160846e2bb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4381ad0c3799d584ef3ea160846e2bb">&#9670;&nbsp;</a></span>createCell()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -768,7 +810,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="abb34a606c7cd21638b4439701a8dcef9"></a>
<a id="abb34a606c7cd21638b4439701a8dcef9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb34a606c7cd21638b4439701a8dcef9">&#9670;&nbsp;</a></span>saveCell()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -795,7 +839,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a2e43b1928a05eea4b2dc1fe0757e4865"></a>
<a id="a2e43b1928a05eea4b2dc1fe0757e4865"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2e43b1928a05eea4b2dc1fe0757e4865">&#9670;&nbsp;</a></span>loadLibraryCells() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -812,7 +858,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="adc8acedeb9daa37b4ab2dee0717835fa"></a>
<a id="adc8acedeb9daa37b4ab2dee0717835fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc8acedeb9daa37b4ab2dee0717835fa">&#9670;&nbsp;</a></span>loadLibraryCells() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -829,7 +877,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a95aa8c6b8ab3f995daf22a0317324933"></a>
<a id="a95aa8c6b8ab3f995daf22a0317324933"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95aa8c6b8ab3f995daf22a0317324933">&#9670;&nbsp;</a></span>getInstancesCount()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -873,7 +923,7 @@ Static Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1AllianceLibrary.html">AllianceLibrary</a></li> </ul>
@ -57,14 +49,14 @@
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html#ad7394ba603e21e655d4518795650f042">AllianceLibrary</a>()</td><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html">CRL::AllianceLibrary</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html#a1a0c9a0f2b74eaae859206e5338107a0">AllianceLibrary</a>(const Name &amp;path, Library *library=NULL)</td><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html">CRL::AllianceLibrary</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html#a555c2ca823587050b997ef3b31a510e6">getLibrary</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html">CRL::AllianceLibrary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html#ad663c361c6bf8eff7c56a68e3c977c21">getPath</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html">CRL::AllianceLibrary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html#abd54e8a070660030c6d2af8a239359b5">getLibrary</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html">CRL::AllianceLibrary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html#a3be21e668a6a01085df037989eacf6f8">getPath</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1AllianceLibrary.html">CRL::AllianceLibrary</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<br>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1AllianceLibrary.html">AllianceLibrary</a></li> </ul>
@ -65,16 +57,18 @@ Public Member Functions</h2></td></tr>
<tr class="separator:ad7394ba603e21e655d4518795650f042"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a0c9a0f2b74eaae859206e5338107a0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceLibrary.html#a1a0c9a0f2b74eaae859206e5338107a0">AllianceLibrary</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a> &amp;path, <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Library</a> *library=NULL)</td></tr>
<tr class="separator:a1a0c9a0f2b74eaae859206e5338107a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad663c361c6bf8eff7c56a68e3c977c21"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceLibrary.html#ad663c361c6bf8eff7c56a68e3c977c21">getPath</a> () const </td></tr>
<tr class="separator:ad663c361c6bf8eff7c56a68e3c977c21"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a555c2ca823587050b997ef3b31a510e6"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Library</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceLibrary.html#a555c2ca823587050b997ef3b31a510e6">getLibrary</a> () const </td></tr>
<tr class="separator:a555c2ca823587050b997ef3b31a510e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3be21e668a6a01085df037989eacf6f8"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceLibrary.html#a3be21e668a6a01085df037989eacf6f8">getPath</a> () const</td></tr>
<tr class="separator:a3be21e668a6a01085df037989eacf6f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abd54e8a070660030c6d2af8a239359b5"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Library</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1AllianceLibrary.html#abd54e8a070660030c6d2af8a239359b5">getLibrary</a> () const</td></tr>
<tr class="separator:abd54e8a070660030c6d2af8a239359b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>A small wrapper around <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Hurricane::Library</a>. </p>
<p>The <a class="el" href="classCRL_1_1AllianceLibrary.html" title="A small wrapper around Hurricane::Library. ">AllianceLibrary</a> simply adds the path from which the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Hurricane::Library</a> has been loaded. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="ad7394ba603e21e655d4518795650f042"></a>
<a id="ad7394ba603e21e655d4518795650f042"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad7394ba603e21e655d4518795650f042">&#9670;&nbsp;</a></span>AllianceLibrary() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -90,7 +84,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a1a0c9a0f2b74eaae859206e5338107a0"></a>
<a id="a1a0c9a0f2b74eaae859206e5338107a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1a0c9a0f2b74eaae859206e5338107a0">&#9670;&nbsp;</a></span>AllianceLibrary() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -118,7 +114,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="ad663c361c6bf8eff7c56a68e3c977c21"></a>
<a id="a3be21e668a6a01085df037989eacf6f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3be21e668a6a01085df037989eacf6f8">&#9670;&nbsp;</a></span>getPath()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -142,7 +140,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a555c2ca823587050b997ef3b31a510e6"></a>
<a id="abd54e8a070660030c6d2af8a239359b5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abd54e8a070660030c6d2af8a239359b5">&#9670;&nbsp;</a></span>getLibrary()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -175,7 +175,7 @@ Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1Banner.html">Banner</a></li> </ul>
@ -56,13 +48,13 @@
<p>This is the complete list of members for <a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#ab1648ee84ac8c3a8df32fe224e762322">Banner</a>(string name=&quot;&quot;, string version=&quot;&quot;, string purpose=&quot;&quot;, string date=&quot;&quot;, string authors=&quot;&quot;, string contributors=&quot;&quot;)</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a1d38857f50b38d664f2af2901dbbb584">getAuthors</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#aec611d9fbbc274fe59796ffc21d6f726">getContributors</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#afb230ff11133683ab6f133aa6e753ab8">getDate</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a3abb8f2ba75f4bf70b102dc5a081297e">getName</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a753b87c41ec0ebcd6d1f81f17848c2b2">getPurpose</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#aeda81fe941f2e04745c5b5b37dbbb73e">getScreenWidth</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a456dfe5c14576fe1625bace5c09f6019">getVersion</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#aa61a32222853ae9f4298302ca53788bc">getAuthors</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#aded1fb7c4ffd107c27b266287b1db0d2">getContributors</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a398db63bc8ce319d85e4d1245cbcce62">getDate</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a240b3f305516b17eff31f684d0a5c643">getName</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#aa9898c902b80eff41d549432136de3bc">getPurpose</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#af956943247d260a3ba9a9f9a696695dd">getScreenWidth</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a84e62c3376a111f7c16ee07b8cd05f59">getVersion</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a191a83c7b8e7e1ab907418d56656d836">setAuthors</a>(string authors)</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Banner.html#afa9171420263314ee5b465c36ecc0b73">setContributors</a>(string contributors)</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Banner.html#a4ae67d1e584a384e7320af6fadf5dcaa">setDate</a>(string date)</td><td class="entry"><a class="el" href="classCRL_1_1Banner.html">CRL::Banner</a></td><td class="entry"></td></tr>
@ -75,7 +67,7 @@
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1Banner.html">Banner</a></li> </ul>
@ -63,20 +55,20 @@
Public Member Functions</h2></td></tr>
<tr class="memitem:ab1648ee84ac8c3a8df32fe224e762322"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#ab1648ee84ac8c3a8df32fe224e762322">Banner</a> (string name=&quot;&quot;, string version=&quot;&quot;, string purpose=&quot;&quot;, string date=&quot;&quot;, string authors=&quot;&quot;, string contributors=&quot;&quot;)</td></tr>
<tr class="separator:ab1648ee84ac8c3a8df32fe224e762322"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3abb8f2ba75f4bf70b102dc5a081297e"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#a3abb8f2ba75f4bf70b102dc5a081297e">getName</a> () const </td></tr>
<tr class="separator:a3abb8f2ba75f4bf70b102dc5a081297e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a456dfe5c14576fe1625bace5c09f6019"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#a456dfe5c14576fe1625bace5c09f6019">getVersion</a> () const </td></tr>
<tr class="separator:a456dfe5c14576fe1625bace5c09f6019"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a753b87c41ec0ebcd6d1f81f17848c2b2"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#a753b87c41ec0ebcd6d1f81f17848c2b2">getPurpose</a> () const </td></tr>
<tr class="separator:a753b87c41ec0ebcd6d1f81f17848c2b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb230ff11133683ab6f133aa6e753ab8"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#afb230ff11133683ab6f133aa6e753ab8">getDate</a> () const </td></tr>
<tr class="separator:afb230ff11133683ab6f133aa6e753ab8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d38857f50b38d664f2af2901dbbb584"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#a1d38857f50b38d664f2af2901dbbb584">getAuthors</a> () const </td></tr>
<tr class="separator:a1d38857f50b38d664f2af2901dbbb584"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec611d9fbbc274fe59796ffc21d6f726"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#aec611d9fbbc274fe59796ffc21d6f726">getContributors</a> () const </td></tr>
<tr class="separator:aec611d9fbbc274fe59796ffc21d6f726"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeda81fe941f2e04745c5b5b37dbbb73e"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#aeda81fe941f2e04745c5b5b37dbbb73e">getScreenWidth</a> () const </td></tr>
<tr class="separator:aeda81fe941f2e04745c5b5b37dbbb73e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a240b3f305516b17eff31f684d0a5c643"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#a240b3f305516b17eff31f684d0a5c643">getName</a> () const</td></tr>
<tr class="separator:a240b3f305516b17eff31f684d0a5c643"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84e62c3376a111f7c16ee07b8cd05f59"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#a84e62c3376a111f7c16ee07b8cd05f59">getVersion</a> () const</td></tr>
<tr class="separator:a84e62c3376a111f7c16ee07b8cd05f59"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa9898c902b80eff41d549432136de3bc"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#aa9898c902b80eff41d549432136de3bc">getPurpose</a> () const</td></tr>
<tr class="separator:aa9898c902b80eff41d549432136de3bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a398db63bc8ce319d85e4d1245cbcce62"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#a398db63bc8ce319d85e4d1245cbcce62">getDate</a> () const</td></tr>
<tr class="separator:a398db63bc8ce319d85e4d1245cbcce62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa61a32222853ae9f4298302ca53788bc"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#aa61a32222853ae9f4298302ca53788bc">getAuthors</a> () const</td></tr>
<tr class="separator:aa61a32222853ae9f4298302ca53788bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aded1fb7c4ffd107c27b266287b1db0d2"><td class="memItemLeft" align="right" valign="top">const string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#aded1fb7c4ffd107c27b266287b1db0d2">getContributors</a> () const</td></tr>
<tr class="separator:aded1fb7c4ffd107c27b266287b1db0d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af956943247d260a3ba9a9f9a696695dd"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#af956943247d260a3ba9a9f9a696695dd">getScreenWidth</a> () const</td></tr>
<tr class="separator:af956943247d260a3ba9a9f9a696695dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9e99981d33eb609a1b8a9d2f36db7ee"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#af9e99981d33eb609a1b8a9d2f36db7ee">setName</a> (string name)</td></tr>
<tr class="separator:af9e99981d33eb609a1b8a9d2f36db7ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab47057fcc6d9fb9bca0ebbeae232f738"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Banner.html#ab47057fcc6d9fb9bca0ebbeae232f738">setVersion</a> (string version)</td></tr>
@ -94,8 +86,7 @@ Public Member Functions</h2></td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Print Formatted Banners (on ttys). </p>
<p>Display a traditionnal UNIX like banner for tty: </p>
<pre class="fragment"> @
<p>Display a traditionnal UNIX like banner for tty: </p><pre class="fragment"> @
@@
@@@ @@@@@@ @@
@@ @@ @@ @@ @@@@@@@@
@ -115,7 +106,9 @@ Public Member Functions</h2></td></tr>
Author(s): Jean-Paul Chaput
E-mail: alliance-users@asim.lip6.fr
</pre> </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="ab1648ee84ac8c3a8df32fe224e762322"></a>
<a id="ab1648ee84ac8c3a8df32fe224e762322"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab1648ee84ac8c3a8df32fe224e762322">&#9670;&nbsp;</a></span>Banner()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -178,7 +171,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a3abb8f2ba75f4bf70b102dc5a081297e"></a>
<a id="a240b3f305516b17eff31f684d0a5c643"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a240b3f305516b17eff31f684d0a5c643">&#9670;&nbsp;</a></span>getName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -202,7 +197,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a456dfe5c14576fe1625bace5c09f6019"></a>
<a id="a84e62c3376a111f7c16ee07b8cd05f59"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84e62c3376a111f7c16ee07b8cd05f59">&#9670;&nbsp;</a></span>getVersion()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -226,7 +223,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a753b87c41ec0ebcd6d1f81f17848c2b2"></a>
<a id="aa9898c902b80eff41d549432136de3bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa9898c902b80eff41d549432136de3bc">&#9670;&nbsp;</a></span>getPurpose()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -250,7 +249,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="afb230ff11133683ab6f133aa6e753ab8"></a>
<a id="a398db63bc8ce319d85e4d1245cbcce62"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a398db63bc8ce319d85e4d1245cbcce62">&#9670;&nbsp;</a></span>getDate()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -274,7 +275,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a1d38857f50b38d664f2af2901dbbb584"></a>
<a id="aa61a32222853ae9f4298302ca53788bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa61a32222853ae9f4298302ca53788bc">&#9670;&nbsp;</a></span>getAuthors()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -298,7 +301,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aec611d9fbbc274fe59796ffc21d6f726"></a>
<a id="aded1fb7c4ffd107c27b266287b1db0d2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aded1fb7c4ffd107c27b266287b1db0d2">&#9670;&nbsp;</a></span>getContributors()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -322,7 +327,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aeda81fe941f2e04745c5b5b37dbbb73e"></a>
<a id="af956943247d260a3ba9a9f9a696695dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af956943247d260a3ba9a9f9a696695dd">&#9670;&nbsp;</a></span>getScreenWidth()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -346,7 +353,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="af9e99981d33eb609a1b8a9d2f36db7ee"></a>
<a id="af9e99981d33eb609a1b8a9d2f36db7ee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9e99981d33eb609a1b8a9d2f36db7ee">&#9670;&nbsp;</a></span>setName()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -363,7 +372,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab47057fcc6d9fb9bca0ebbeae232f738"></a>
<a id="ab47057fcc6d9fb9bca0ebbeae232f738"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab47057fcc6d9fb9bca0ebbeae232f738">&#9670;&nbsp;</a></span>setVersion()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -380,7 +391,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9c6bee971231044f417aaac312abcb61"></a>
<a id="a9c6bee971231044f417aaac312abcb61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9c6bee971231044f417aaac312abcb61">&#9670;&nbsp;</a></span>setPurpose()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -397,7 +410,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4ae67d1e584a384e7320af6fadf5dcaa"></a>
<a id="a4ae67d1e584a384e7320af6fadf5dcaa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4ae67d1e584a384e7320af6fadf5dcaa">&#9670;&nbsp;</a></span>setDate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -414,7 +429,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a191a83c7b8e7e1ab907418d56656d836"></a>
<a id="a191a83c7b8e7e1ab907418d56656d836"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a191a83c7b8e7e1ab907418d56656d836">&#9670;&nbsp;</a></span>setAuthors()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -431,7 +448,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="afa9171420263314ee5b465c36ecc0b73"></a>
<a id="afa9171420263314ee5b465c36ecc0b73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa9171420263314ee5b465c36ecc0b73">&#9670;&nbsp;</a></span>setContributors()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -448,7 +467,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a8053cc6071f261e781cc1e8157eef820"></a>
<a id="a8053cc6071f261e781cc1e8157eef820"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8053cc6071f261e781cc1e8157eef820">&#9670;&nbsp;</a></span>setScreenWidth()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -474,7 +495,7 @@ Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1Catalog.html">Catalog</a></li> </ul>
@ -68,7 +60,7 @@
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1Catalog.html">Catalog</a></li> </ul>
@ -63,7 +55,7 @@
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html">State</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An entry to store the Cell <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">State</a> in the <a class="el" href="classCRL_1_1Catalog.html" title="A Registry to store Alliance Cell metadatas. ">Catalog</a>. <a href="classCRL_1_1Catalog_1_1State.html#details">More...</a><br/></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An entry to store the Cell <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">State</a> in the <a class="el" href="classCRL_1_1Catalog.html" title="A Registry to store Alliance Cell metadatas. ">Catalog</a>. <a href="classCRL_1_1Catalog_1_1State.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
@ -89,7 +81,9 @@ Public Member Functions</h2></td></tr>
<div class="textblock"><p>A Registry to store Alliance Cell metadatas. </p>
<p>The <a class="el" href="classCRL_1_1Catalog.html" title="A Registry to store Alliance Cell metadatas. ">Catalog</a> is built from the various CATAL files from the library directories and enriched with the current state of Cell in the database. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a6682f773880c7ca16bdca79057a08e6b"></a>
<a id="a6682f773880c7ca16bdca79057a08e6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6682f773880c7ca16bdca79057a08e6b">&#9670;&nbsp;</a></span>Catalog()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -113,7 +107,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a3ad457a2bf6246c3a1d9c3a4730c2696"></a>
<a id="a3ad457a2bf6246c3a1d9c3a4730c2696"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ad457a2bf6246c3a1d9c3a4730c2696">&#9670;&nbsp;</a></span>~Catalog()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -130,7 +126,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a5b04db2b2179d70212dd1b12daa903f9"></a>
<a id="a5b04db2b2179d70212dd1b12daa903f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b04db2b2179d70212dd1b12daa903f9">&#9670;&nbsp;</a></span>getState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -157,7 +155,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="afe3ea2153684ed8df029ee896cef6608"></a>
<a id="afe3ea2153684ed8df029ee896cef6608"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afe3ea2153684ed8df029ee896cef6608">&#9670;&nbsp;</a></span>mergeState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -184,7 +184,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ada5b55e7926764fc9c7f5b7d4e6c2cdc"></a>
<a id="ada5b55e7926764fc9c7f5b7d4e6c2cdc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ada5b55e7926764fc9c7f5b7d4e6c2cdc">&#9670;&nbsp;</a></span>deleteState()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -202,7 +204,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa40bdbaf5b64f56b085bfce72dc89fe6"></a>
<a id="aa40bdbaf5b64f56b085bfce72dc89fe6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa40bdbaf5b64f56b085bfce72dc89fe6">&#9670;&nbsp;</a></span>clear()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -218,7 +222,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a02ae9d3636235db933a29c08329c5778"></a>
<a id="a02ae9d3636235db933a29c08329c5778"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a02ae9d3636235db933a29c08329c5778">&#9670;&nbsp;</a></span>loadFromFile()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -251,7 +257,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a3e326d2515c01af4fc75e421a3b61a81"></a>
<a id="a3e326d2515c01af4fc75e421a3b61a81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e326d2515c01af4fc75e421a3b61a81">&#9670;&nbsp;</a></span>getStates()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -284,7 +292,7 @@ Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1CatalogExtension.html">CatalogExtension</a></li> </ul>
@ -56,7 +48,7 @@
<p>This is the complete list of members for <a class="el" href="classCRL_1_1CatalogExtension.html">CRL::CatalogExtension</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html#ae4f8d30cf08796b62422546c05526d86">getDepth</a>(const Cell *)</td><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html">CRL::CatalogExtension</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html#a56af8791146665dab3f0f0f33317ac82">getFlags</a>(const Cell *, unsigned int mask=(unsigned int)-1)</td><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html">CRL::CatalogExtension</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html#a9525c2253aa310a63de32caaeb694e66">getFlags</a>(const Cell *, unsigned int mask=(unsigned int) -1)</td><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html">CRL::CatalogExtension</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html#a6681f9fbe64998a27fe532fd3591afc7">getLibrary</a>(const Cell *)</td><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html">CRL::CatalogExtension</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html#a90e941d2349f5a0f4f7fefb41b434b0a">isDelete</a>(const Cell *)</td><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html">CRL::CatalogExtension</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html#a5feda5d6fba490a71e3742361ec7b4a1">isFeed</a>(const Cell *)</td><td class="entry"><a class="el" href="classCRL_1_1CatalogExtension.html">CRL::CatalogExtension</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
@ -79,7 +71,7 @@
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1CatalogExtension.html">CatalogExtension</a></li> </ul>
@ -75,8 +67,8 @@ Static Public Member Functions</h2></td></tr>
<tr class="separator:a3af53ef4a7fa512a079adbcb68677e2f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a558c506a28d2230e592080dccbcca380"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1CatalogExtension.html#a558c506a28d2230e592080dccbcca380">isLogical</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *)</td></tr>
<tr class="separator:a558c506a28d2230e592080dccbcca380"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56af8791146665dab3f0f0f33317ac82"><td class="memItemLeft" align="right" valign="top">static unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1CatalogExtension.html#a56af8791146665dab3f0f0f33317ac82">getFlags</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *, unsigned int mask=(unsigned int)-1)</td></tr>
<tr class="separator:a56af8791146665dab3f0f0f33317ac82"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9525c2253aa310a63de32caaeb694e66"><td class="memItemLeft" align="right" valign="top">static unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1CatalogExtension.html#a9525c2253aa310a63de32caaeb694e66">getFlags</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *, unsigned int mask=(unsigned int) -1)</td></tr>
<tr class="separator:a9525c2253aa310a63de32caaeb694e66"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9475735032d500f4d4a8cf980864b3e"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1CatalogExtension.html#ab9475735032d500f4d4a8cf980864b3e">setFlags</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *, unsigned int mask, bool value)</td></tr>
<tr class="separator:ab9475735032d500f4d4a8cf980864b3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00772e9c455d0e44caf132ee724b958d"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1CatalogExtension.html#a00772e9c455d0e44caf132ee724b958d">setFlattenLeaf</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *, bool value)</td></tr>
@ -104,7 +96,9 @@ Static Public Member Functions</h2></td></tr>
<div class="textblock"><p>Wrapper to access a <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">Catalog::State</a>. </p>
<p><a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">Catalog::State</a> are stored inside the <a class="el" href="classCRL_1_1AllianceFramework.html" title="A Framework to work with Alliance formats. ">AllianceFramework</a> <a class="el" href="classCRL_1_1Catalog.html" title="A Registry to store Alliance Cell metadatas. ">Catalog</a> but also linked in a Property on the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> for easier access. The <a class="el" href="classCRL_1_1CatalogExtension.html" title="Wrapper to access a Hurricane::Cell Catalog::State. ">CatalogExtension</a> is a small wrapper around the Property mechanism to allow a simpler access. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="af6487fb6007e34163773d8e8d15013a1"></a>
<a id="af6487fb6007e34163773d8e8d15013a1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af6487fb6007e34163773d8e8d15013a1">&#9670;&nbsp;</a></span>isFlattenLeaf()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -127,11 +121,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell has no more instances (leaf cell). </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#adb5dc909651479a6556a1f478d585552">CRL::Catalog::State::isFlattenLeaf()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a14f0d3b8c2e62ad51c78cb8cac4ebbf6">CRL::Catalog::State::isFlattenLeaf()</a>.</p>
</div>
</div>
<a class="anchor" id="a5feda5d6fba490a71e3742361ec7b4a1"></a>
<a id="a5feda5d6fba490a71e3742361ec7b4a1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5feda5d6fba490a71e3742361ec7b4a1">&#9670;&nbsp;</a></span>isFeed()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -154,11 +150,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell is a feed-through. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#aab39e2bb6a238a4ae3a82ab8ac4f0593">CRL::Catalog::State::isFeed()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a53c89121d49a7fc9f8a09093a35d32c4">CRL::Catalog::State::isFeed()</a>.</p>
</div>
</div>
<a class="anchor" id="a2695acabeac2f224fa4ac3a9563aeee9"></a>
<a id="a2695acabeac2f224fa4ac3a9563aeee9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2695acabeac2f224fa4ac3a9563aeee9">&#9670;&nbsp;</a></span>isPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -181,11 +179,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell is a pad. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#ae0f83319e1de5609e1f429c048dab8bb">CRL::Catalog::State::isPad()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a457e8dcf1928e6df40ec9f686350c2d0">CRL::Catalog::State::isPad()</a>.</p>
</div>
</div>
<a class="anchor" id="a37c8d304e7386ee31b73c826cb929e5f"></a>
<a id="a37c8d304e7386ee31b73c826cb929e5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a37c8d304e7386ee31b73c826cb929e5f">&#9670;&nbsp;</a></span>isGds()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -208,11 +208,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell is drawn in real layer (i.e. not a symbolic layout, but a GDS). </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#ab8f45372b46f9db7855ee98eefdbd5ad">CRL::Catalog::State::isGds()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a7af8d732bf9cea0b0ddb4eca3b0528ec">CRL::Catalog::State::isGds()</a>.</p>
</div>
</div>
<a class="anchor" id="a90e941d2349f5a0f4f7fefb41b434b0a"></a>
<a id="a90e941d2349f5a0f4f7fefb41b434b0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a90e941d2349f5a0f4f7fefb41b434b0a">&#9670;&nbsp;</a></span>isDelete()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -235,11 +237,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell has been deleted from memory. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a860d0ec35b5350f7e70ed30dc999b6dc">CRL::Catalog::State::isDelete()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#ac6df038ecb133b973f9b9f2a5e858ca5">CRL::Catalog::State::isDelete()</a>.</p>
</div>
</div>
<a class="anchor" id="a3af53ef4a7fa512a079adbcb68677e2f"></a>
<a id="a3af53ef4a7fa512a079adbcb68677e2f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3af53ef4a7fa512a079adbcb68677e2f">&#9670;&nbsp;</a></span>isPhysical()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -262,11 +266,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell posseses a physical view (layout). </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a39c92430456ac8be2ec80310e78170aa">CRL::Catalog::State::isPhysical()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a72b60d86f25221fd8fe7a5902be528a2">CRL::Catalog::State::isPhysical()</a>.</p>
</div>
</div>
<a class="anchor" id="a558c506a28d2230e592080dccbcca380"></a>
<a id="a558c506a28d2230e592080dccbcca380"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a558c506a28d2230e592080dccbcca380">&#9670;&nbsp;</a></span>isLogical()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -289,11 +295,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell posseses a logical view (netlist). </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a084e955d5b7132b0f739951ca82fbb4a">CRL::Catalog::State::isLogical()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a07aad28830a57090cf9203b0ff8714b1">CRL::Catalog::State::isLogical()</a>.</p>
</div>
</div>
<a class="anchor" id="a56af8791146665dab3f0f0f33317ac82"></a>
<a id="a9525c2253aa310a63de32caaeb694e66"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9525c2253aa310a63de32caaeb694e66">&#9670;&nbsp;</a></span>getFlags()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -326,11 +334,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> the requested flags states (selected by <code>mask</code>, all of them by default). </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#ac6ec60080ed8b5121be6eb74d12361bd">CRL::Catalog::State::getFlags()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a80ac3efddd043ec7151680755cc3db42">CRL::Catalog::State::getFlags()</a>.</p>
</div>
</div>
<a class="anchor" id="ab9475735032d500f4d4a8cf980864b3e"></a>
<a id="ab9475735032d500f4d4a8cf980864b3e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9475735032d500f4d4a8cf980864b3e">&#9670;&nbsp;</a></span>setFlags()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -370,11 +380,13 @@ Static Public Member Functions</h2></td></tr>
<p><b>Returns:</b> <b>true</b> if at least one flag of the indicated by mask is set. (dubious usefulness).</p>
<p><code>mask</code> is used to designate the bits of the flags on which we are going to operate. If <code>value</code> is <b>true</b>, then the bits are sets and if <code>value</code> is <b>false</b> they are reset. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a73a3866e9da359611638b2d725a79613">CRL::Catalog::State::setFlags()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a73a3866e9da359611638b2d725a79613">CRL::Catalog::State::setFlags()</a>.</p>
</div>
</div>
<a class="anchor" id="a00772e9c455d0e44caf132ee724b958d"></a>
<a id="a00772e9c455d0e44caf132ee724b958d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a00772e9c455d0e44caf132ee724b958d">&#9670;&nbsp;</a></span>setFlattenLeaf()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -407,11 +419,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the FlattenLeaf flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a4fba9a5ea27f5a36e41f0246124a3095">CRL::Catalog::State::setFlattenLeaf()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a4fba9a5ea27f5a36e41f0246124a3095">CRL::Catalog::State::setFlattenLeaf()</a>.</p>
</div>
</div>
<a class="anchor" id="ab82e4b139ca636feaca5d97836891b68"></a>
<a id="ab82e4b139ca636feaca5d97836891b68"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab82e4b139ca636feaca5d97836891b68">&#9670;&nbsp;</a></span>setFeed()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -444,11 +458,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Feed flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#ab5936e80369947177be88c3d770f4725">CRL::Catalog::State::setFeed()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#ab5936e80369947177be88c3d770f4725">CRL::Catalog::State::setFeed()</a>.</p>
</div>
</div>
<a class="anchor" id="afceda0d184ed2964e160b563a216bc35"></a>
<a id="afceda0d184ed2964e160b563a216bc35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afceda0d184ed2964e160b563a216bc35">&#9670;&nbsp;</a></span>setPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -481,11 +497,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Pad flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a97e2158809ed0e88237bb92eb8daa290">CRL::Catalog::State::setPad()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a97e2158809ed0e88237bb92eb8daa290">CRL::Catalog::State::setPad()</a>.</p>
</div>
</div>
<a class="anchor" id="a6c440bfd5ac56c9e07213c1347f0610a"></a>
<a id="a6c440bfd5ac56c9e07213c1347f0610a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6c440bfd5ac56c9e07213c1347f0610a">&#9670;&nbsp;</a></span>setGds()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -518,11 +536,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Gds flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#acc0c819f382393dc780bb19c7788b216">CRL::Catalog::State::setGds()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#acc0c819f382393dc780bb19c7788b216">CRL::Catalog::State::setGds()</a>.</p>
</div>
</div>
<a class="anchor" id="a8a5bdbfb8c898f8ea00c8718c6714983"></a>
<a id="a8a5bdbfb8c898f8ea00c8718c6714983"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8a5bdbfb8c898f8ea00c8718c6714983">&#9670;&nbsp;</a></span>setDelete()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -555,11 +575,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Delete flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a53873a1a42083389dfae02b46b3f2de3">CRL::Catalog::State::setDelete()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a53873a1a42083389dfae02b46b3f2de3">CRL::Catalog::State::setDelete()</a>.</p>
</div>
</div>
<a class="anchor" id="ae3de9795e0ddce5a767cf53d79fec077"></a>
<a id="ae3de9795e0ddce5a767cf53d79fec077"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae3de9795e0ddce5a767cf53d79fec077">&#9670;&nbsp;</a></span>setPhysical()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -592,11 +614,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Physical flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a85a091727c8e7de2b16d01088324de0d">CRL::Catalog::State::setPhysical()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a85a091727c8e7de2b16d01088324de0d">CRL::Catalog::State::setPhysical()</a>.</p>
</div>
</div>
<a class="anchor" id="a9609c756887f433fe9b250e32ff1ae0a"></a>
<a id="a9609c756887f433fe9b250e32ff1ae0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9609c756887f433fe9b250e32ff1ae0a">&#9670;&nbsp;</a></span>setLogical()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -629,11 +653,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Logical flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#af41327abeb4e7646ef5cafabe8eeabd0">CRL::Catalog::State::setLogical()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#af41327abeb4e7646ef5cafabe8eeabd0">CRL::Catalog::State::setLogical()</a>.</p>
</div>
</div>
<a class="anchor" id="a6681f9fbe64998a27fe532fd3591afc7"></a>
<a id="a6681f9fbe64998a27fe532fd3591afc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6681f9fbe64998a27fe532fd3591afc7">&#9670;&nbsp;</a></span>getLibrary()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -656,11 +682,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> the associated <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Hurricane::Library</a>. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a9181d84d102ce74e640e5f3c558191ce">CRL::Catalog::State::getLibrary()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a89dad78f1829b1ee3177f61e2f73d6c6">CRL::Catalog::State::getLibrary()</a>.</p>
</div>
</div>
<a class="anchor" id="ae4f8d30cf08796b62422546c05526d86"></a>
<a id="ae4f8d30cf08796b62422546c05526d86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4f8d30cf08796b62422546c05526d86">&#9670;&nbsp;</a></span>getDepth()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -683,11 +711,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> the hierarchical depth of the Cell. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a5b7fbd21f95bdb6ae1cf4b833c9c9729">CRL::Catalog::State::getDepth()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a0232ad6dcfda1e2801f788deaad83e08">CRL::Catalog::State::getDepth()</a>.</p>
</div>
</div>
<a class="anchor" id="a6ef1b96f9bbbe39e13a5aba073f2394c"></a>
<a id="a6ef1b96f9bbbe39e13a5aba073f2394c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ef1b96f9bbbe39e13a5aba073f2394c">&#9670;&nbsp;</a></span>setLibrary()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -720,7 +750,7 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Library field. Returns the newly affected Library. </p>
<p>References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a821ac2ae33f0045232cab612ab12f84b">CRL::Catalog::State::setLibrary()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1Catalog_1_1State.html#a821ac2ae33f0045232cab612ab12f84b">CRL::Catalog::State::setLibrary()</a>.</p>
</div>
</div>
@ -733,7 +763,7 @@ Static Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1Catalog.html">Catalog</a></li><li class="navelem"><a class="el" href="classCRL_1_1Catalog_1_1State.html">State</a></li> </ul>
@ -60,18 +52,18 @@
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74">Flags</a> enum name</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a496651784f48e1dc9690ff484f90477c">FlattenLeaf</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a98da2efe9c180f68f009836d1179cc4a">GDS</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a09c92d08796c465ce5e3a3af56867b8d">getCell</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a5b7fbd21f95bdb6ae1cf4b833c9c9729">getDepth</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ac6ec60080ed8b5121be6eb74d12361bd">getFlags</a>(unsigned int mask=(unsigned int)-1) const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a9181d84d102ce74e640e5f3c558191ce">getLibrary</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a0cc5ef54176f8207ef4e723eed62c35e">getCell</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a0232ad6dcfda1e2801f788deaad83e08">getDepth</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a80ac3efddd043ec7151680755cc3db42">getFlags</a>(unsigned int mask=(unsigned int) -1) const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a89dad78f1829b1ee3177f61e2f73d6c6">getLibrary</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a1f8f15ecd43109bcc463970d8acc03fd">InMemory</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a860d0ec35b5350f7e70ed30dc999b6dc">isDelete</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#aab39e2bb6a238a4ae3a82ab8ac4f0593">isFeed</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#adb5dc909651479a6556a1f478d585552">isFlattenLeaf</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ab8f45372b46f9db7855ee98eefdbd5ad">isGds</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a084e955d5b7132b0f739951ca82fbb4a">isLogical</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ae0f83319e1de5609e1f429c048dab8bb">isPad</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a39c92430456ac8be2ec80310e78170aa">isPhysical</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ac6df038ecb133b973f9b9f2a5e858ca5">isDelete</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a53c89121d49a7fc9f8a09093a35d32c4">isFeed</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a14f0d3b8c2e62ad51c78cb8cac4ebbf6">isFlattenLeaf</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a7af8d732bf9cea0b0ddb4eca3b0528ec">isGds</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a07aad28830a57090cf9203b0ff8714b1">isLogical</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a457e8dcf1928e6df40ec9f686350c2d0">isPad</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a72b60d86f25221fd8fe7a5902be528a2">isPhysical</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a39170df01b13e1845db6eef82cc41b33">Logical</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a41fde67f1b88de06cae113a0d8108f25">merge</a>(const State &amp;other)</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a2e2b8b775bb6e8d8d12500426a01e38b">Pad</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1Catalog_1_1State.html">CRL::Catalog::State</a></td><td class="entry"></td></tr>
@ -94,7 +86,7 @@
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1Catalog.html">Catalog</a></li><li class="navelem"><a class="el" href="classCRL_1_1Catalog_1_1State.html">State</a></li> </ul>
@ -62,25 +54,25 @@
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a625003526d38ac7500b4ad7de35e2d74"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74">Flags</a> { <br/>
<tr class="memitem:a625003526d38ac7500b4ad7de35e2d74"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74">Flags</a> { <br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a496651784f48e1dc9690ff484f90477c">FlattenLeaf</a> = 1 &lt;&lt; 0,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a2b7599c1303429830c8d3e6b673b3cb1">Feed</a> = 1 &lt;&lt; 1,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a2e2b8b775bb6e8d8d12500426a01e38b">Pad</a> = 1 &lt;&lt; 2,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a98da2efe9c180f68f009836d1179cc4a">GDS</a> = 1 &lt;&lt; 3,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74ae8f1bee3750e1fa0c1d8097a28ee49da">Delete</a> = 1 &lt;&lt; 4,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a39170df01b13e1845db6eef82cc41b33">Logical</a> = 1 &lt;&lt; 5,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74ae166fbe3aa47f42ea93b2624b2ffed7d">Physical</a> = 1 &lt;&lt; 6,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a1f8f15ecd43109bcc463970d8acc03fd">InMemory</a> = 1 &lt;&lt; 7
, <br/>
, <br />
&#160;&#160;<a class="el" href="classCRL_1_1Catalog_1_1State.html#a625003526d38ac7500b4ad7de35e2d74a6b88bbc27f9989a35a1e00772e157b35">Views</a> = Physical|Logical
<br/>
<br />
}</td></tr>
<tr class="separator:a625003526d38ac7500b4ad7de35e2d74"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
@ -90,22 +82,22 @@ Public Member Functions</h2></td></tr>
<tr class="separator:a97e69ca85c09942e20d41013b8ff5280"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae25003eae8262a994fba979f28c35aed"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ae25003eae8262a994fba979f28c35aed">~State</a> ()</td></tr>
<tr class="separator:ae25003eae8262a994fba979f28c35aed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb5dc909651479a6556a1f478d585552"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#adb5dc909651479a6556a1f478d585552">isFlattenLeaf</a> () const </td></tr>
<tr class="separator:adb5dc909651479a6556a1f478d585552"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab39e2bb6a238a4ae3a82ab8ac4f0593"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#aab39e2bb6a238a4ae3a82ab8ac4f0593">isFeed</a> () const </td></tr>
<tr class="separator:aab39e2bb6a238a4ae3a82ab8ac4f0593"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0f83319e1de5609e1f429c048dab8bb"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ae0f83319e1de5609e1f429c048dab8bb">isPad</a> () const </td></tr>
<tr class="separator:ae0f83319e1de5609e1f429c048dab8bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8f45372b46f9db7855ee98eefdbd5ad"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ab8f45372b46f9db7855ee98eefdbd5ad">isGds</a> () const </td></tr>
<tr class="separator:ab8f45372b46f9db7855ee98eefdbd5ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a860d0ec35b5350f7e70ed30dc999b6dc"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a860d0ec35b5350f7e70ed30dc999b6dc">isDelete</a> () const </td></tr>
<tr class="separator:a860d0ec35b5350f7e70ed30dc999b6dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a39c92430456ac8be2ec80310e78170aa"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a39c92430456ac8be2ec80310e78170aa">isPhysical</a> () const </td></tr>
<tr class="separator:a39c92430456ac8be2ec80310e78170aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a084e955d5b7132b0f739951ca82fbb4a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a084e955d5b7132b0f739951ca82fbb4a">isLogical</a> () const </td></tr>
<tr class="separator:a084e955d5b7132b0f739951ca82fbb4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6ec60080ed8b5121be6eb74d12361bd"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ac6ec60080ed8b5121be6eb74d12361bd">getFlags</a> (unsigned int mask=(unsigned int)-1) const </td></tr>
<tr class="separator:ac6ec60080ed8b5121be6eb74d12361bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14f0d3b8c2e62ad51c78cb8cac4ebbf6"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a14f0d3b8c2e62ad51c78cb8cac4ebbf6">isFlattenLeaf</a> () const</td></tr>
<tr class="separator:a14f0d3b8c2e62ad51c78cb8cac4ebbf6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53c89121d49a7fc9f8a09093a35d32c4"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a53c89121d49a7fc9f8a09093a35d32c4">isFeed</a> () const</td></tr>
<tr class="separator:a53c89121d49a7fc9f8a09093a35d32c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a457e8dcf1928e6df40ec9f686350c2d0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a457e8dcf1928e6df40ec9f686350c2d0">isPad</a> () const</td></tr>
<tr class="separator:a457e8dcf1928e6df40ec9f686350c2d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7af8d732bf9cea0b0ddb4eca3b0528ec"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a7af8d732bf9cea0b0ddb4eca3b0528ec">isGds</a> () const</td></tr>
<tr class="separator:a7af8d732bf9cea0b0ddb4eca3b0528ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6df038ecb133b973f9b9f2a5e858ca5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#ac6df038ecb133b973f9b9f2a5e858ca5">isDelete</a> () const</td></tr>
<tr class="separator:ac6df038ecb133b973f9b9f2a5e858ca5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a72b60d86f25221fd8fe7a5902be528a2"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a72b60d86f25221fd8fe7a5902be528a2">isPhysical</a> () const</td></tr>
<tr class="separator:a72b60d86f25221fd8fe7a5902be528a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a07aad28830a57090cf9203b0ff8714b1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a07aad28830a57090cf9203b0ff8714b1">isLogical</a> () const</td></tr>
<tr class="separator:a07aad28830a57090cf9203b0ff8714b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80ac3efddd043ec7151680755cc3db42"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a80ac3efddd043ec7151680755cc3db42">getFlags</a> (unsigned int mask=(unsigned int) -1) const</td></tr>
<tr class="separator:a80ac3efddd043ec7151680755cc3db42"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a73a3866e9da359611638b2d725a79613"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a73a3866e9da359611638b2d725a79613">setFlags</a> (unsigned int mask, bool value)</td></tr>
<tr class="separator:a73a3866e9da359611638b2d725a79613"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4fba9a5ea27f5a36e41f0246124a3095"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a4fba9a5ea27f5a36e41f0246124a3095">setFlattenLeaf</a> (bool value)</td></tr>
@ -122,12 +114,12 @@ Public Member Functions</h2></td></tr>
<tr class="separator:a85a091727c8e7de2b16d01088324de0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af41327abeb4e7646ef5cafabe8eeabd0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#af41327abeb4e7646ef5cafabe8eeabd0">setLogical</a> (bool value)</td></tr>
<tr class="separator:af41327abeb4e7646ef5cafabe8eeabd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09c92d08796c465ce5e3a3af56867b8d"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a09c92d08796c465ce5e3a3af56867b8d">getCell</a> () const </td></tr>
<tr class="separator:a09c92d08796c465ce5e3a3af56867b8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9181d84d102ce74e640e5f3c558191ce"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Library</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a9181d84d102ce74e640e5f3c558191ce">getLibrary</a> () const </td></tr>
<tr class="separator:a9181d84d102ce74e640e5f3c558191ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b7fbd21f95bdb6ae1cf4b833c9c9729"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a5b7fbd21f95bdb6ae1cf4b833c9c9729">getDepth</a> () const </td></tr>
<tr class="separator:a5b7fbd21f95bdb6ae1cf4b833c9c9729"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0cc5ef54176f8207ef4e723eed62c35e"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a0cc5ef54176f8207ef4e723eed62c35e">getCell</a> () const</td></tr>
<tr class="separator:a0cc5ef54176f8207ef4e723eed62c35e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89dad78f1829b1ee3177f61e2f73d6c6"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Library</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a89dad78f1829b1ee3177f61e2f73d6c6">getLibrary</a> () const</td></tr>
<tr class="separator:a89dad78f1829b1ee3177f61e2f73d6c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0232ad6dcfda1e2801f788deaad83e08"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a0232ad6dcfda1e2801f788deaad83e08">getDepth</a> () const</td></tr>
<tr class="separator:a0232ad6dcfda1e2801f788deaad83e08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41fde67f1b88de06cae113a0d8108f25"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a41fde67f1b88de06cae113a0d8108f25">merge</a> (const <a class="el" href="classCRL_1_1Catalog_1_1State.html">State</a> &amp;other)</td></tr>
<tr class="separator:a41fde67f1b88de06cae113a0d8108f25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a156714ad3fe2e5bb8ad8549d101526fe"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Catalog_1_1State.html#a156714ad3fe2e5bb8ad8549d101526fe">setCell</a> (<a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Cell</a> *cell)</td></tr>
@ -139,7 +131,9 @@ Public Member Functions</h2></td></tr>
<div class="textblock"><p>An entry to store the Cell <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">State</a> in the <a class="el" href="classCRL_1_1Catalog.html" title="A Registry to store Alliance Cell metadatas. ">Catalog</a>. </p>
<p><a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">Catalog::State</a> can be accessed through the <a class="el" href="classCRL_1_1AllianceFramework.html" title="A Framework to work with Alliance formats. ">AllianceFramework</a> global <a class="el" href="classCRL_1_1Catalog.html" title="A Registry to store Alliance Cell metadatas. ">Catalog</a>, or on a Cell basis, usign the <a class="el" href="classCRL_1_1CatalogExtension.html" title="Wrapper to access a Hurricane::Cell Catalog::State. ">CatalogExtension</a> helper. </p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74"></a>
<a id="a625003526d38ac7500b4ad7de35e2d74"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a625003526d38ac7500b4ad7de35e2d74">&#9670;&nbsp;</a></span>Flags</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -150,39 +144,32 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Flags to indicates Cell <a class="el" href="classCRL_1_1Catalog_1_1State.html" title="An entry to store the Cell State in the Catalog. ">State</a> (Alliance metadatas). </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74a496651784f48e1dc9690ff484f90477c"></a>FlattenLeaf</em>&nbsp;</td><td class="fielddoc">
<p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> has no instances (leaf cell of the hierarchy). </p>
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74a496651784f48e1dc9690ff484f90477c"></a>FlattenLeaf&#160;</td><td class="fielddoc"><p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> has no instances (leaf cell of the hierarchy). </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74a2b7599c1303429830c8d3e6b673b3cb1"></a>Feed</em>&nbsp;</td><td class="fielddoc">
<p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> is a feed cell. </p>
<tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74a2b7599c1303429830c8d3e6b673b3cb1"></a>Feed&#160;</td><td class="fielddoc"><p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> is a feed cell. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74a2e2b8b775bb6e8d8d12500426a01e38b"></a>Pad</em>&nbsp;</td><td class="fielddoc">
<p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> is a pad cell. </p>
<tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74a2e2b8b775bb6e8d8d12500426a01e38b"></a>Pad&#160;</td><td class="fielddoc"><p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> is a pad cell. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74a98da2efe9c180f68f009836d1179cc4a"></a>GDS</em>&nbsp;</td><td class="fielddoc">
<p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> has a real layout (i.e. not symbolic). </p>
<tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74a98da2efe9c180f68f009836d1179cc4a"></a>GDS&#160;</td><td class="fielddoc"><p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> has a real layout (i.e. not symbolic). </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74ae8f1bee3750e1fa0c1d8097a28ee49da"></a>Delete</em>&nbsp;</td><td class="fielddoc">
<p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> has been deleted from memory. </p>
<tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74ae8f1bee3750e1fa0c1d8097a28ee49da"></a>Delete&#160;</td><td class="fielddoc"><p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> has been deleted from memory. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74a39170df01b13e1845db6eef82cc41b33"></a>Logical</em>&nbsp;</td><td class="fielddoc">
<p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> have a logical (netlist) view. </p>
<tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74a39170df01b13e1845db6eef82cc41b33"></a>Logical&#160;</td><td class="fielddoc"><p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> have a logical (netlist) view. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74ae166fbe3aa47f42ea93b2624b2ffed7d"></a>Physical</em>&nbsp;</td><td class="fielddoc">
<p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> have a physical (layout) view. </p>
<tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74ae166fbe3aa47f42ea93b2624b2ffed7d"></a>Physical&#160;</td><td class="fielddoc"><p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> have a physical (layout) view. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74a1f8f15ecd43109bcc463970d8acc03fd"></a>InMemory</em>&nbsp;</td><td class="fielddoc">
<p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> has been loaded, at least partially, in memory. </p>
<tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74a1f8f15ecd43109bcc463970d8acc03fd"></a>InMemory&#160;</td><td class="fielddoc"><p>The <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Cell.html">Hurricane::Cell</a> has been loaded, at least partially, in memory. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="a625003526d38ac7500b4ad7de35e2d74a6b88bbc27f9989a35a1e00772e157b35"></a>Views</em>&nbsp;</td><td class="fielddoc">
<p>A composite flag to mask all the avalaible kinds of views. Currently, physical &amp; logical. </p>
<tr><td class="fieldname"><a id="a625003526d38ac7500b4ad7de35e2d74a6b88bbc27f9989a35a1e00772e157b35"></a>Views&#160;</td><td class="fielddoc"><p>A composite flag to mask all the avalaible kinds of views. Currently, physical &amp; logical. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a97e69ca85c09942e20d41013b8ff5280"></a>
<a id="a97e69ca85c09942e20d41013b8ff5280"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a97e69ca85c09942e20d41013b8ff5280">&#9670;&nbsp;</a></span>State()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -206,7 +193,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae25003eae8262a994fba979f28c35aed"></a>
<a id="ae25003eae8262a994fba979f28c35aed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae25003eae8262a994fba979f28c35aed">&#9670;&nbsp;</a></span>~State()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -223,7 +212,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="adb5dc909651479a6556a1f478d585552"></a>
<a id="a14f0d3b8c2e62ad51c78cb8cac4ebbf6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14f0d3b8c2e62ad51c78cb8cac4ebbf6">&#9670;&nbsp;</a></span>isFlattenLeaf()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -245,11 +236,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell has no more instances (leaf cell). </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#af6487fb6007e34163773d8e8d15013a1">CRL::CatalogExtension::isFlattenLeaf()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#af6487fb6007e34163773d8e8d15013a1">CRL::CatalogExtension::isFlattenLeaf()</a>.</p>
</div>
</div>
<a class="anchor" id="aab39e2bb6a238a4ae3a82ab8ac4f0593"></a>
<a id="a53c89121d49a7fc9f8a09093a35d32c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a53c89121d49a7fc9f8a09093a35d32c4">&#9670;&nbsp;</a></span>isFeed()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -271,11 +264,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell is a feed-through. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a5feda5d6fba490a71e3742361ec7b4a1">CRL::CatalogExtension::isFeed()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a5feda5d6fba490a71e3742361ec7b4a1">CRL::CatalogExtension::isFeed()</a>.</p>
</div>
</div>
<a class="anchor" id="ae0f83319e1de5609e1f429c048dab8bb"></a>
<a id="a457e8dcf1928e6df40ec9f686350c2d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a457e8dcf1928e6df40ec9f686350c2d0">&#9670;&nbsp;</a></span>isPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -297,11 +292,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell is a pad. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a2695acabeac2f224fa4ac3a9563aeee9">CRL::CatalogExtension::isPad()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a2695acabeac2f224fa4ac3a9563aeee9">CRL::CatalogExtension::isPad()</a>.</p>
</div>
</div>
<a class="anchor" id="ab8f45372b46f9db7855ee98eefdbd5ad"></a>
<a id="a7af8d732bf9cea0b0ddb4eca3b0528ec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7af8d732bf9cea0b0ddb4eca3b0528ec">&#9670;&nbsp;</a></span>isGds()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -323,11 +320,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell is drawn in real layer (i.e. not a symbolic layout, but a GDS). </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a37c8d304e7386ee31b73c826cb929e5f">CRL::CatalogExtension::isGds()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a37c8d304e7386ee31b73c826cb929e5f">CRL::CatalogExtension::isGds()</a>.</p>
</div>
</div>
<a class="anchor" id="a860d0ec35b5350f7e70ed30dc999b6dc"></a>
<a id="ac6df038ecb133b973f9b9f2a5e858ca5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6df038ecb133b973f9b9f2a5e858ca5">&#9670;&nbsp;</a></span>isDelete()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -349,11 +348,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell has been deleted from memory. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a90e941d2349f5a0f4f7fefb41b434b0a">CRL::CatalogExtension::isDelete()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a90e941d2349f5a0f4f7fefb41b434b0a">CRL::CatalogExtension::isDelete()</a>.</p>
</div>
</div>
<a class="anchor" id="a39c92430456ac8be2ec80310e78170aa"></a>
<a id="a72b60d86f25221fd8fe7a5902be528a2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a72b60d86f25221fd8fe7a5902be528a2">&#9670;&nbsp;</a></span>isPhysical()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -375,11 +376,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell posseses a physical view (layout). </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a3af53ef4a7fa512a079adbcb68677e2f">CRL::CatalogExtension::isPhysical()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a3af53ef4a7fa512a079adbcb68677e2f">CRL::CatalogExtension::isPhysical()</a>.</p>
</div>
</div>
<a class="anchor" id="a084e955d5b7132b0f739951ca82fbb4a"></a>
<a id="a07aad28830a57090cf9203b0ff8714b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a07aad28830a57090cf9203b0ff8714b1">&#9670;&nbsp;</a></span>isLogical()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -401,11 +404,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> <b>true</b> if the Cell posseses a logical view (netlist). </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a558c506a28d2230e592080dccbcca380">CRL::CatalogExtension::isLogical()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a558c506a28d2230e592080dccbcca380">CRL::CatalogExtension::isLogical()</a>.</p>
</div>
</div>
<a class="anchor" id="ac6ec60080ed8b5121be6eb74d12361bd"></a>
<a id="a80ac3efddd043ec7151680755cc3db42"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a80ac3efddd043ec7151680755cc3db42">&#9670;&nbsp;</a></span>getFlags()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -428,11 +433,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> the requested flags states (selected by <code>mask</code>, all of them by default). </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a56af8791146665dab3f0f0f33317ac82">CRL::CatalogExtension::getFlags()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a9525c2253aa310a63de32caaeb694e66">CRL::CatalogExtension::getFlags()</a>.</p>
</div>
</div>
<a class="anchor" id="a73a3866e9da359611638b2d725a79613"></a>
<a id="a73a3866e9da359611638b2d725a79613"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a73a3866e9da359611638b2d725a79613">&#9670;&nbsp;</a></span>setFlags()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -466,11 +473,13 @@ Public Member Functions</h2></td></tr>
<p><b>Returns:</b> <b>true</b> if at least one flag of the indicated by mask is set. (dubious usefulness).</p>
<p><code>mask</code> is used to designate the bits of the flags on which we are going to operate. If <code>value</code> is <b>true</b>, then the bits are sets and if <code>value</code> is <b>false</b> they are reset. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#ab9475735032d500f4d4a8cf980864b3e">CRL::CatalogExtension::setFlags()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#ab9475735032d500f4d4a8cf980864b3e">CRL::CatalogExtension::setFlags()</a>.</p>
</div>
</div>
<a class="anchor" id="a4fba9a5ea27f5a36e41f0246124a3095"></a>
<a id="a4fba9a5ea27f5a36e41f0246124a3095"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4fba9a5ea27f5a36e41f0246124a3095">&#9670;&nbsp;</a></span>setFlattenLeaf()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -493,11 +502,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the FlattenLeaf flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a00772e9c455d0e44caf132ee724b958d">CRL::CatalogExtension::setFlattenLeaf()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a00772e9c455d0e44caf132ee724b958d">CRL::CatalogExtension::setFlattenLeaf()</a>.</p>
</div>
</div>
<a class="anchor" id="ab5936e80369947177be88c3d770f4725"></a>
<a id="ab5936e80369947177be88c3d770f4725"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab5936e80369947177be88c3d770f4725">&#9670;&nbsp;</a></span>setFeed()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -520,11 +531,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Feed flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#ab82e4b139ca636feaca5d97836891b68">CRL::CatalogExtension::setFeed()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#ab82e4b139ca636feaca5d97836891b68">CRL::CatalogExtension::setFeed()</a>.</p>
</div>
</div>
<a class="anchor" id="a97e2158809ed0e88237bb92eb8daa290"></a>
<a id="a97e2158809ed0e88237bb92eb8daa290"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a97e2158809ed0e88237bb92eb8daa290">&#9670;&nbsp;</a></span>setPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -547,11 +560,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Pad flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#afceda0d184ed2964e160b563a216bc35">CRL::CatalogExtension::setPad()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#afceda0d184ed2964e160b563a216bc35">CRL::CatalogExtension::setPad()</a>.</p>
</div>
</div>
<a class="anchor" id="acc0c819f382393dc780bb19c7788b216"></a>
<a id="acc0c819f382393dc780bb19c7788b216"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc0c819f382393dc780bb19c7788b216">&#9670;&nbsp;</a></span>setGds()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -574,11 +589,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Gds flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a6c440bfd5ac56c9e07213c1347f0610a">CRL::CatalogExtension::setGds()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a6c440bfd5ac56c9e07213c1347f0610a">CRL::CatalogExtension::setGds()</a>.</p>
</div>
</div>
<a class="anchor" id="a53873a1a42083389dfae02b46b3f2de3"></a>
<a id="a53873a1a42083389dfae02b46b3f2de3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a53873a1a42083389dfae02b46b3f2de3">&#9670;&nbsp;</a></span>setDelete()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -601,11 +618,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Delete flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a8a5bdbfb8c898f8ea00c8718c6714983">CRL::CatalogExtension::setDelete()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a8a5bdbfb8c898f8ea00c8718c6714983">CRL::CatalogExtension::setDelete()</a>.</p>
</div>
</div>
<a class="anchor" id="a85a091727c8e7de2b16d01088324de0d"></a>
<a id="a85a091727c8e7de2b16d01088324de0d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85a091727c8e7de2b16d01088324de0d">&#9670;&nbsp;</a></span>setPhysical()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -628,11 +647,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Physical flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#ae3de9795e0ddce5a767cf53d79fec077">CRL::CatalogExtension::setPhysical()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#ae3de9795e0ddce5a767cf53d79fec077">CRL::CatalogExtension::setPhysical()</a>.</p>
</div>
</div>
<a class="anchor" id="af41327abeb4e7646ef5cafabe8eeabd0"></a>
<a id="af41327abeb4e7646ef5cafabe8eeabd0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af41327abeb4e7646ef5cafabe8eeabd0">&#9670;&nbsp;</a></span>setLogical()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -655,11 +676,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Logical flag to <code>value</code>. Returns <b>true</b> if it is set. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a9609c756887f433fe9b250e32ff1ae0a">CRL::CatalogExtension::setLogical()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a9609c756887f433fe9b250e32ff1ae0a">CRL::CatalogExtension::setLogical()</a>.</p>
</div>
</div>
<a class="anchor" id="a09c92d08796c465ce5e3a3af56867b8d"></a>
<a id="a0cc5ef54176f8207ef4e723eed62c35e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0cc5ef54176f8207ef4e723eed62c35e">&#9670;&nbsp;</a></span>getCell()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -683,7 +706,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9181d84d102ce74e640e5f3c558191ce"></a>
<a id="a89dad78f1829b1ee3177f61e2f73d6c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a89dad78f1829b1ee3177f61e2f73d6c6">&#9670;&nbsp;</a></span>getLibrary()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -705,11 +730,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> the associated <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Library.html">Hurricane::Library</a>. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a6681f9fbe64998a27fe532fd3591afc7">CRL::CatalogExtension::getLibrary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a6681f9fbe64998a27fe532fd3591afc7">CRL::CatalogExtension::getLibrary()</a>.</p>
</div>
</div>
<a class="anchor" id="a5b7fbd21f95bdb6ae1cf4b833c9c9729"></a>
<a id="a0232ad6dcfda1e2801f788deaad83e08"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0232ad6dcfda1e2801f788deaad83e08">&#9670;&nbsp;</a></span>getDepth()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -731,11 +758,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> the hierarchical depth of the Cell. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#ae4f8d30cf08796b62422546c05526d86">CRL::CatalogExtension::getDepth()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#ae4f8d30cf08796b62422546c05526d86">CRL::CatalogExtension::getDepth()</a>.</p>
</div>
</div>
<a class="anchor" id="a41fde67f1b88de06cae113a0d8108f25"></a>
<a id="a41fde67f1b88de06cae113a0d8108f25"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41fde67f1b88de06cae113a0d8108f25">&#9670;&nbsp;</a></span>merge()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -760,7 +789,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a156714ad3fe2e5bb8ad8549d101526fe"></a>
<a id="a156714ad3fe2e5bb8ad8549d101526fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a156714ad3fe2e5bb8ad8549d101526fe">&#9670;&nbsp;</a></span>setCell()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -777,7 +808,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a821ac2ae33f0045232cab612ab12f84b"></a>
<a id="a821ac2ae33f0045232cab612ab12f84b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a821ac2ae33f0045232cab612ab12f84b">&#9670;&nbsp;</a></span>setLibrary()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -800,7 +833,7 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the Library field. Returns the newly affected Library. </p>
<p>Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a6ef1b96f9bbbe39e13a5aba073f2394c">CRL::CatalogExtension::setLibrary()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1CatalogExtension.html#a6ef1b96f9bbbe39e13a5aba073f2394c">CRL::CatalogExtension::setLibrary()</a>.</p>
</div>
</div>
@ -813,7 +846,7 @@ Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1Environment.html">Environment</a></li> </ul>
@ -59,28 +51,28 @@
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a7c3bff1fa3f9a080461950db36df4416">addSYSTEM_LIBRARY</a>(const char *value, const char *libName, unsigned int mode=Append)</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeba69ce578d2eeb6a8de507920ccf673b8d">Append</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a77a53278c498a94c34270cec1a66f687">Environment</a>()</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a1f0853107895198d8f5b6b260abdbc0b">getBLOCKAGE</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#aa1fae32236875ba6f3a4f409e4231020">getCATALOG</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a390a013016cfc14d9945422632a068ca">getCLOCK</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a9b0970b3022cdbece5e6191b0d3403f8">getCORIOLIS_TOP</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a47c06949c26ba37aefbe6153eb8fb1d7">getDISPLAY</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a91a522d1296d5e1969095f71362e055c">getDisplayStyle</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a0bb2d6e0fb2dc059e9034328755d250e">getGROUND</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a99b87d91bac5adbdc1f68a19844c671c">getIN_LO</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a093c6b4ece803650654ac0ec4cda0154">getIN_PH</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a19adcaebb99dc8a316261ddff72f9b56">getBLOCKAGE</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a3bb5c9e02c1391142e439f023bdc0355">getCATALOG</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ab19c72626a542359bbf9cb17cdee23a8">getCLOCK</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a3c3846fe8e538a673dd69806acdfe7ca">getCORIOLIS_TOP</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#aa37c08a7e9025712411a4befe8ae89e8">getDISPLAY</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a2c5781e058b0a774dd46eeca34e19685">getDisplayStyle</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a14cc8ac50482a5a8c47f934aaf995ed5">getGROUND</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#accb623ad1312e7f184e2ee9d1f8764f2">getIN_LO</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a3b3c6fb6f26e8029d1f56dd4c7929d16">getIN_PH</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#acf7a3bc42cfb4b98f1da859ed27ca97e">getLIBRARIES</a>()</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#afe29d7cab0055cabb7667eabcbdd32db">getLIBRARYPath</a>(size_t i)</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ab50c804f19900ca50ba4008e789068d1">getOUT_LO</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a85001002d1ff6fabde766bd558b75227">getOUT_PH</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ab5332d750d63f3f6947bc7888af4d402">getPad</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ae65792de9e573c98e9849b28648c2bc7">getPOWER</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a27c6a85b22ace1d2407e6cb75771cb32">getPrint</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a4aaee77569d5616e6b70f04fb38c8e01">getSCALE_X</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#aab162c95e9d75f825f7471ead130985a">isBLOCKAGE</a>(const char *name) const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#aeee19c6b2415b11555e9e122420aac6b">isCLOCK</a>(const char *name) const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a486245c4527ac3beca23900b537080c0">isGROUND</a>(const char *name) const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a9ea8161e491a4c8dfaeff9ebfe02b679">isPad</a>(const char *name) const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ab639f914029177808ffa9ba933ec8c4d">isPOWER</a>(const char *name) const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a85248fafaf73d8d6a5c388b43566b243">getOUT_LO</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a14c2dbaef6177f80bf76cfcae7933e20">getOUT_PH</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a5f0df5fadd73c2246f7e6775314bb5fa">getPad</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a7d1ab4e7ca026c88f73ceca3876d0de9">getPOWER</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a9d55dc4dc591a1d3404af53b72ab7f8e">getPrint</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ae6a2cde25a417f3a70c400209c028942">getSCALE_X</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a6f1ce36d1636f2ec701b0904f461e6b7">isBLOCKAGE</a>(const char *name) const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a9ae0d48d88797a7a5421edf5978bf3d7">isCLOCK</a>(const char *name) const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a4cad6f06ac67c1a688b0b98dfa57d7ea">isGROUND</a>(const char *name) const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a8a82d0a983c502e1dc97944ab496d8e5">isPad</a>(const char *name) const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a9eb93e10f79278b4642fc9815a83fdff">isPOWER</a>(const char *name) const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeba9acc311bf991f5e62be5ea9333083fd0">Prepend</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeba61fc1f828e487ed148c456f3d37be83a">Replace</a> enum value</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#af18cbbcdfb458b69dbb6de0dbb564a3a">setBLOCKAGE</a>(const char *value)</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
@ -97,14 +89,14 @@
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ae96c850eadc89d1705b9aa0256f434ea">setPOWER</a>(const char *value)</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#ad14d519b0a4c964d7a786739499571dd">setSCALE_X</a>(long value)</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a315f5a14de9dc354cf81728adb29a8c6">setWORKING_LIBRARY</a>(const char *value)</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a73fbaa112f66b6c334c549ff594b1fb7">validate</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1Environment.html#a4ea88dd9784318190a3705345c47904a">validate</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1Environment.html#acf7b9322c6c78b30b946f776b7c4dc08">~Environment</a>()</td><td class="entry"><a class="el" href="classCRL_1_1Environment.html">CRL::Environment</a></td><td class="entry"></td></tr>
</table></div><!-- contents -->
<br>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1Environment.html">Environment</a></li> </ul>
@ -62,13 +54,13 @@
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:ac5692c2f5d20e892573a3d46de222aeb"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeb">AddMode</a> { <br/>
<tr class="memitem:ac5692c2f5d20e892573a3d46de222aeb"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeb">AddMode</a> { <br />
&#160;&#160;<a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeba69ce578d2eeb6a8de507920ccf673b8d">Append</a> =1,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeba9acc311bf991f5e62be5ea9333083fd0">Prepend</a> =2,
<br/>
<br />
&#160;&#160;<a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeba61fc1f828e487ed148c456f3d37be83a">Replace</a> =3
<br/>
<br />
}</td></tr>
<tr class="separator:ac5692c2f5d20e892573a3d46de222aeb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
@ -78,50 +70,50 @@ Public Member Functions</h2></td></tr>
<tr class="separator:a77a53278c498a94c34270cec1a66f687"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf7b9322c6c78b30b946f776b7c4dc08"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#acf7b9322c6c78b30b946f776b7c4dc08">~Environment</a> ()</td></tr>
<tr class="separator:acf7b9322c6c78b30b946f776b7c4dc08"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b0970b3022cdbece5e6191b0d3403f8"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a9b0970b3022cdbece5e6191b0d3403f8">getCORIOLIS_TOP</a> () const </td></tr>
<tr class="separator:a9b0970b3022cdbece5e6191b0d3403f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91a522d1296d5e1969095f71362e055c"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a91a522d1296d5e1969095f71362e055c">getDisplayStyle</a> () const </td></tr>
<tr class="separator:a91a522d1296d5e1969095f71362e055c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4aaee77569d5616e6b70f04fb38c8e01"><td class="memItemLeft" align="right" valign="top">long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a4aaee77569d5616e6b70f04fb38c8e01">getSCALE_X</a> () const </td></tr>
<tr class="separator:a4aaee77569d5616e6b70f04fb38c8e01"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47c06949c26ba37aefbe6153eb8fb1d7"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a47c06949c26ba37aefbe6153eb8fb1d7">getDISPLAY</a> () const </td></tr>
<tr class="separator:a47c06949c26ba37aefbe6153eb8fb1d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a99b87d91bac5adbdc1f68a19844c671c"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a99b87d91bac5adbdc1f68a19844c671c">getIN_LO</a> () const </td></tr>
<tr class="separator:a99b87d91bac5adbdc1f68a19844c671c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a093c6b4ece803650654ac0ec4cda0154"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a093c6b4ece803650654ac0ec4cda0154">getIN_PH</a> () const </td></tr>
<tr class="separator:a093c6b4ece803650654ac0ec4cda0154"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab50c804f19900ca50ba4008e789068d1"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ab50c804f19900ca50ba4008e789068d1">getOUT_LO</a> () const </td></tr>
<tr class="separator:ab50c804f19900ca50ba4008e789068d1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85001002d1ff6fabde766bd558b75227"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a85001002d1ff6fabde766bd558b75227">getOUT_PH</a> () const </td></tr>
<tr class="separator:a85001002d1ff6fabde766bd558b75227"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae65792de9e573c98e9849b28648c2bc7"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ae65792de9e573c98e9849b28648c2bc7">getPOWER</a> () const </td></tr>
<tr class="separator:ae65792de9e573c98e9849b28648c2bc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0bb2d6e0fb2dc059e9034328755d250e"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a0bb2d6e0fb2dc059e9034328755d250e">getGROUND</a> () const </td></tr>
<tr class="separator:a0bb2d6e0fb2dc059e9034328755d250e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a390a013016cfc14d9945422632a068ca"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a390a013016cfc14d9945422632a068ca">getCLOCK</a> () const </td></tr>
<tr class="separator:a390a013016cfc14d9945422632a068ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1f0853107895198d8f5b6b260abdbc0b"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a1f0853107895198d8f5b6b260abdbc0b">getBLOCKAGE</a> () const </td></tr>
<tr class="separator:a1f0853107895198d8f5b6b260abdbc0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab5332d750d63f3f6947bc7888af4d402"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ab5332d750d63f3f6947bc7888af4d402">getPad</a> () const </td></tr>
<tr class="separator:ab5332d750d63f3f6947bc7888af4d402"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1fae32236875ba6f3a4f409e4231020"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#aa1fae32236875ba6f3a4f409e4231020">getCATALOG</a> () const </td></tr>
<tr class="separator:aa1fae32236875ba6f3a4f409e4231020"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c3846fe8e538a673dd69806acdfe7ca"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a3c3846fe8e538a673dd69806acdfe7ca">getCORIOLIS_TOP</a> () const</td></tr>
<tr class="separator:a3c3846fe8e538a673dd69806acdfe7ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c5781e058b0a774dd46eeca34e19685"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a2c5781e058b0a774dd46eeca34e19685">getDisplayStyle</a> () const</td></tr>
<tr class="separator:a2c5781e058b0a774dd46eeca34e19685"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae6a2cde25a417f3a70c400209c028942"><td class="memItemLeft" align="right" valign="top">long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ae6a2cde25a417f3a70c400209c028942">getSCALE_X</a> () const</td></tr>
<tr class="separator:ae6a2cde25a417f3a70c400209c028942"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa37c08a7e9025712411a4befe8ae89e8"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#aa37c08a7e9025712411a4befe8ae89e8">getDISPLAY</a> () const</td></tr>
<tr class="separator:aa37c08a7e9025712411a4befe8ae89e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:accb623ad1312e7f184e2ee9d1f8764f2"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#accb623ad1312e7f184e2ee9d1f8764f2">getIN_LO</a> () const</td></tr>
<tr class="separator:accb623ad1312e7f184e2ee9d1f8764f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b3c6fb6f26e8029d1f56dd4c7929d16"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a3b3c6fb6f26e8029d1f56dd4c7929d16">getIN_PH</a> () const</td></tr>
<tr class="separator:a3b3c6fb6f26e8029d1f56dd4c7929d16"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85248fafaf73d8d6a5c388b43566b243"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a85248fafaf73d8d6a5c388b43566b243">getOUT_LO</a> () const</td></tr>
<tr class="separator:a85248fafaf73d8d6a5c388b43566b243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14c2dbaef6177f80bf76cfcae7933e20"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a14c2dbaef6177f80bf76cfcae7933e20">getOUT_PH</a> () const</td></tr>
<tr class="separator:a14c2dbaef6177f80bf76cfcae7933e20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d1ab4e7ca026c88f73ceca3876d0de9"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a7d1ab4e7ca026c88f73ceca3876d0de9">getPOWER</a> () const</td></tr>
<tr class="separator:a7d1ab4e7ca026c88f73ceca3876d0de9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14cc8ac50482a5a8c47f934aaf995ed5"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a14cc8ac50482a5a8c47f934aaf995ed5">getGROUND</a> () const</td></tr>
<tr class="separator:a14cc8ac50482a5a8c47f934aaf995ed5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab19c72626a542359bbf9cb17cdee23a8"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ab19c72626a542359bbf9cb17cdee23a8">getCLOCK</a> () const</td></tr>
<tr class="separator:ab19c72626a542359bbf9cb17cdee23a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19adcaebb99dc8a316261ddff72f9b56"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a19adcaebb99dc8a316261ddff72f9b56">getBLOCKAGE</a> () const</td></tr>
<tr class="separator:a19adcaebb99dc8a316261ddff72f9b56"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f0df5fadd73c2246f7e6775314bb5fa"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a5f0df5fadd73c2246f7e6775314bb5fa">getPad</a> () const</td></tr>
<tr class="separator:a5f0df5fadd73c2246f7e6775314bb5fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3bb5c9e02c1391142e439f023bdc0355"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a3bb5c9e02c1391142e439f023bdc0355">getCATALOG</a> () const</td></tr>
<tr class="separator:a3bb5c9e02c1391142e439f023bdc0355"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acf7a3bc42cfb4b98f1da859ed27ca97e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1SearchPath.html">SearchPath</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#acf7a3bc42cfb4b98f1da859ed27ca97e">getLIBRARIES</a> ()</td></tr>
<tr class="separator:acf7a3bc42cfb4b98f1da859ed27ca97e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afe29d7cab0055cabb7667eabcbdd32db"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#afe29d7cab0055cabb7667eabcbdd32db">getLIBRARYPath</a> (size_t i)</td></tr>
<tr class="separator:afe29d7cab0055cabb7667eabcbdd32db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab639f914029177808ffa9ba933ec8c4d"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ab639f914029177808ffa9ba933ec8c4d">isPOWER</a> (const char *name) const </td></tr>
<tr class="separator:ab639f914029177808ffa9ba933ec8c4d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a486245c4527ac3beca23900b537080c0"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a486245c4527ac3beca23900b537080c0">isGROUND</a> (const char *name) const </td></tr>
<tr class="separator:a486245c4527ac3beca23900b537080c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeee19c6b2415b11555e9e122420aac6b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#aeee19c6b2415b11555e9e122420aac6b">isCLOCK</a> (const char *name) const </td></tr>
<tr class="separator:aeee19c6b2415b11555e9e122420aac6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab162c95e9d75f825f7471ead130985a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#aab162c95e9d75f825f7471ead130985a">isBLOCKAGE</a> (const char *name) const </td></tr>
<tr class="separator:aab162c95e9d75f825f7471ead130985a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ea8161e491a4c8dfaeff9ebfe02b679"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a9ea8161e491a4c8dfaeff9ebfe02b679">isPad</a> (const char *name) const </td></tr>
<tr class="separator:a9ea8161e491a4c8dfaeff9ebfe02b679"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a73fbaa112f66b6c334c549ff594b1fb7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a73fbaa112f66b6c334c549ff594b1fb7">validate</a> () const </td></tr>
<tr class="separator:a73fbaa112f66b6c334c549ff594b1fb7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9eb93e10f79278b4642fc9815a83fdff"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a9eb93e10f79278b4642fc9815a83fdff">isPOWER</a> (const char *name) const</td></tr>
<tr class="separator:a9eb93e10f79278b4642fc9815a83fdff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4cad6f06ac67c1a688b0b98dfa57d7ea"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a4cad6f06ac67c1a688b0b98dfa57d7ea">isGROUND</a> (const char *name) const</td></tr>
<tr class="separator:a4cad6f06ac67c1a688b0b98dfa57d7ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ae0d48d88797a7a5421edf5978bf3d7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a9ae0d48d88797a7a5421edf5978bf3d7">isCLOCK</a> (const char *name) const</td></tr>
<tr class="separator:a9ae0d48d88797a7a5421edf5978bf3d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6f1ce36d1636f2ec701b0904f461e6b7"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a6f1ce36d1636f2ec701b0904f461e6b7">isBLOCKAGE</a> (const char *name) const</td></tr>
<tr class="separator:a6f1ce36d1636f2ec701b0904f461e6b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a82d0a983c502e1dc97944ab496d8e5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a8a82d0a983c502e1dc97944ab496d8e5">isPad</a> (const char *name) const</td></tr>
<tr class="separator:a8a82d0a983c502e1dc97944ab496d8e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ea88dd9784318190a3705345c47904a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a4ea88dd9784318190a3705345c47904a">validate</a> () const</td></tr>
<tr class="separator:a4ea88dd9784318190a3705345c47904a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a85fa721541a39571c3ade06992035bad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a85fa721541a39571c3ade06992035bad">setDisplayStyle</a> (const char *)</td></tr>
<tr class="separator:a85fa721541a39571c3ade06992035bad"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad14d519b0a4c964d7a786739499571dd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#ad14d519b0a4c964d7a786739499571dd">setSCALE_X</a> (long value)</td></tr>
@ -152,15 +144,17 @@ Public Member Functions</h2></td></tr>
<tr class="separator:a315f5a14de9dc354cf81728adb29a8c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7c3bff1fa3f9a080461950db36df4416"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a7c3bff1fa3f9a080461950db36df4416">addSYSTEM_LIBRARY</a> (const char *value, const char *libName, unsigned int mode=<a class="el" href="classCRL_1_1Environment.html#ac5692c2f5d20e892573a3d46de222aeba69ce578d2eeb6a8de507920ccf673b8d">Append</a>)</td></tr>
<tr class="separator:a7c3bff1fa3f9a080461950db36df4416"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27c6a85b22ace1d2407e6cb75771cb32"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a27c6a85b22ace1d2407e6cb75771cb32">getPrint</a> () const </td></tr>
<tr class="separator:a27c6a85b22ace1d2407e6cb75771cb32"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d55dc4dc591a1d3404af53b72ab7f8e"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1Environment.html#a9d55dc4dc591a1d3404af53b72ab7f8e">getPrint</a> () const</td></tr>
<tr class="separator:a9d55dc4dc591a1d3404af53b72ab7f8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Holds all the Alliance environment variables. </p>
<p>This object is not to be used alone, but only as an attribute of <a class="el" href="classCRL_1_1AllianceFramework.html" title="A Framework to work with Alliance formats. ">AllianceFramework</a>.</p>
<p>Although we constantly refer of the contents of this object as <em>environement variables</em>, they may (and should) be initialized through the Coriolis Python environement loader or legacy XML parsers. </p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a class="anchor" id="ac5692c2f5d20e892573a3d46de222aeb"></a>
<a id="ac5692c2f5d20e892573a3d46de222aeb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5692c2f5d20e892573a3d46de222aeb">&#9670;&nbsp;</a></span>AddMode</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -171,21 +165,20 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>This enumeration defines the way libraries are added to the already existing table. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="ac5692c2f5d20e892573a3d46de222aeba69ce578d2eeb6a8de507920ccf673b8d"></a>Append</em>&nbsp;</td><td class="fielddoc">
<p>The library is appended to the search list. </p>
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ac5692c2f5d20e892573a3d46de222aeba69ce578d2eeb6a8de507920ccf673b8d"></a>Append&#160;</td><td class="fielddoc"><p>The library is appended to the search list. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ac5692c2f5d20e892573a3d46de222aeba9acc311bf991f5e62be5ea9333083fd0"></a>Prepend</em>&nbsp;</td><td class="fielddoc">
<p>The library is prepended to the search list. </p>
<tr><td class="fieldname"><a id="ac5692c2f5d20e892573a3d46de222aeba9acc311bf991f5e62be5ea9333083fd0"></a>Prepend&#160;</td><td class="fielddoc"><p>The library is prepended to the search list. </p>
</td></tr>
<tr><td class="fieldname"><em><a class="anchor" id="ac5692c2f5d20e892573a3d46de222aeba61fc1f828e487ed148c456f3d37be83a"></a>Replace</em>&nbsp;</td><td class="fielddoc">
<p>If a library of same name already exists, it's discarted and this one is put in it's place in the search order. Otherwise it is appended. </p>
<tr><td class="fieldname"><a id="ac5692c2f5d20e892573a3d46de222aeba61fc1f828e487ed148c456f3d37be83a"></a>Replace&#160;</td><td class="fielddoc"><p>If a library of same name already exists, it's discarted and this one is put in it's place in the search order. Otherwise it is appended. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a77a53278c498a94c34270cec1a66f687"></a>
<a id="a77a53278c498a94c34270cec1a66f687"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77a53278c498a94c34270cec1a66f687">&#9670;&nbsp;</a></span>Environment()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -201,7 +194,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="acf7b9322c6c78b30b946f776b7c4dc08"></a>
<a id="acf7b9322c6c78b30b946f776b7c4dc08"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf7b9322c6c78b30b946f776b7c4dc08">&#9670;&nbsp;</a></span>~Environment()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -218,7 +213,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a9b0970b3022cdbece5e6191b0d3403f8"></a>
<a id="a3c3846fe8e538a673dd69806acdfe7ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3c3846fe8e538a673dd69806acdfe7ca">&#9670;&nbsp;</a></span>getCORIOLIS_TOP()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -242,7 +239,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a91a522d1296d5e1969095f71362e055c"></a>
<a id="a2c5781e058b0a774dd46eeca34e19685"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2c5781e058b0a774dd46eeca34e19685">&#9670;&nbsp;</a></span>getDisplayStyle()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -266,7 +265,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4aaee77569d5616e6b70f04fb38c8e01"></a>
<a id="ae6a2cde25a417f3a70c400209c028942"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6a2cde25a417f3a70c400209c028942">&#9670;&nbsp;</a></span>getSCALE_X()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -290,7 +291,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a47c06949c26ba37aefbe6153eb8fb1d7"></a>
<a id="aa37c08a7e9025712411a4befe8ae89e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa37c08a7e9025712411a4befe8ae89e8">&#9670;&nbsp;</a></span>getDISPLAY()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -314,7 +317,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a99b87d91bac5adbdc1f68a19844c671c"></a>
<a id="accb623ad1312e7f184e2ee9d1f8764f2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#accb623ad1312e7f184e2ee9d1f8764f2">&#9670;&nbsp;</a></span>getIN_LO()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -338,7 +343,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a093c6b4ece803650654ac0ec4cda0154"></a>
<a id="a3b3c6fb6f26e8029d1f56dd4c7929d16"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3b3c6fb6f26e8029d1f56dd4c7929d16">&#9670;&nbsp;</a></span>getIN_PH()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -362,7 +369,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab50c804f19900ca50ba4008e789068d1"></a>
<a id="a85248fafaf73d8d6a5c388b43566b243"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85248fafaf73d8d6a5c388b43566b243">&#9670;&nbsp;</a></span>getOUT_LO()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -386,7 +395,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a85001002d1ff6fabde766bd558b75227"></a>
<a id="a14c2dbaef6177f80bf76cfcae7933e20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14c2dbaef6177f80bf76cfcae7933e20">&#9670;&nbsp;</a></span>getOUT_PH()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -410,7 +421,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae65792de9e573c98e9849b28648c2bc7"></a>
<a id="a7d1ab4e7ca026c88f73ceca3876d0de9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d1ab4e7ca026c88f73ceca3876d0de9">&#9670;&nbsp;</a></span>getPOWER()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -434,7 +447,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a0bb2d6e0fb2dc059e9034328755d250e"></a>
<a id="a14cc8ac50482a5a8c47f934aaf995ed5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14cc8ac50482a5a8c47f934aaf995ed5">&#9670;&nbsp;</a></span>getGROUND()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -458,7 +473,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a390a013016cfc14d9945422632a068ca"></a>
<a id="ab19c72626a542359bbf9cb17cdee23a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab19c72626a542359bbf9cb17cdee23a8">&#9670;&nbsp;</a></span>getCLOCK()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -482,7 +499,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a1f0853107895198d8f5b6b260abdbc0b"></a>
<a id="a19adcaebb99dc8a316261ddff72f9b56"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a19adcaebb99dc8a316261ddff72f9b56">&#9670;&nbsp;</a></span>getBLOCKAGE()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -502,12 +521,14 @@ Public Member Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p><b>Returns:</b> With the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/namespaceHurricane.html">Hurricane</a> database you cannot create physical components whithout a net. All segments used for signaling blockage area are grouped inside a unique net, which name is given by this variable.</p>
<dl class="section user"><dt>Remark:</dt><dd>Be sure to use a significant name which is not likely to collide with true nets. </dd></dl>
<p><b>Returns:</b> With the Hurricane database you cannot create physical components whithout a net. All segments used for signaling blockage area are grouped inside a unique net, which name is given by this variable.</p>
<dl class="section user"><dt>Remark: Be sure to use a significant name which is not likely to collide</dt><dd>with true nets. </dd></dl>
</div>
</div>
<a class="anchor" id="ab5332d750d63f3f6947bc7888af4d402"></a>
<a id="a5f0df5fadd73c2246f7e6775314bb5fa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f0df5fadd73c2246f7e6775314bb5fa">&#9670;&nbsp;</a></span>getPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -531,7 +552,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa1fae32236875ba6f3a4f409e4231020"></a>
<a id="a3bb5c9e02c1391142e439f023bdc0355"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3bb5c9e02c1391142e439f023bdc0355">&#9670;&nbsp;</a></span>getCATALOG()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -555,7 +578,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="acf7a3bc42cfb4b98f1da859ed27ca97e"></a>
<a id="acf7a3bc42cfb4b98f1da859ed27ca97e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acf7a3bc42cfb4b98f1da859ed27ca97e">&#9670;&nbsp;</a></span>getLIBRARIES()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -579,7 +604,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="afe29d7cab0055cabb7667eabcbdd32db"></a>
<a id="afe29d7cab0055cabb7667eabcbdd32db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afe29d7cab0055cabb7667eabcbdd32db">&#9670;&nbsp;</a></span>getLIBRARYPath()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -596,7 +623,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab639f914029177808ffa9ba933ec8c4d"></a>
<a id="a9eb93e10f79278b4642fc9815a83fdff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9eb93e10f79278b4642fc9815a83fdff">&#9670;&nbsp;</a></span>isPOWER()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -613,7 +642,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a486245c4527ac3beca23900b537080c0"></a>
<a id="a4cad6f06ac67c1a688b0b98dfa57d7ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4cad6f06ac67c1a688b0b98dfa57d7ea">&#9670;&nbsp;</a></span>isGROUND()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -630,7 +661,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aeee19c6b2415b11555e9e122420aac6b"></a>
<a id="a9ae0d48d88797a7a5421edf5978bf3d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9ae0d48d88797a7a5421edf5978bf3d7">&#9670;&nbsp;</a></span>isCLOCK()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -647,7 +680,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aab162c95e9d75f825f7471ead130985a"></a>
<a id="a6f1ce36d1636f2ec701b0904f461e6b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6f1ce36d1636f2ec701b0904f461e6b7">&#9670;&nbsp;</a></span>isBLOCKAGE()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -664,7 +699,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9ea8161e491a4c8dfaeff9ebfe02b679"></a>
<a id="a8a82d0a983c502e1dc97944ab496d8e5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8a82d0a983c502e1dc97944ab496d8e5">&#9670;&nbsp;</a></span>isPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -681,7 +718,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a73fbaa112f66b6c334c549ff594b1fb7"></a>
<a id="a4ea88dd9784318190a3705345c47904a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4ea88dd9784318190a3705345c47904a">&#9670;&nbsp;</a></span>validate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -697,7 +736,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a85fa721541a39571c3ade06992035bad"></a>
<a id="a85fa721541a39571c3ade06992035bad"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a85fa721541a39571c3ade06992035bad">&#9670;&nbsp;</a></span>setDisplayStyle()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -722,7 +763,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ad14d519b0a4c964d7a786739499571dd"></a>
<a id="ad14d519b0a4c964d7a786739499571dd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad14d519b0a4c964d7a786739499571dd">&#9670;&nbsp;</a></span>setSCALE_X()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -747,7 +790,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a69416219076a00900f58d0d5e0ac55a9"></a>
<a id="a69416219076a00900f58d0d5e0ac55a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a69416219076a00900f58d0d5e0ac55a9">&#9670;&nbsp;</a></span>setDISPLAY()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -772,7 +817,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ad204e8f425d3a35bba494a60d4b4ff69"></a>
<a id="ad204e8f425d3a35bba494a60d4b4ff69"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad204e8f425d3a35bba494a60d4b4ff69">&#9670;&nbsp;</a></span>setIN_LO()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -797,7 +844,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a62965d987f17d2853afd44004ff20b1b"></a>
<a id="a62965d987f17d2853afd44004ff20b1b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62965d987f17d2853afd44004ff20b1b">&#9670;&nbsp;</a></span>setIN_PH()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -822,7 +871,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a57a42a469f6cf94ba39e5b7aacfa738c"></a>
<a id="a57a42a469f6cf94ba39e5b7aacfa738c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a57a42a469f6cf94ba39e5b7aacfa738c">&#9670;&nbsp;</a></span>setOUT_LO()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -847,7 +898,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a2785f1ae18e4293ce7e9e0bac791e495"></a>
<a id="a2785f1ae18e4293ce7e9e0bac791e495"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2785f1ae18e4293ce7e9e0bac791e495">&#9670;&nbsp;</a></span>setOUT_PH()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -872,7 +925,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ae96c850eadc89d1705b9aa0256f434ea"></a>
<a id="ae96c850eadc89d1705b9aa0256f434ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae96c850eadc89d1705b9aa0256f434ea">&#9670;&nbsp;</a></span>setPOWER()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -889,7 +944,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac956b6814f89975563a3667945599fb2"></a>
<a id="ac956b6814f89975563a3667945599fb2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac956b6814f89975563a3667945599fb2">&#9670;&nbsp;</a></span>setGROUND()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -906,7 +963,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a7ddc44d7f27745179c397445bce35c58"></a>
<a id="a7ddc44d7f27745179c397445bce35c58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ddc44d7f27745179c397445bce35c58">&#9670;&nbsp;</a></span>setCLOCK()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -923,7 +982,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="af18cbbcdfb458b69dbb6de0dbb564a3a"></a>
<a id="af18cbbcdfb458b69dbb6de0dbb564a3a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af18cbbcdfb458b69dbb6de0dbb564a3a">&#9670;&nbsp;</a></span>setBLOCKAGE()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -936,12 +997,14 @@ Public Member Functions</h2></td></tr>
</tr>
</table>
</div><div class="memdoc">
<p>With the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/namespaceHurricane.html">Hurricane</a> database you cannot create physical components whithout a net. All segments used for signaling blockage area are grouped inside a unique net, which name is given by this variable.</p>
<dl class="section user"><dt>Remark:</dt><dd>Be sure to use a significant name which is not likely to collide with true nets. </dd></dl>
<p>With the Hurricane database you cannot create physical components whithout a net. All segments used for signaling blockage area are grouped inside a unique net, which name is given by this variable.</p>
<dl class="section user"><dt>Remark: Be sure to use a significant name which is not likely to collide</dt><dd>with true nets. </dd></dl>
</div>
</div>
<a class="anchor" id="a06c179d70d3065f0bfe398a02e4c6359"></a>
<a id="a06c179d70d3065f0bfe398a02e4c6359"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a06c179d70d3065f0bfe398a02e4c6359">&#9670;&nbsp;</a></span>setPad()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -958,7 +1021,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a02b727f207875cebefbb59842c1efe70"></a>
<a id="a02b727f207875cebefbb59842c1efe70"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a02b727f207875cebefbb59842c1efe70">&#9670;&nbsp;</a></span>setCATALOG()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -983,7 +1048,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a315f5a14de9dc354cf81728adb29a8c6"></a>
<a id="a315f5a14de9dc354cf81728adb29a8c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a315f5a14de9dc354cf81728adb29a8c6">&#9670;&nbsp;</a></span>setWORKING_LIBRARY()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -1006,11 +1073,13 @@ Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p>Sets the directory in which create cells will be saved. </p>
<p>References <a class="el" href="classCRL_1_1SearchPath.html#a6cd1524e1048f246682cd5ef40145d67">CRL::SearchPath::replace()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1SearchPath.html#a6cd1524e1048f246682cd5ef40145d67">CRL::SearchPath::replace()</a>.</p>
</div>
</div>
<a class="anchor" id="a7c3bff1fa3f9a080461950db36df4416"></a>
<a id="a7c3bff1fa3f9a080461950db36df4416"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7c3bff1fa3f9a080461950db36df4416">&#9670;&nbsp;</a></span>addSYSTEM_LIBRARY()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -1050,7 +1119,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a27c6a85b22ace1d2407e6cb75771cb32"></a>
<a id="a9d55dc4dc591a1d3404af53b72ab7f8e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d55dc4dc591a1d3404af53b72ab7f8e">&#9670;&nbsp;</a></span>getPrint()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -1075,7 +1146,7 @@ Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1GraphicTool.html">GraphicTool</a></li> </ul>
@ -62,7 +54,7 @@
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1GraphicTool.html">GraphicTool</a></li> </ul>
@ -70,10 +62,12 @@ Public Member Functions</h2></td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Base Class to Hook ToolEngines into the CellViewer. </p>
<p>This class implement the graphical conterpart of a <a class="el" href="classCRL_1_1ToolEngine.html" title="Base Class of all Coriolis Tools. ">ToolEngine</a>. It is designed to work with the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/unicorn/doc/unicorn/html/unicorn.tag:../unicorn" href="../unicorn/namespaceUnicorn.html">Unicorn</a> GUI, to insert new menus and possibly define new graphical overlays (that are <em>not</em> associated to <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1BasicLayer.html">Hurricane::BasicLayer</a>).</p>
<p>Derived classes should provide a method that returns a new <a class="el" href="classCRL_1_1GraphicTool.html" title="Base Class to Hook ToolEngines into the CellViewer. ">GraphicTool</a> to be passed to the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/unicorn/doc/unicorn/html/unicorn.tag:../unicorn" href="../unicorn/classUnicorn_1_1UnicornGui.html#a89346bccf1908c92786987d046aa6175">Unicorn::UnicornGui::registerTool()</a> method. For our tools, we choose to systematically implement a <code>static</code> method which we name <em>grab()</em>. </p>
<p>This class implement the graphical conterpart of a <a class="el" href="classCRL_1_1ToolEngine.html" title="Base Class of all Coriolis Tools. ">ToolEngine</a>. It is designed to work with the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/unicorn/doc/unicorn/html/unicorn.tag:../unicorn/" href="../unicorn/namespaceUnicorn.html">Unicorn</a> GUI, to insert new menus and possibly define new graphical overlays (that are <em>not</em> associated to <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1BasicLayer.html">Hurricane::BasicLayer</a>).</p>
<p>Derived classes should provide a method that returns a new <a class="el" href="classCRL_1_1GraphicTool.html" title="Base Class to Hook ToolEngines into the CellViewer. ">GraphicTool</a> to be passed to the <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/unicorn/doc/unicorn/html/unicorn.tag:../unicorn/" href="../unicorn/classUnicorn_1_1UnicornGui.html#a89346bccf1908c92786987d046aa6175">Unicorn::UnicornGui::registerTool()</a> method. For our tools, we choose to systematically implement a <code>static</code> method which we name <em>grab()</em>. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a63941f6c930c08087935ea3e276ee9a9"></a>
<a id="a63941f6c930c08087935ea3e276ee9a9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a63941f6c930c08087935ea3e276ee9a9">&#9670;&nbsp;</a></span>addToMenu()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -98,7 +92,9 @@ Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4420ce085389f1f9111735031467848d"></a>
<a id="a4420ce085389f1f9111735031467848d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4420ce085389f1f9111735031467848d">&#9670;&nbsp;</a></span>getName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -131,7 +127,7 @@ Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1RoutingGauge.html">RoutingGauge</a></li> </ul>
@ -56,27 +48,27 @@
<p>This is the complete list of members for <a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a32313fbc68080e0b7e03b3e06dc1d9c5">addLayerGauge</a>(RoutingLayerGauge *layerGauge)</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a70897b3776ccc713b0a45804b66a1b62">checkConnexity</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#ae76259fdd9d27d1127ac201c41ab8c20">checkConnexity</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a7258273728f5db47e422d5914c1c36bd">create</a>(const char *name)</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a4726a734f9aff09873c4034e5169a93a">destroy</a>()</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a1bea95781196b75705c8e090ff81bd7f">getClone</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#ab7d83a8694be580a6a4b9aa60adcb0b0">getContactLayer</a>(size_t depth) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a5f39ce15b420c5d0c9eaa10046b6297b">getDepth</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a40e8127ea7a26b26c3e797571b03121a">getLayerDepth</a>(const Layer *) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#aa48835602dc8e2495e56ca4e4c32da58">getLayerDirection</a>(const Layer *) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a4974740815b090166949bbc113fbf634">getLayerDirection</a>(size_t depth) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#aeeb5a871cc28d5fdb00661244beef46f">getLayerGauge</a>(const Layer *) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#ac4ce3200241f3c24c461cd05b270d1bf">getLayerGauge</a>(size_t depth) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a9e83c61bbac640a14fe7dc37b33f1a27">getLayerGauges</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a76b02f56584f8397fd24a8bb63606971">getName</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#aaa35c92a1bd8fdf022014b684eab9b40">getRoutingLayer</a>(size_t depth) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#ab6f0b40c0b74e3b40ee41c807ce7ab00">getTechnology</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a210f2ca35bdb8c8e0ccb3a671659554e">getClone</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a4b603c0fd5f21db1c93d8a747ec1f4ba">getContactLayer</a>(size_t depth) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#aed316848ee74c270bf117562e8d5faa0">getDepth</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#ac429c6ad1b2af7c588c60eff35c2d02e">getLayerDepth</a>(const Layer *) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#ac553c4dc3f51576a3128ad42d5a006b2">getLayerDirection</a>(const Layer *) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#ab237249b41f605947765118cd1c59635">getLayerDirection</a>(size_t depth) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#aa0f0e65f45814ba0104daafbc271a12d">getLayerGauge</a>(const Layer *) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a1b6d28bbee28db727ffe13e6205dbae8">getLayerGauge</a>(size_t depth) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#ae8cebef061519fb2df94e3a9dcf09e6e">getLayerGauges</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a9a8eb201ffaca26bb563f7a34846c0c4">getName</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a6d6c1951c8728886d3fb702891685b94">getRoutingLayer</a>(size_t depth) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html#a34cb010c6d36875f4890bddc78fb8861">getTechnology</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingGauge.html">CRL::RoutingGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<br>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1RoutingGauge.html">RoutingGauge</a></li> </ul>
@ -64,35 +56,34 @@
Public Member Functions</h2></td></tr>
<tr class="memitem:a4726a734f9aff09873c4034e5169a93a"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a4726a734f9aff09873c4034e5169a93a">destroy</a> ()</td></tr>
<tr class="separator:a4726a734f9aff09873c4034e5169a93a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1bea95781196b75705c8e090ff81bd7f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1RoutingGauge.html">RoutingGauge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a1bea95781196b75705c8e090ff81bd7f">getClone</a> () const </td></tr>
<tr class="separator:a1bea95781196b75705c8e090ff81bd7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76b02f56584f8397fd24a8bb63606971"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a76b02f56584f8397fd24a8bb63606971">getName</a> () const </td></tr>
<tr class="separator:a76b02f56584f8397fd24a8bb63606971"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6f0b40c0b74e3b40ee41c807ce7ab00"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Technology.html">Technology</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#ab6f0b40c0b74e3b40ee41c807ce7ab00">getTechnology</a> () const </td></tr>
<tr class="separator:ab6f0b40c0b74e3b40ee41c807ce7ab00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f39ce15b420c5d0c9eaa10046b6297b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a5f39ce15b420c5d0c9eaa10046b6297b">getDepth</a> () const </td></tr>
<tr class="separator:a5f39ce15b420c5d0c9eaa10046b6297b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeeb5a871cc28d5fdb00661244beef46f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">RoutingLayerGauge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#aeeb5a871cc28d5fdb00661244beef46f">getLayerGauge</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *) const </td></tr>
<tr class="separator:aeeb5a871cc28d5fdb00661244beef46f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40e8127ea7a26b26c3e797571b03121a"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a40e8127ea7a26b26c3e797571b03121a">getLayerDepth</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *) const </td></tr>
<tr class="separator:a40e8127ea7a26b26c3e797571b03121a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa48835602dc8e2495e56ca4e4c32da58"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#aa48835602dc8e2495e56ca4e4c32da58">getLayerDirection</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *) const </td></tr>
<tr class="separator:aa48835602dc8e2495e56ca4e4c32da58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4ce3200241f3c24c461cd05b270d1bf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">RoutingLayerGauge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#ac4ce3200241f3c24c461cd05b270d1bf">getLayerGauge</a> (size_t depth) const </td></tr>
<tr class="separator:ac4ce3200241f3c24c461cd05b270d1bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4974740815b090166949bbc113fbf634"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a4974740815b090166949bbc113fbf634">getLayerDirection</a> (size_t depth) const </td></tr>
<tr class="separator:a4974740815b090166949bbc113fbf634"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa35c92a1bd8fdf022014b684eab9b40"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#aaa35c92a1bd8fdf022014b684eab9b40">getRoutingLayer</a> (size_t depth) const </td></tr>
<tr class="separator:aaa35c92a1bd8fdf022014b684eab9b40"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7d83a8694be580a6a4b9aa60adcb0b0"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#ab7d83a8694be580a6a4b9aa60adcb0b0">getContactLayer</a> (size_t depth) const </td></tr>
<tr class="separator:ab7d83a8694be580a6a4b9aa60adcb0b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e83c61bbac640a14fe7dc37b33f1a27"><td class="memItemLeft" align="right" valign="top">const vector<br class="typebreak"/>
&lt; <a class="el" href="classCRL_1_1RoutingLayerGauge.html">RoutingLayerGauge</a> * &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a9e83c61bbac640a14fe7dc37b33f1a27">getLayerGauges</a> () const </td></tr>
<tr class="separator:a9e83c61bbac640a14fe7dc37b33f1a27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a210f2ca35bdb8c8e0ccb3a671659554e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1RoutingGauge.html">RoutingGauge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a210f2ca35bdb8c8e0ccb3a671659554e">getClone</a> () const</td></tr>
<tr class="separator:a210f2ca35bdb8c8e0ccb3a671659554e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a8eb201ffaca26bb563f7a34846c0c4"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Name.html">Name</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a9a8eb201ffaca26bb563f7a34846c0c4">getName</a> () const</td></tr>
<tr class="separator:a9a8eb201ffaca26bb563f7a34846c0c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34cb010c6d36875f4890bddc78fb8861"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Technology.html">Technology</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a34cb010c6d36875f4890bddc78fb8861">getTechnology</a> () const</td></tr>
<tr class="separator:a34cb010c6d36875f4890bddc78fb8861"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aed316848ee74c270bf117562e8d5faa0"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#aed316848ee74c270bf117562e8d5faa0">getDepth</a> () const</td></tr>
<tr class="separator:aed316848ee74c270bf117562e8d5faa0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0f0e65f45814ba0104daafbc271a12d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">RoutingLayerGauge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#aa0f0e65f45814ba0104daafbc271a12d">getLayerGauge</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *) const</td></tr>
<tr class="separator:aa0f0e65f45814ba0104daafbc271a12d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac429c6ad1b2af7c588c60eff35c2d02e"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#ac429c6ad1b2af7c588c60eff35c2d02e">getLayerDepth</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *) const</td></tr>
<tr class="separator:ac429c6ad1b2af7c588c60eff35c2d02e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac553c4dc3f51576a3128ad42d5a006b2"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#ac553c4dc3f51576a3128ad42d5a006b2">getLayerDirection</a> (const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *) const</td></tr>
<tr class="separator:ac553c4dc3f51576a3128ad42d5a006b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b6d28bbee28db727ffe13e6205dbae8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">RoutingLayerGauge</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a1b6d28bbee28db727ffe13e6205dbae8">getLayerGauge</a> (size_t depth) const</td></tr>
<tr class="separator:a1b6d28bbee28db727ffe13e6205dbae8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab237249b41f605947765118cd1c59635"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#ab237249b41f605947765118cd1c59635">getLayerDirection</a> (size_t depth) const</td></tr>
<tr class="separator:ab237249b41f605947765118cd1c59635"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6d6c1951c8728886d3fb702891685b94"><td class="memItemLeft" align="right" valign="top">const <a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a6d6c1951c8728886d3fb702891685b94">getRoutingLayer</a> (size_t depth) const</td></tr>
<tr class="separator:a6d6c1951c8728886d3fb702891685b94"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b603c0fd5f21db1c93d8a747ec1f4ba"><td class="memItemLeft" align="right" valign="top"><a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/" href="../hurricane/classHurricane_1_1Layer.html">Layer</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a4b603c0fd5f21db1c93d8a747ec1f4ba">getContactLayer</a> (size_t depth) const</td></tr>
<tr class="separator:a4b603c0fd5f21db1c93d8a747ec1f4ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8cebef061519fb2df94e3a9dcf09e6e"><td class="memItemLeft" align="right" valign="top">const vector&lt; <a class="el" href="classCRL_1_1RoutingLayerGauge.html">RoutingLayerGauge</a> * &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#ae8cebef061519fb2df94e3a9dcf09e6e">getLayerGauges</a> () const</td></tr>
<tr class="separator:ae8cebef061519fb2df94e3a9dcf09e6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a32313fbc68080e0b7e03b3e06dc1d9c5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a32313fbc68080e0b7e03b3e06dc1d9c5">addLayerGauge</a> (<a class="el" href="classCRL_1_1RoutingLayerGauge.html">RoutingLayerGauge</a> *layerGauge)</td></tr>
<tr class="separator:a32313fbc68080e0b7e03b3e06dc1d9c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a70897b3776ccc713b0a45804b66a1b62"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#a70897b3776ccc713b0a45804b66a1b62">checkConnexity</a> () const </td></tr>
<tr class="separator:a70897b3776ccc713b0a45804b66a1b62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae76259fdd9d27d1127ac201c41ab8c20"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCRL_1_1RoutingGauge.html#ae76259fdd9d27d1127ac201c41ab8c20">checkConnexity</a> () const</td></tr>
<tr class="separator:ae76259fdd9d27d1127ac201c41ab8c20"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
@ -102,7 +93,9 @@ Static Public Member Functions</h2></td></tr>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Gauge for the detailed routing. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a7258273728f5db47e422d5914c1c36bd"></a>
<a id="a7258273728f5db47e422d5914c1c36bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7258273728f5db47e422d5914c1c36bd">&#9670;&nbsp;</a></span>create()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -127,7 +120,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4726a734f9aff09873c4034e5169a93a"></a>
<a id="a4726a734f9aff09873c4034e5169a93a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4726a734f9aff09873c4034e5169a93a">&#9670;&nbsp;</a></span>destroy()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -151,7 +146,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a1bea95781196b75705c8e090ff81bd7f"></a>
<a id="a210f2ca35bdb8c8e0ccb3a671659554e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a210f2ca35bdb8c8e0ccb3a671659554e">&#9670;&nbsp;</a></span>getClone()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -167,7 +164,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a76b02f56584f8397fd24a8bb63606971"></a>
<a id="a9a8eb201ffaca26bb563f7a34846c0c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a8eb201ffaca26bb563f7a34846c0c4">&#9670;&nbsp;</a></span>getName()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -191,7 +190,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab6f0b40c0b74e3b40ee41c807ce7ab00"></a>
<a id="a34cb010c6d36875f4890bddc78fb8861"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a34cb010c6d36875f4890bddc78fb8861">&#9670;&nbsp;</a></span>getTechnology()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -215,7 +216,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a5f39ce15b420c5d0c9eaa10046b6297b"></a>
<a id="aed316848ee74c270bf117562e8d5faa0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aed316848ee74c270bf117562e8d5faa0">&#9670;&nbsp;</a></span>getDepth()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -239,7 +242,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aeeb5a871cc28d5fdb00661244beef46f"></a>
<a id="aa0f0e65f45814ba0104daafbc271a12d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa0f0e65f45814ba0104daafbc271a12d">&#9670;&nbsp;</a></span>getLayerGauge() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -254,11 +259,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> the <a class="el" href="classCRL_1_1RoutingLayerGauge.html" title="Gauge of a Layer for the detailed routing. ">RoutingLayerGauge</a> associated with <code>layer</code>. NULL if <code>layer</code> is not managed by the gauge. </p>
<p>Referenced by <a class="el" href="classCRL_1_1RoutingGauge.html#a4974740815b090166949bbc113fbf634">getLayerDirection()</a>.</p>
<p class="reference">Referenced by <a class="el" href="classCRL_1_1RoutingGauge.html#ab237249b41f605947765118cd1c59635">getLayerDirection()</a>.</p>
</div>
</div>
<a class="anchor" id="a40e8127ea7a26b26c3e797571b03121a"></a>
<a id="ac429c6ad1b2af7c588c60eff35c2d02e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac429c6ad1b2af7c588c60eff35c2d02e">&#9670;&nbsp;</a></span>getLayerDepth()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -275,7 +282,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="aa48835602dc8e2495e56ca4e4c32da58"></a>
<a id="ac553c4dc3f51576a3128ad42d5a006b2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac553c4dc3f51576a3128ad42d5a006b2">&#9670;&nbsp;</a></span>getLayerDirection() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -292,7 +301,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ac4ce3200241f3c24c461cd05b270d1bf"></a>
<a id="a1b6d28bbee28db727ffe13e6205dbae8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1b6d28bbee28db727ffe13e6205dbae8">&#9670;&nbsp;</a></span>getLayerGauge() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -309,7 +320,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a4974740815b090166949bbc113fbf634"></a>
<a id="ab237249b41f605947765118cd1c59635"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab237249b41f605947765118cd1c59635">&#9670;&nbsp;</a></span>getLayerDirection() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
@ -332,11 +345,13 @@ Static Public Member Functions</h2></td></tr>
</div><div class="memdoc">
<p><b>Returns:</b> the preferred routing direction at position <code>depth</code>. </p>
<p>References <a class="el" href="classCRL_1_1RoutingLayerGauge.html#a470d6816a1618d025554339dd9016806">CRL::RoutingLayerGauge::getDirection()</a>, and <a class="el" href="classCRL_1_1RoutingGauge.html#aeeb5a871cc28d5fdb00661244beef46f">getLayerGauge()</a>.</p>
<p class="reference">References <a class="el" href="classCRL_1_1RoutingLayerGauge.html#a14971f88ab84cdd1cbe3a5e31f039fa1">CRL::RoutingLayerGauge::getDirection()</a>, and <a class="el" href="classCRL_1_1RoutingGauge.html#aa0f0e65f45814ba0104daafbc271a12d">getLayerGauge()</a>.</p>
</div>
</div>
<a class="anchor" id="aaa35c92a1bd8fdf022014b684eab9b40"></a>
<a id="a6d6c1951c8728886d3fb702891685b94"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6d6c1951c8728886d3fb702891685b94">&#9670;&nbsp;</a></span>getRoutingLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -353,7 +368,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="ab7d83a8694be580a6a4b9aa60adcb0b0"></a>
<a id="a4b603c0fd5f21db1c93d8a747ec1f4ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b603c0fd5f21db1c93d8a747ec1f4ba">&#9670;&nbsp;</a></span>getContactLayer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -370,7 +387,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a9e83c61bbac640a14fe7dc37b33f1a27"></a>
<a id="ae8cebef061519fb2df94e3a9dcf09e6e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8cebef061519fb2df94e3a9dcf09e6e">&#9670;&nbsp;</a></span>getLayerGauges()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -386,7 +405,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a32313fbc68080e0b7e03b3e06dc1d9c5"></a>
<a id="a32313fbc68080e0b7e03b3e06dc1d9c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a32313fbc68080e0b7e03b3e06dc1d9c5">&#9670;&nbsp;</a></span>addLayerGauge()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -403,7 +424,9 @@ Static Public Member Functions</h2></td></tr>
</div>
</div>
<a class="anchor" id="a70897b3776ccc713b0a45804b66a1b62"></a>
<a id="ae76259fdd9d27d1127ac201c41ab8c20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae76259fdd9d27d1127ac201c41ab8c20">&#9670;&nbsp;</a></span>checkConnexity()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
@ -428,7 +451,7 @@ Static Public Member Functions</h2></td></tr>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

View File

@ -24,24 +24,16 @@
-->
<br>
<body onload="javascript:toggleLevel(1)">
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceCRL.html">CRL</a></li><li class="navelem"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">RoutingLayerGauge</a></li> </ul>
@ -57,29 +49,29 @@
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#afe17db013bf6a933c2af4e847bfd7918">create</a>(const Layer *layer, Constant::Direction direction, Constant::LayerGaugeType type, unsigned int depth, double density, DbU::Unit offset, DbU::Unit pitch, DbU::Unit wireWidth, DbU::Unit viaWidth, DbU::Unit obsDw)</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a323c68a66f89908a1376d5464655efe3">destroy</a>()</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a2a2231bbb064fe316977291df7ef016c">divide</a>(DbU::Unit dividend, long &amp;quotient, long &amp;modulo) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a7897537343c1221f169ce41f0ff27db3">getBlockageLayer</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a0bd52d4144796842d7a54c99cd6f4d99">getDensity</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ac8a5185ee8e2340441a4ea9b8533eb82">getDepth</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a470d6816a1618d025554339dd9016806">getDirection</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a881c22dde5ec55d52009f73051aaaa2a">getHalfPitch</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a74ee6aee07965ed8ef80ccf12f6d4984">getHalfViaWidth</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#aca47ad42af7852a7a30d7b470b43f290">getHalfWireWidth</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ade7d6ecbdd9119586f1ec1c7fd947e0d">getLayer</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a8198760dcc2592364b11ad8058e60263">getOffset</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a07142a98dec202b40de98b29d62cec8a">getPitch</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a4e51ea096d791f11949d8c732d8372ae">getTrackIndex</a>(DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ab9a7e3219b19617f91cd89c6e7eeaee2">getTrackNumber</a>(DbU::Unit start, DbU::Unit stop) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a74e70ddcc3f05807c914f5d25a8d2430">getTrackPosition</a>(DbU::Unit start, unsigned depth) const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a8020ed897ea9b7dce1f98ab2b40b29bf">getType</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a5fbf1913fb9198f8a56c969c9fec983f">getViaWidth</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#af8d0766b3741ef041bb40805e9ade562">getWireWidth</a>() const </td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ab8d5ae22c453605226b2695c2568c4f5">divide</a>(DbU::Unit dividend, long &amp;quotient, long &amp;modulo) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#aa6c48e5acc6985997aa0417ef614f69d">getBlockageLayer</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a2f118224198a7794629e3582f2f7a80b">getDensity</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a2c154cf6be98a71ab29d98faafae485f">getDepth</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a14971f88ab84cdd1cbe3a5e31f039fa1">getDirection</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#aaf1ada741341b95d0f24fff97a242ef1">getHalfPitch</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a0f090ea25ef6f88e691fc6e572f79e16">getHalfViaWidth</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a57183085c39be7edcb87f4f770f8e535">getHalfWireWidth</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a7e024262e549b6109b720c07e28ab16c">getLayer</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a35211769a258807de8d24380b56f3c7c">getOffset</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a94c216b22d35e8cb6a91a9597ba592ce">getPitch</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ad61cdf130c8b739bb44a01cfd5968022">getTrackIndex</a>(DbU::Unit start, DbU::Unit stop, DbU::Unit position, unsigned mode) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ab9bbb7959ca58438d59709398044daae">getTrackNumber</a>(DbU::Unit start, DbU::Unit stop) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#a470828019c5cde566e7aa6d27ef68439">getTrackPosition</a>(DbU::Unit start, unsigned depth) const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ab0e0d9e98b9a75312433a39aef247950">getType</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ac0783d29a7f9f6a2f02ac72f3196d637">getViaWidth</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html#ab29fa7895f4fe661eb85bed9f6a5860e">getWireWidth</a>() const</td><td class="entry"><a class="el" href="classCRL_1_1RoutingLayerGauge.html">CRL::RoutingLayerGauge</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<br>
<hr>
<table class="footer1">
<tr>
<td class="LFooter"><small>Generated by doxygen 1.8.5 on Mon Oct 1 2018</small></td>
<td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Oct 18 2018</small></td>
<td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td>
</tr>
</table>

Some files were not shown because too many files have changed in this diff Show More