From fc805bf5005b49c2c0bc08bf11cff5b832e3c654 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Wed, 17 Apr 2013 16:14:41 +0000 Subject: [PATCH] * ./hurricane/sr/isobar: - New: In PyDataBase, added method for getDB (the correct name, as alias) and getRootLibrary(). - New: In PyComponent, added support for the optional BasicLayer argument of getBoundingBox(). - New: In PyEntity, added support for conversion to/from RoutingPad. - New: In PyHyperNet, added support for getNetOccurrences(). - New: In PyLibrary, added support for getLibrary(). - New: In NetExternalComponents, added support for setExternal(). --- hurricane/src/isobar/PyCell.cpp | 2 - hurricane/src/isobar/PyComponent.cpp | 27 +++- hurricane/src/isobar/PyDataBase.cpp | 116 ++++---------- hurricane/src/isobar/PyEntity.cpp | 5 + hurricane/src/isobar/PyHurricane.cpp | 3 +- hurricane/src/isobar/PyHyperNet.cpp | 144 ++++++------------ hurricane/src/isobar/PyLibrary.cpp | 113 +++++--------- .../src/isobar/PyNetExternalComponents.cpp | 34 ++++- hurricane/src/isobar/PyRoutingPad.cpp | 2 - .../src/isobar/hurricane/isobar/PyDataBase.h | 1 + 10 files changed, 178 insertions(+), 269 deletions(-) diff --git a/hurricane/src/isobar/PyCell.cpp b/hurricane/src/isobar/PyCell.cpp index 38d80b65..13347137 100644 --- a/hurricane/src/isobar/PyCell.cpp +++ b/hurricane/src/isobar/PyCell.cpp @@ -61,8 +61,6 @@ extern "C" { // Standart Delete (Attribute). DBoDestroyAttribute(PyCell_destroy,PyCell) - - // --------------------------------------------------------------- // Attribute Method : "PyCell_getLibrary ()" diff --git a/hurricane/src/isobar/PyComponent.cpp b/hurricane/src/isobar/PyComponent.cpp index 67e4efc8..5d8efd6e 100644 --- a/hurricane/src/isobar/PyComponent.cpp +++ b/hurricane/src/isobar/PyComponent.cpp @@ -19,6 +19,7 @@ #include "hurricane/isobar/PyLayer.h" #include "hurricane/isobar/PyPoint.h" #include "hurricane/isobar/PyBox.h" +#include "hurricane/isobar/PyBasicLayer.h" #include "hurricane/isobar/PyComponent.h" #include "hurricane/isobar/PyPlug.h" #include "hurricane/isobar/PyHorizontal.h" @@ -132,19 +133,33 @@ extern "C" { // --------------------------------------------------------------- // Attribute Method : "PyComponent_getBoundingBox ()" - static PyObject* PyComponent_getBoundingBox ( PyComponent *self ) { + static PyObject* PyComponent_getBoundingBox ( PyComponent *self, PyObject* args ) + { trace << "PyComponent_getBoundingBox ()" << endl; METHOD_HEAD ( "Component.getBoundingBox()" ) PyBox* pyBox = PyObject_NEW ( PyBox, &PyTypeBox ); - if (pyBox == NULL) { return NULL; } - trace_out (); + if (pyBox == NULL) return NULL; HTRY - pyBox->_object = new Box ( component->getBoundingBox() ); + PyObject* pyLayer = NULL; + if (PyArg_ParseTuple( args, "|O:Component.getBoundingBox", &pyLayer )) { + if (pyLayer) { + if (not IsPyBasicLayer(pyLayer)) { + PyErr_SetString( ConstructorError, "Component.getBoundingBox(): First argument is not of type BasicLayer." ); + return NULL; + } + pyBox->_object = new Box ( component->getBoundingBox(PYBASICLAYER_O(pyLayer)) ); + } else { + pyBox->_object = new Box ( component->getBoundingBox() ); + } + } else { + PyErr_SetString( ConstructorError, "Bad parameters given to Component.getBoundingBox()." ); + return NULL; + } HCATCH - return ( (PyObject*)pyBox ); + return (PyObject*)pyBox; } @@ -159,7 +174,7 @@ extern "C" { , { "getCenter" , (PyCFunction)PyComponent_getCenter , METH_NOARGS , "Return the Component center position." } , { "getNet" , (PyCFunction)PyComponent_getNet , METH_NOARGS , "Returns the net owning the component." } , { "getLayer" , (PyCFunction)PyComponent_getLayer , METH_NOARGS , "Return the component layer." } - , { "getBoundingBox" , (PyCFunction)PyComponent_getBoundingBox, METH_NOARGS , "Return the component boundingBox." } + , { "getBoundingBox" , (PyCFunction)PyComponent_getBoundingBox, METH_VARARGS, "Return the component boundingBox (optionally on a BasicLayer)." } , { "destroy" , (PyCFunction)PyComponent_destroy , METH_NOARGS , "destroy associated hurricane object, the python object remains." } , {NULL, NULL, 0, NULL} /* sentinel */ diff --git a/hurricane/src/isobar/PyDataBase.cpp b/hurricane/src/isobar/PyDataBase.cpp index 2691fe20..2382208f 100644 --- a/hurricane/src/isobar/PyDataBase.cpp +++ b/hurricane/src/isobar/PyDataBase.cpp @@ -1,42 +1,10 @@ // -*- C++ -*- // -// This file is part of the Coriolis Project. -// Copyright (C) Laboratoire LIP6 - Departement ASIM -// Universite Pierre et Marie Curie +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2013, All Rights Reserved // -// Main contributors : -// Christophe Alexandre -// Sophie Belloeil -// Hugo Clément -// Jean-Paul Chaput -// Damien Dupuis -// Christian Masson -// Marek Sroka -// -// The Coriolis Project is free software; you can redistribute it -// and/or modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 of -// the License, or (at your option) any later version. -// -// The Coriolis Project is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with the Coriolis Project; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA -// -// License-Tag -// Authors-Tag -// =================================================================== -// -// $Id: PyDataBase.cpp,v 1.1 2008/02/07 19:09:57 xtof Exp $ -// -// x-----------------------------------------------------------------x -// | | +// +-----------------------------------------------------------------+ // | C O R I O L I S | // | I s o b a r - Hurricane / Python Interface | // | | @@ -44,16 +12,12 @@ // | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | =============================================================== | // | C++ Module : "./PyDataBase.cpp" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x - - +// +-----------------------------------------------------------------+ #include "hurricane/isobar/PyDataBase.h" #include "hurricane/isobar/PyTechnology.h" +#include "hurricane/isobar/PyLibrary.h" namespace Isobar { @@ -66,25 +30,16 @@ extern "C" { #define METHOD_HEAD(function) GENERIC_METHOD_HEAD(DataBase,db,function) -// x=================================================================x -// | "PyDataBase" Python Module Code Part | -// x=================================================================x +// +=================================================================+ +// | "PyDataBase" Python Module Code Part | +// +=================================================================+ + #if defined(__PYTHON_MODULE__) -// x-------------------------------------------------------------x -// | "PyDataBase" Attribute Methods | -// x-------------------------------------------------------------x - - - - -// --------------------------------------------------------------- -// Attribute Method : "PyDataBase_getDataBase ()" - - PyObject* PyDataBase_getDataBase ( PyObject* module ) { - trace << "PyDataBase_getDataBase()" << endl; + PyObject* PyDataBase_getDB ( PyObject* module ) { + trace << "PyDataBase_getDB()" << endl; DataBase* db = NULL; @@ -97,8 +52,6 @@ extern "C" { return PyDataBase_Link ( db ); } - // --------------------------------------------------------------- - // Attribute Method : "PyDataBase_getTechnology ()" PyObject* PyDataBase_getTechnology ( PyDataBase* self ) { trace << "PyDataBase_getTechnology()" << endl; @@ -117,45 +70,48 @@ extern "C" { return PyTechnology_Link ( techno ); } + + static PyObject* PyDataBase_getRootLibrary ( PyDataBase *self ) { + trace << "PyDataBase_getRootLibrary ()" << endl; + + Library* library = NULL; + + HTRY + METHOD_HEAD ( "DataBase.getRootLibrary()" ) + library = db->getRootLibrary (); + HCATCH + + return PyLibrary_Link(library); + } + // Standart Accessors (Attributes). - - // Standart Destroy (Attribute). DBoDestroyAttribute(PyDataBase_destroy,PyDataBase) - - // --------------------------------------------------------------- // PyDataBase Attribute Method table. PyMethodDef PyDataBase_Methods[] = - { { "getTechnology", (PyCFunction)PyDataBase_getTechnology, METH_NOARGS, "Return the Technology" } - , { "destroy" , (PyCFunction)PyDataBase_destroy , METH_NOARGS - , "Destroy associated hurricane object The python object remains." } + { { "getTechnology" , (PyCFunction)PyDataBase_getTechnology , METH_NOARGS, "Return the Technology" } + , { "getRootLibrary", (PyCFunction)PyDataBase_getRootLibrary, METH_NOARGS, "Return the root library" } + , { "destroy" , (PyCFunction)PyDataBase_destroy , METH_NOARGS + , "Destroy associated hurricane object The python object remains." } , {NULL, NULL, 0, NULL} /* sentinel */ }; - - - // x-------------------------------------------------------------x - // | "PyDataBase" Object Methods | - // x-------------------------------------------------------------x - DBoDeleteMethod(DataBase) PyTypeObjectLinkPyType(DataBase) #else // End of Python Module Code Part. -// x=================================================================x +// +=================================================================+ // | "PyDataBase" Shared Library Code Part | -// x=================================================================x +// +=================================================================+ - // --------------------------------------------------------------- - // Attribute Method : "PyDataBase_create ()" PyObject* PyDataBase_create ( PyObject *module ) { trace << "PyDataBase_create()" << endl; @@ -170,23 +126,17 @@ extern "C" { } - // Link/Creation Method. - DBoLinkCreateMethod(DataBase) - // --------------------------------------------------------------- - // PyDataBase Object Definitions. PyTypeObjectDefinitions(DataBase) #endif // End of Shared Library Code Part. -} // End of extern "C". +} // extern "C". - - -} // End of Isobar namespace. +} // Isobar namespace. diff --git a/hurricane/src/isobar/PyEntity.cpp b/hurricane/src/isobar/PyEntity.cpp index c50ac1c5..bbc93b2d 100644 --- a/hurricane/src/isobar/PyEntity.cpp +++ b/hurricane/src/isobar/PyEntity.cpp @@ -29,6 +29,7 @@ #include "hurricane/isobar/PyContact.h" #include "hurricane/isobar/PyPad.h" #include "hurricane/isobar/PyPin.h" +#include "hurricane/isobar/PyRoutingPad.h" #include "hurricane/Cell.h" namespace Isobar { @@ -125,6 +126,9 @@ extern "C" { Reference* reference = dynamic_cast(entity); if ( reference ) return PyReference_Link ( reference ); + RoutingPad* rp = dynamic_cast(entity); + if ( rp ) return PyRoutingPad_Link ( rp ); + Horizontal* horizontal = dynamic_cast(entity); if ( horizontal ) return PyHorizontal_Link ( horizontal ); @@ -173,6 +177,7 @@ Hurricane::Entity* EntityCast ( PyObject* derivedObject ) { if ( IsPyPlug (derivedObject) ) return PYPLUG_O(derivedObject); if ( IsPyHorizontal(derivedObject) ) return PYHORIZONTAL_O(derivedObject); if ( IsPyVertical (derivedObject) ) return PYVERTICAL_O(derivedObject); + if ( IsPyRoutingPad(derivedObject) ) return PYROUTINGPAD_O(derivedObject); if ( IsPyContact (derivedObject) ) return PYCONTACT_O(derivedObject); if ( IsPyPin (derivedObject) ) return PYPIN_O(derivedObject); if ( IsPyNet (derivedObject) ) return PYNET_O(derivedObject); diff --git a/hurricane/src/isobar/PyHurricane.cpp b/hurricane/src/isobar/PyHurricane.cpp index e9c10f34..570ee4f2 100644 --- a/hurricane/src/isobar/PyHurricane.cpp +++ b/hurricane/src/isobar/PyHurricane.cpp @@ -513,7 +513,8 @@ extern "C" { , { "Box" , PyBox_create , METH_VARARGS, "Creates a new Box." } , { "Transformation" , PyTransformation_create , METH_VARARGS, "Creates a new Transformation." } , { "DataBase" , (PyCFunction)PyDataBase_create , METH_NOARGS , "Creates the DataBase." } - , { "getDataBase" , (PyCFunction)PyDataBase_getDataBase , METH_NOARGS , "Gets the current DataBase." } + , { "getDB" , (PyCFunction)PyDataBase_getDB , METH_NOARGS , "Gets the current DataBase." } + , { "getDataBase" , (PyCFunction)PyDataBase_getDB , METH_NOARGS , "Gets the current DataBase." } , { "Library" , (PyCFunction)PyLibrary_create , METH_VARARGS, "Creates a new Library." } // , { "getLibrary" , (PyCFunction)PyLibrary_getLibrary , METH_NOARGS , "Gets the current Library." } , { "Reference" , (PyCFunction)PyReference_create , METH_VARARGS, "Creates a new Reference." } diff --git a/hurricane/src/isobar/PyHyperNet.cpp b/hurricane/src/isobar/PyHyperNet.cpp index 0623acaf..51ff8fc2 100644 --- a/hurricane/src/isobar/PyHyperNet.cpp +++ b/hurricane/src/isobar/PyHyperNet.cpp @@ -1,55 +1,18 @@ // -*- C++ -*- // -// This file is part of the Coriolis Project. -// Copyright (C) Laboratoire LIP6 - Departement ASIM -// Universite Pierre et Marie Curie +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2007-2013, All Rights Reserved // -// Main contributors : -// Christophe Alexandre -// Sophie Belloeil -// Hugo Clément -// Jean-Paul Chaput -// Damien Dupuis -// Christian Masson -// Marek Sroka -// -// The Coriolis Project is free software; you can redistribute it -// and/or modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 of -// the License, or (at your option) any later version. -// -// The Coriolis Project is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with the Coriolis Project; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA -// -// License-Tag -// Authors-Tag -// =================================================================== -// -// $Id: PyHyperNet.cpp,v 1.2 2007/05/10 11:15:56 d2 Exp $ -// -// x-----------------------------------------------------------------x -// | | +// +-----------------------------------------------------------------+ // | C O R I O L I S | // | I s o b a r - Hurricane / Python Interface | // | | -// | Author : Damien DUPUIS | -// | E-mail : Damien.Dupuis@lip6.fr | +// | Author : Jean-Paul CHAPUT | +// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | =============================================================== | // | C++ Module : "./PyHyperNet.cpp" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x - - +// +-----------------------------------------------------------------+ #include "hurricane/isobar/PyHyperNet.h" @@ -62,41 +25,47 @@ using namespace Hurricane; namespace Isobar { - - - extern "C" { - -# define METHOD_HEAD(function) GENERIC_METHOD_HEAD(HyperNet,hyperNet,function) +#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(HyperNet,hyperNet,function) -// x=================================================================x -// | "PyHyperNet" Python Module Code Part | -// x=================================================================x - -# if defined(__PYTHON_MODULE__) - - - // x-------------------------------------------------------------x - // | "PyHyperNet" Attribute Methods | - // x-------------------------------------------------------------x - +// +=================================================================+ +// | "PyHyperNet" Python Module Code Part | +// +=================================================================+ +#if defined(__PYTHON_MODULE__) // Standart Predicates (Attributes). DirectGetBoolAttribute(PyHyperNet_isValid ,isValid ,PyHyperNet,HyperNet) - // Standart Delete (Attribute). DirectDestroyAttribute(PyHyperNet_destroy, PyHyperNet) + static PyObject* PyHyperNet_getNetOccurrences(PyHyperNet *self) + { + trace << "PyHyperNet_getNetOccurrences()" << endl; + METHOD_HEAD ( "HyperNet.getNetOccurrences()" ) + + PyOccurrenceCollection* pyOccurrenceCollection = NULL; + + HTRY + Occurrences* occurrences = new Occurrences(hyperNet->getNetOccurrences()); + + pyOccurrenceCollection = PyObject_NEW(PyOccurrenceCollection, &PyTypeOccurrenceCollection); + if (pyOccurrenceCollection == NULL) { + return NULL; + } + + pyOccurrenceCollection->_object = occurrences; + HCATCH + + return (PyObject*)pyOccurrenceCollection; + } - // --------------------------------------------------------------- - // Attribute Method : "PyHyperNet_getLeafPlugOccurrences()" static PyObject* PyHyperNet_getLeafPlugOccurrences(PyHyperNet *self) { @@ -121,9 +90,6 @@ extern "C" { } - // --------------------------------------------------------------- - // Attribute Method : "PyHyperNet_getCell ()" - static PyObject* PyHyperNet_getCell ( PyHyperNet *self ) { trace << "PyHyperNet_getCell ()" << endl; @@ -139,41 +105,30 @@ extern "C" { } - - - - // --------------------------------------------------------------- - // PyHyperNet Attribute Method table. - PyMethodDef PyHyperNet_Methods[] = - { { "getCell" , (PyCFunction)PyHyperNet_getCell , METH_NOARGS , "Returns the hyperNet cell." } - , { "isValid" , (PyCFunction)PyHyperNet_isValid , METH_NOARGS , "Returns trus if the HyperNet isValid." } + { { "getCell" , (PyCFunction)PyHyperNet_getCell , METH_NOARGS , "Returns the hyperNet cell." } + , { "isValid" , (PyCFunction)PyHyperNet_isValid , METH_NOARGS , "Returns trus if the HyperNet isValid." } + , { "getNetOccurrences" , (PyCFunction)PyHyperNet_getNetOccurrences , METH_NOARGS + , "Returns the collection of Net occurrences" } , { "getLeafPlugOccurrences", (PyCFunction)PyHyperNet_getLeafPlugOccurrences, METH_NOARGS - , "Returns the collection of leaf occurrences" } - , { "destroy" , (PyCFunction)PyHyperNet_destroy , METH_NOARGS - , "Destroy associated hurricane object, the python object remains." } - , {NULL, NULL, 0, NULL} /* sentinel */ + , "Returns the collection of leaf occurrences" } + , { "destroy" , (PyCFunction)PyHyperNet_destroy , METH_NOARGS + , "Destroy associated hurricane object, the python object remains." } + , {NULL, NULL, 0, NULL} /* sentinel */ }; - - - // x-------------------------------------------------------------x - // | "PyHyperNet" Object Methods | - // x-------------------------------------------------------------x DirectDeleteMethod(PyHyperNet_DeAlloc,PyHyperNet) PyTypeObjectLinkPyType(HyperNet) -# else // End of Python Module Code Part. +#else // End of Python Module Code Part. -// x=================================================================x -// | "PyHyperNet" Shared Library Code Part | -// x=================================================================x +// +=================================================================+ +// | "PyHyperNet" Shared Library Code Part | +// +=================================================================+ - // --------------------------------------------------------------- - // Attribute Method : "PyHyperNet_create ()" PyObject* PyHyperNet_create ( PyObject *module, PyObject *args ) { trace << "PyHyperNet_create()" << endl; @@ -200,19 +155,12 @@ extern "C" { } - - // --------------------------------------------------------------- - // PyHyperNet Object Definitions. - PyTypeObjectDefinitions(HyperNet) -# endif // End of Shared Library Code Part. +#endif // End of Shared Library Code Part. -} // End of extern "C". +} // extern "C". - - - -} // End of Isobar namespace. +} // Isobar namespace. diff --git a/hurricane/src/isobar/PyLibrary.cpp b/hurricane/src/isobar/PyLibrary.cpp index 7a04b654..4773e96c 100644 --- a/hurricane/src/isobar/PyLibrary.cpp +++ b/hurricane/src/isobar/PyLibrary.cpp @@ -1,5 +1,10 @@ -// x-----------------------------------------------------------------x -// | | + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC/LIP6 2008-2013, All Rights Reserved +// +// +-----------------------------------------------------------------+ // | C O R I O L I S | // | I s o b a r - Hurricane / Python Interface | // | | @@ -7,12 +12,7 @@ // | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | =============================================================== | // | C++ Module : "./PyLibrary.cpp" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x - - +// +-----------------------------------------------------------------+ #include "hurricane/isobar/PyDataBase.h" @@ -31,28 +31,36 @@ extern "C" { #define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Library,lib,function) -// x=================================================================x +// +=================================================================+ // | "PyLibrary" Python Module Code Part | -// x=================================================================x +// +=================================================================+ #if defined(__PYTHON_MODULE__) - - // x-------------------------------------------------------------x - // | "PyLibrary" Attribute Methods | - // x-------------------------------------------------------------x - - - - // --------------------------------------------------------------- - // Attribute Method : "PyLibrary_getName ()" GetNameMethod(Library, lib) - // --------------------------------------------------------------- - // Attribute Method : "PyLibrary_getCell ()" + static PyObject* PyLibrary_getSubLibrary ( PyLibrary *self, PyObject* args ) { + trace << "PyLibrary_getLibrary ()" << endl; - PyObject* PyLibrary_getCell ( PyLibrary* self, PyObject* args ) { + Library* subLibrary = NULL; + + HTRY + METHOD_HEAD ( "Library.getLibrary()" ) + char* name = NULL; + if (PyArg_ParseTuple(args,"s:Library.getLibrary", &name)) { + subLibrary = lib->getLibrary( Name(name) ); + } else { + PyErr_SetString( ConstructorError, "Library.getLibrary(Name): Invalid number of parameters." ); + return NULL; + } + HCATCH + + return PyLibrary_Link( subLibrary ); + } + + + static PyObject* PyLibrary_getCell ( PyLibrary* self, PyObject* args ) { trace << "PyLibrary_getCell ()" << endl; Cell* cell = NULL; @@ -72,10 +80,6 @@ extern "C" { } - - // --------------------------------------------------------------- - // Attribute Method : "PyLibrary_getCells()" - static PyObject* PyLibrary_getCells(PyLibrary *self) { trace << "PyLibrary_getCells()" << endl; @@ -97,32 +101,23 @@ extern "C" { return (PyObject*)pyCellCollection; } - // Standart Accessors (Attributes). - // Standart Destroy (Attribute). DBoDestroyAttribute(PyLibrary_destroy, PyLibrary) - // --------------------------------------------------------------- - // PyLibrary Attribute Method table. PyMethodDef PyLibrary_Methods[] = { - { "getName" , (PyCFunction)PyLibrary_getName , METH_NOARGS , "Returns the name of the library." } - , { "getCell" , (PyCFunction)PyLibrary_getCell , METH_VARARGS, "Get the cell of name " } - , { "getCells", (PyCFunction)PyLibrary_getCells, METH_NOARGS , "Returns the collection of all cells of the library." } - , { "destroy" , (PyCFunction)PyLibrary_destroy , METH_NOARGS - , "Destroy associated hurricane object The python object remains." } + { "getName" , (PyCFunction)PyLibrary_getName , METH_NOARGS , "Returns the name of the library." } + , { "getLibrary", (PyCFunction)PyLibrary_getSubLibrary, METH_VARARGS, "Get the sub-library named " } + , { "getCell" , (PyCFunction)PyLibrary_getCell , METH_VARARGS, "Get the cell of name " } + , { "getCells" , (PyCFunction)PyLibrary_getCells , METH_NOARGS , "Returns the collection of all cells of the library." } + , { "destroy" , (PyCFunction)PyLibrary_destroy , METH_NOARGS + , "Destroy associated hurricane object The python object remains." } , {NULL, NULL, 0, NULL} /* sentinel */ }; - - - // x-------------------------------------------------------------x - // | "PyLibrary" Object Methods | - // x-------------------------------------------------------------x - DBoDeleteMethod(Library) PyTypeObjectLinkPyType(Library) @@ -130,12 +125,10 @@ extern "C" { #else // End of Python Module Code Part. -// x=================================================================x +// +=================================================================+ // | "PyLibrary" Shared Library Code Part | -// x=================================================================x +// +=================================================================+ - // --------------------------------------------------------------- - // Attribute Method : "PyLibrary_create()" PyObject* PyLibrary_create ( PyObject *module, PyObject *args ) { trace << "PyLibrary_create()" << endl; @@ -165,43 +158,17 @@ extern "C" { return PyLibrary_Link ( library ); } -#if 0 - // --------------------------------------------------------------- - // Attribute Method : "PyLibrary_getLibrary ()" - - //needs args, have to check hurricane object code - - PyObject* PyLibrary_getLibrary ( PyObject* module ) - { - trace << "PyLibrary_getLibrary()" << endl; - Library* lib = NULL; - - HTRY - lib = Library::getLibrary (); - if ( lib == NULL ) - PyErr_SetString ( HurricaneError, "Library has not been created yet" ); - HCATCH - - return PyLibrary_Link ( lib ); - } -#endif - // Link/Creation Method. DBoLinkCreateMethod(Library) - - - // --------------------------------------------------------------- - // PyLibrary Object Definitions. - PyTypeObjectDefinitions(Library) #endif // End of Shared Library Code Part. -} // End of extern "C". +} // extern "C". -} // End of Isobar namespace. +} // Isobar namespace. diff --git a/hurricane/src/isobar/PyNetExternalComponents.cpp b/hurricane/src/isobar/PyNetExternalComponents.cpp index f7e7841c..7a316c83 100644 --- a/hurricane/src/isobar/PyNetExternalComponents.cpp +++ b/hurricane/src/isobar/PyNetExternalComponents.cpp @@ -64,6 +64,30 @@ extern "C" { if ( isExternal ) Py_RETURN_TRUE; Py_RETURN_FALSE; } + + + static PyObject* PyNetExternalComponents_setExternal ( PyObject*, PyObject *args ) + { + trace << "PyNetExternalComponents_setExternal()" << endl; + + bool isExternal = false; + + HTRY + PyObject* pyComponent; + if (PyArg_ParseTuple( args, "O", &pyComponent )) { + if (not PyObject_IsInstance(pyComponent,(PyObject*)&PyTypeComponent)) { + PyErr_SetString( ConstructorError, "NetExternalComponents.setExternal(): First argument is not of type Component." ); + return NULL; + } + NetExternalComponents::setExternal( PYCOMPONENT_O(pyComponent) ); + } else { + PyErr_SetString( ConstructorError, "Bad parameters given to NetExternalComponents.setExternal()." ); + return NULL; + } + HCATCH + + Py_RETURN_NONE; + } static PyObject* PyNetExternalComponents_get ( PyObject*, PyObject* args ) @@ -91,10 +115,12 @@ extern "C" { PyMethodDef PyNetExternalComponents_Methods[] = - { { "isExternal", (PyCFunction)PyNetExternalComponents_isExternal, METH_VARARGS|METH_CLASS - , "Tells if Component belong to the externals of the Net." } - , { "get" , (PyCFunction)PyNetExternalComponents_get , METH_VARARGS|METH_CLASS - , "Returns the Collection of external components of the Net." } + { { "isExternal" , (PyCFunction)PyNetExternalComponents_isExternal , METH_VARARGS|METH_CLASS + , "Tells if Component belong to the externals of the Net." } + , { "setExternal", (PyCFunction)PyNetExternalComponents_setExternal, METH_VARARGS|METH_CLASS + , "Flag the Component as belonging to to the external part of it's Net." } + , { "get" , (PyCFunction)PyNetExternalComponents_get , METH_VARARGS|METH_CLASS + , "Returns the Collection of external components of the Net." } , {NULL, NULL, 0, NULL} /* sentinel */ }; diff --git a/hurricane/src/isobar/PyRoutingPad.cpp b/hurricane/src/isobar/PyRoutingPad.cpp index 9655d621..95c2e76b 100644 --- a/hurricane/src/isobar/PyRoutingPad.cpp +++ b/hurricane/src/isobar/PyRoutingPad.cpp @@ -15,8 +15,6 @@ // +-----------------------------------------------------------------+ - - #include "hurricane/isobar/PyPoint.h" #include "hurricane/isobar/PyNet.h" #include "hurricane/isobar/PyLayer.h" diff --git a/hurricane/src/isobar/hurricane/isobar/PyDataBase.h b/hurricane/src/isobar/hurricane/isobar/PyDataBase.h index c52525dc..86222488 100644 --- a/hurricane/src/isobar/hurricane/isobar/PyDataBase.h +++ b/hurricane/src/isobar/hurricane/isobar/PyDataBase.h @@ -86,6 +86,7 @@ extern "C" { extern PyMethodDef PyDataBase_Methods[]; extern PyObject* PyDataBase_create ( PyObject* module ); + extern PyObject* PyDataBase_getDB ( PyObject* module ); extern PyObject* PyDataBase_getDataBase ( PyObject* module ); extern PyObject* PyDataBase_Link ( Hurricane::DataBase* db ); extern void PyDataBase_LinkPyType ();