coriolis/hurricane/src/isobar/PyBasicLayer.cpp

182 lines
6.5 KiB
C++

// -*- 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.