// -*- C++ -*- // // This file is part of the Coriolis Software. // Copyright (c) UPMC 2008-2016, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | // | I s o b a r - Hurricane / Python Interface | // | | // | Author : Damien Dupuis | // | E-mail : Jean-Paul.Chaput@lip6.fr | // | =============================================================== | // | C++ Module : "./PyBasicLayer.cpp" | // +-----------------------------------------------------------------+ #include "hurricane/isobar/PyBasicLayer.h" #include "hurricane/isobar/PyMaterial.h" #include "hurricane/isobar/PyTechnology.h" namespace Isobar { using namespace Hurricane; 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(BasicLayer,basicLayer,function) // +=================================================================+ // | "PyBasicLayer" Python Module Code Part | // +=================================================================+ # if defined(__PYTHON_MODULE__) // +-------------------------------------------------------------+ // | "PyBasicLayer" Attribute Methods | // +-------------------------------------------------------------+ static PyObject* PyBasicLayer_create ( PyObject*, PyObject* args ) { cdebug_log(20,0) << "PyBasicLayer_create()" << endl; BasicLayer* basicLayer = NULL; HTRY PyObject* pyTechnology = NULL; char* name = NULL; PyObject* pyMaterial = NULL; unsigned int extractNumber = 0; PyObject* pyMinimalSize = NULL; PyObject* pyMinimalSpacing = NULL; if (PyArg_ParseTuple( args , "OsO|IOO:BasicLayer.create" , &pyTechnology , &name , &pyMaterial , &extractNumber , &pyMinimalSize , &pyMinimalSpacing )) { if (not IsPyTechnology(pyTechnology)) { PyErr_SetString ( ConstructorError, "Hurricane.create(): First argument is not of type Technology." ); return NULL; } if (not IsPyMaterial(pyMaterial)) { PyErr_SetString ( ConstructorError, "Hurricane.create(): Third argument is not of type Material." ); return NULL; } basicLayer = BasicLayer::create( PYTECHNOLOGY_O(pyTechnology) , Name(name) , *PYMATERIAL_O(pyMaterial) , extractNumber , (pyMinimalSize) ? PyAny_AsLong(pyMinimalSize) : 0 , (pyMinimalSpacing) ? PyAny_AsLong(pyMinimalSpacing) : 0 ); } else { PyErr_SetString ( ConstructorError, "Bad parameters given to BasicLayer.create()." ); return NULL; } HCATCH return PyBasicLayer_Link(basicLayer); } static PyObject* PyBasicLayer_getMaterial ( PyBasicLayer *self ) { cdebug_log(20,0) << "PyBasicLayer_getMaterial ()" << endl; METHOD_HEAD ( "BasicLayer.getMaterial()" ) BasicLayer::Material* material = NULL; HTRY material = new BasicLayer::Material( basicLayer->getMaterial() ); HCATCH return (PyObject*)PyMaterial_Link( material ); } updatorFromBasicLayer (setBlockageLayer,PyBasicLayer,BasicLayer) accessorLayerFromVoid (getBlockageLayer,PyBasicLayer,BasicLayer) DirectSetLongAttribute (PyBasicLayer_setExtractNumber,setExtractNumber,PyBasicLayer,BasicLayer) DirectSetCStringAttribute(PyBasicLayer_setRealName ,setRealName ,PyBasicLayer,BasicLayer) // Standart destroy (Attribute). DBoDestroyAttribute(PyBasicLayer_destroy, PyBasicLayer) // --------------------------------------------------------------- // PyBasicLayer Attribute Method table. PyMethodDef PyBasicLayer_Methods[] = { { "create" , (PyCFunction)PyBasicLayer_create , METH_VARARGS|METH_STATIC , "Create a new BasicLayer." } , { "getMaterial" , (PyCFunction)PyBasicLayer_getMaterial , METH_NOARGS , "Returns the type of Material." } , { "getBlockageLayer" , (PyCFunction)PyBasicLayer_getBlockageLayer , METH_NOARGS , "Returns the associated blockage layer, if any." } , { "setBlockageLayer" , (PyCFunction)PyBasicLayer_setBlockageLayer , METH_VARARGS , "Sets the blockage layer associated to this one." } , { "setExtractNumber" , (PyCFunction)PyBasicLayer_setExtractNumber , METH_VARARGS , "Sets the layer extract number (for GDSII)." } , { "setRealName" , (PyCFunction)PyBasicLayer_setRealName , METH_VARARGS , "Sets the real name of this layer (as seen in GDSII)." } , { "destroy" , (PyCFunction)PyBasicLayer_destroy , METH_NOARGS , "destroy associated hurricane object, the python object remains." } , {NULL, NULL, 0, NULL} /* sentinel */ }; // +-------------------------------------------------------------+ // | "PyHorizontal" Object Methods | // +-------------------------------------------------------------+ DBoDeleteMethod(BasicLayer) PyTypeObjectLinkPyType(BasicLayer) #else // End of Python Module Code Part. // +=================================================================+ // | "PyBasicLayer" Shared Library Code Part | // +=================================================================+ // Link/Creation Method. DBoLinkCreateMethod(BasicLayer) PyTypeInheritedObjectDefinitions(BasicLayer, Layer) extern void PyBasicLayer_postModuleInit () { PyMaterial_postModuleInit (); PyDict_SetItemString ( PyTypeBasicLayer.tp_dict, "Material", (PyObject*)&PyTypeMaterial ); } #endif // End of Shared Library Code Part. } // extern "C". } // Isobar namespace.