Forgotten Nimbus Python wrapper.

This commit is contained in:
Jean-Paul Chaput 2012-11-16 13:17:48 +00:00
parent a4265c1dce
commit e8f27817e7
3 changed files with 275 additions and 0 deletions

90
nimbus/src/PyNimbus.cpp Normal file
View File

@ -0,0 +1,90 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2012-2012, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | N i m b u s - Global Routing Framework |
// | |
// | Author : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Module : "./PyNimbus.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyHurricane.h"
#include "hurricane/isobar/PyCell.h"
#include "nimbus/PyNimbusEngine.h"
namespace Nimbus {
using std::cerr;
using std::endl;
using Hurricane::tab;
using Hurricane::in_trace;
using Isobar::__cs;
using CRL::PyTypeToolEngine;
#if !defined(__PYTHON_MODULE__)
// x=================================================================x
// | "PyNimbus" Shared Library Code Part |
// x=================================================================x
# else // End of PyHurricane Shared Library Code Part.
// x=================================================================x
// | "PyNimbus" Python Module Code Part |
// x=================================================================x
extern "C" {
// x-------------------------------------------------------------x
// | "PyNimbus" Module Methods |
// x-------------------------------------------------------------x
static PyMethodDef PyNimbus_Methods[] =
{ {NULL, NULL, 0, NULL} /* sentinel */
};
// ---------------------------------------------------------------
// Module Initialization : "initNimbus ()"
DL_EXPORT(void) initNimbus () {
trace << "initNimbus()" << endl;
PyNimbusEngine_LinkPyType ();
PYTYPE_READY_SUB ( NimbusEngine, ToolEngine );
PyObject* module = Py_InitModule ( "Nimbus", PyNimbus_Methods );
if ( module == NULL ) {
cerr << "[ERROR]\n"
<< " Failed to initialize Nimbus module." << endl;
return;
}
Py_INCREF ( &PyTypeNimbusEngine );
PyModule_AddObject ( module, "NimbusEngine", (PyObject*)&PyTypeNimbusEngine );
}
} // End of extern "C".
#endif // End of Python Module Code Part.
} // End of Nimbus namespace.

View File

@ -0,0 +1,127 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2010-2012, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | N i m b u s - Global Routing Framework |
// | |
// | Author : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Module : "./PyNimbusEngine.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyCell.h"
#include "hurricane/Cell.h"
#include "nimbus/PyNimbusEngine.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(NimbusEngine,nimbus,function)
namespace Nimbus {
using std::cerr;
using std::endl;
using std::hex;
using std::ostringstream;
using Hurricane::tab;
using Hurricane::in_trace;
using Hurricane::Error;
using Hurricane::Warning;
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 CRL::PyToolEngine;
extern "C" {
#if defined(__PYTHON_MODULE__)
// +=================================================================+
// | "PyNimbusEngine" Python Module Code Part |
// +=================================================================+
static PyObject* PyNimbusEngine_create ( PyObject*, PyObject* args )
{
trace << "PyNimbusEngine_create()" << endl;
NimbusEngine* nimbus = NULL;
HTRY
PyObject* arg0;
if (not ParseOneArg("Nimbus.create", args, CELL_ARG, &arg0)) return NULL;
Cell* cell = PYCELL_O(arg0);
nimbus = NimbusEngine::get(cell);
if (nimbus == NULL) {
nimbus = NimbusEngine::create(cell);
if (cmess1.enabled())
nimbus->getConfiguration()->print(cell);
} else
cerr << Warning("%s already has a Nimbus engine.",getString(cell).c_str()) << endl;
HCATCH
return PyNimbusEngine_Link(nimbus);
}
// Standart Accessors (Attributes).
DirectVoidMethod(NimbusEngine,nimbus,printConfiguration)
// Standart Destroy (Attribute).
DBoDestroyAttribute(PyNimbusEngine_destroy,PyNimbusEngine)
PyMethodDef PyNimbusEngine_Methods[] =
{ { "create" , (PyCFunction)PyNimbusEngine_create , METH_VARARGS|METH_STATIC
, "Create a Nimbus engine on this cell." }
, { "printConfiguration", (PyCFunction)PyNimbusEngine_printConfiguration, METH_NOARGS
, "Display on the console the configuration of Nimbus." }
, { "destroy" , (PyCFunction)PyNimbusEngine_destroy , METH_NOARGS
, "Destroy the associated hurricane object. The python object remains." }
, {NULL, NULL, 0, NULL} /* sentinel */
};
DBoDeleteMethod(NimbusEngine)
PyTypeObjectLinkPyType(NimbusEngine)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyNimbusEngine" Shared Library Code Part |
// +=================================================================+
// Link/Creation Method.
PyTypeInheritedObjectDefinitions(NimbusEngine,PyToolEngine)
DBoLinkCreateMethod(NimbusEngine)
#endif // End of Shared Library Code Part.
} // End of extern "C".
} // End of Nimbus namespace.

View File

@ -0,0 +1,58 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2010-2012, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | N i m b u s - Global Routing Framework |
// | |
// | Author : Jean-Paul CHAPUT |
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Header : "./nimbus/PyNimbusEngine.cpp" |
// +-----------------------------------------------------------------+
#ifndef __PY_NIMBUS_ENGINE__
#define __PY_NIMBUS_ENGINE__
#include "hurricane/isobar/PyHurricane.h"
#include "crlcore/PyToolEngine.h"
#include "nimbus/NimbusEngine.h"
namespace Nimbus {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyNimbusEngine".
typedef struct {
CRL::PyToolEngine _baseObject;
} PyNimbusEngine;
// -------------------------------------------------------------------
// Functions & Types exported to "PyNimbus.ccp".
extern PyTypeObject PyTypeNimbusEngine;
extern PyMethodDef PyNimbusEngine_Methods[];
extern PyObject* PyNimbusEngine_Link ( Nimbus::NimbusEngine* );
extern void PyNimbusEngine_LinkPyType ();
#define IsPyNimbusEngine(v) ( (v)->ob_type == &PyTypeNimbusEngine )
#define PY_NIMBUS_ENGINE(v) ( (PyNimbusEngine*)(v) )
#define PY_NIMBUS_ENGINE_O(v) ( PY_NIMBUS_ENGINE(v)->_baseObject._object )
} // extern "C".
} // Nimbus namespace.
#endif // __PY_NIMBUS_ENGINE__