* All Tools:

- A complete sweep of cleanup to suppress allmost all compiler warnings.

  * ./mauka:
    - New: Added Python support, for configuration & Unicorn.
This commit is contained in:
Jean-Paul Chaput 2012-11-16 12:53:00 +00:00
parent e111ec062b
commit f2aae7a567
10 changed files with 323 additions and 169 deletions

View File

@ -22,7 +22,9 @@
mauka/MaukaEngine.h
)
set ( mocIncludes mauka/GraphicMaukaEngine.h )
set ( pyIncludes mauka/PyMaukaEngine.h )
set ( pyIncludes mauka/PyMaukaEngine.h
mauka/PyGraphicMaukaEngine.h
)
set ( cpps Configuration.cpp
BBPlacer.cpp
FeedCells.cpp
@ -40,6 +42,7 @@
)
set ( pyCpps PyMauka.cpp
PyMaukaEngine.cpp
PyGraphicMaukaEngine.cpp
)
qt4_wrap_cpp ( mocCpps ${mocIncludes} )
@ -68,7 +71,9 @@
PREFIX ""
OUTPUT_NAME "Mauka"
)
target_link_libraries ( pyMauka mauka )
target_link_libraries ( pyMauka mauka
${CORIOLIS_PYTHON_LIBRARIES}
)
install ( TARGETS mauka DESTINATION lib${LIB_SUFFIX} )
install ( TARGETS pyMauka DESTINATION ${PYTHON_SITE_PACKAGES} )

View File

@ -2,14 +2,9 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | M a u k a - P l a c e r |
// | |
@ -17,10 +12,7 @@
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Module : "./Configuration.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#include <iostream>

View File

@ -222,15 +222,19 @@ void MaukaEngine::Construct()
{
//cerr << "unplaced " << (*ioccurrence) << (*ioccurrence).getBoundingBox() << endl;
Cell* model = instance->getMasterCell();
DbU::DbU::Unit insWidth = model->getAbutmentBox().getWidth();
DbU::DbU::Unit insHeight = model->getAbutmentBox().getHeight();
if (standardCellHeight == 0)
standardCellHeight = insHeight;
DbU::Unit insWidth = model->getAbutmentBox().getWidth();
DbU::Unit insHeight = model->getAbutmentBox().getHeight();
if (standardCellHeight == 0) {
cmess1 << " - Slice height deduced from: <" << model << ">." << endl;
standardCellHeight = insHeight;
}
else if (insHeight != standardCellHeight)
{
throw Error("All non-standard instances : "
+ getString(instance->getName())
+ " must be placed");
+ " must be placed "
+ getString(standardCellHeight) + " "
+ DbU::getValueString(standardCellHeight) );
}
_instanceOccurrencesVector.push_back(*ioccurrence);
//VerifyPathCellBox(*ioccurrence);

View File

@ -0,0 +1,123 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | M a u k a - P l a c e r |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./PyGraphicMaukaEngine.cpp" |
// +-----------------------------------------------------------------+
#include "mauka/PyGraphicMaukaEngine.h"
#include "hurricane/isobar/PyCell.h"
#include "hurricane/Cell.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(GraphicMaukaEngine,gtool,function)
namespace Mauka {
using namespace Hurricane;
using namespace Isobar;
extern "C" {
// +=================================================================+
// | "PyGraphicMaukaEngine" Python Module Code Part |
// +=================================================================+
#if defined(__PYTHON_MODULE__)
// +-------------------------------------------------------------+
// | "PyGraphicMaukaEngine" Attribute Methods |
// +-------------------------------------------------------------+
static PyObject* PyGraphicMaukaEngine_grab ( PyObject* )
{
trace << "PyGraphicMaukaEngine_grab()" << endl;
PyGraphicMaukaEngine* pyGraphicMaukaEngine = NULL;
HTRY
pyGraphicMaukaEngine = PyObject_NEW ( PyGraphicMaukaEngine, &PyTypeGraphicMaukaEngine );
if ( pyGraphicMaukaEngine == NULL ) return NULL;
pyGraphicMaukaEngine->ACCESS_OBJECT = GraphicMaukaEngine::grab();
HCATCH
return (PyObject*)pyGraphicMaukaEngine;
}
static PyObject* PyGraphicMaukaEngine_getCell ( PyGraphicMaukaEngine* self )
{
trace << "PyGraphicMaukaEngine_getCell ()" << endl;
Cell* cell = NULL;
HTRY
METHOD_HEAD("GraphicMaukaEngine.getCell()")
cell = gtool->getCell ();
HCATCH
if (cell == NULL) Py_RETURN_NONE;
return PyCell_Link(cell);
}
GetNameMethod(GraphicMaukaEngine, gtool)
// Standart destroy (Attribute).
PyMethodDef PyGraphicMaukaEngine_Methods[] =
{ { "grab" , (PyCFunction)PyGraphicMaukaEngine_grab , METH_NOARGS|METH_STATIC
, "Returns the GraphicMaukaEngine singleton." }
, { "getName" , (PyCFunction)PyGraphicMaukaEngine_getName , METH_NOARGS
, "Returns the name of the GraphicMaukaEngine (class attribute)." }
, { "getCell" , (PyCFunction)PyGraphicMaukaEngine_getCell , METH_NOARGS
, "Returns the Cell on which this GraphicMaukaEngine is attached." }
, {NULL, NULL, 0, NULL} /* sentinel */
};
// ---------------------------------------------------------------
// PyGraphicMaukaEngine Type Methods.
PythonOnlyDeleteMethod(GraphicMaukaEngine)
PyTypeObjectLinkPyType(GraphicMaukaEngine)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyGraphicMaukaEngine" Shared Library Code Part |
// +=================================================================+
// Link/Creation Method.
LinkCreateMethod(GraphicMaukaEngine)
PyTypeInheritedObjectDefinitions(GraphicMaukaEngine,GraphicTool)
#endif // End of Shared Library Code Part.
} // extern "C".
} // CRL namespace.

View File

@ -2,14 +2,9 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved
// Copyright (c) UPMC/LIP6 2010-2012, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | M a u k a - P l a c e r |
// | |
@ -17,15 +12,13 @@
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Module : "./PyMauka.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyHurricane.h"
#include "hurricane/isobar/PyCell.h"
#include "mauka/PyMaukaEngine.h"
#include "mauka/PyGraphicMaukaEngine.h"
namespace Mauka {
@ -35,6 +28,8 @@ namespace Mauka {
using Hurricane::tab;
using Hurricane::in_trace;
using Isobar::__cs;
using CRL::PyTypeToolEngine;
using CRL::PyTypeGraphicTool;
#if !defined(__PYTHON_MODULE__)
@ -61,11 +56,7 @@ extern "C" {
static PyMethodDef PyMauka_Methods[] =
{ { "get" , (PyCFunction)PyMaukaEngine_get , METH_VARARGS
, "Gets MaukaEngine from a Cell." }
, { "create" , (PyCFunction)PyMaukaEngine_create, METH_VARARGS
, "Create MaukaEngine on a Cell." }
, {NULL, NULL, 0, NULL} /* sentinel */
{ {NULL, NULL, 0, NULL} /* sentinel */
};
@ -78,8 +69,10 @@ extern "C" {
trace << "initMauka()" << endl;
PyMaukaEngine_LinkPyType ();
PyGraphicMaukaEngine_LinkPyType ();
PYTYPE_READY ( MaukaEngine );
PYTYPE_READY_SUB ( MaukaEngine , ToolEngine );
PYTYPE_READY_SUB ( GraphicMaukaEngine, GraphicTool );
// Identifier string can take up to 10 characters.
__cs.addType ( "mauka", &PyTypeMaukaEngine, "<MaukaEngine>", false );
@ -91,9 +84,11 @@ extern "C" {
<< " Failed to initialize Mauka module." << endl;
return;
}
PyObject* dictionnary = PyModule_GetDict ( module );
//DbULoadConstants ( dictionnary );
Py_INCREF ( &PyTypeMaukaEngine );
PyModule_AddObject ( module, "MaukaEngine", (PyObject*)&PyTypeMaukaEngine );
Py_INCREF ( &PyTypeGraphicMaukaEngine );
PyModule_AddObject ( module, "GraphicMaukaEngine", (PyObject*)&PyTypeGraphicMaukaEngine );
}

View File

@ -2,14 +2,9 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved
// Copyright (c) UPMC/LIP6 2010-2012, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | M a u k a - P l a c e r |
// | |
@ -17,16 +12,19 @@
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Module : "./PyMaukaEngine.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyCell.h"
#include "nimbus/NimbusEngine.h"
#include "mauka/PyMaukaEngine.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(MaukaEngine,mauka,function)
namespace Mauka {
@ -47,111 +45,119 @@ namespace Mauka {
using Isobar::ParseTwoArg;
using Isobar::PyCell;
using Isobar::PyCell_Link;
using CRL::PyToolEngine;
using Nimbus::NimbusEngine;
extern "C" {
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(MaukaEngine,mauka,function)
// x=================================================================x
// | "PyMaukaEngine" Python Module Code Part |
// x=================================================================x
#if defined(__PYTHON_MODULE__)
// +=================================================================+
// | "PyMaukaEngine" Python Module Code Part |
// +=================================================================+
static PyObject* PyMaukaEngine_get ( PyObject*, PyObject* args )
{
trace << "PyMaukaEngine_get()" << endl;
MaukaEngine* mauka = NULL;
HTRY
PyObject* arg0;
if (not ParseOneArg( "Mauka.get", args, CELL_ARG, &arg0)) return NULL;
mauka = MaukaEngine::get(PYCELL_O(arg0));
HCATCH
return PyMaukaEngine_Link(mauka);
}
static PyObject* PyMaukaEngine_create ( PyObject*, PyObject* args )
{
trace << "PyMaukaEngine_create()" << endl;
MaukaEngine* mauka = NULL;
HTRY
PyObject* arg0;
if (not ParseOneArg( "Mauka.get", args, CELL_ARG, &arg0)) return NULL;
Cell* cell = PYCELL_O(arg0);
mauka = MaukaEngine::get(cell);
if ( mauka == NULL ) {
NimbusEngine* nimbus = NimbusEngine::get(cell);
if (nimbus == NULL)
nimbus = NimbusEngine::create(cell);
mauka = MaukaEngine::create(cell);
} else
cerr << Warning("%s already has a Mauka engine.",getString(cell).c_str()) << endl;
HCATCH
return PyMaukaEngine_Link(mauka);
}
PyObject* PyMaukaEngine_regroupOverloadedGCells ( PyMaukaEngine*, PyObject* args )
{
trace << "PyMaukaEngine_regroupOverloadedGCells()" << endl;
HTRY
PyObject* arg0;
if (not ParseOneArg("Mauka.regroupOverloadedGCells", args, CELL_ARG, &arg0)) return NULL;
MaukaEngine::regroupOverloadedGCells(PYCELL_O(arg0));
HCATCH
Py_RETURN_NONE;
}
// Standart Accessors (Attributes).
DirectVoidMethod(MaukaEngine,mauka,Run)
DirectVoidMethod(MaukaEngine,mauka,printConfiguration)
// Standart Destroy (Attribute).
DBoDestroyAttribute(PyMaukaEngine_destroy,PyMaukaEngine)
PyMethodDef PyMaukaEngine_Methods[] =
{ { "run" , (PyCFunction)PyMaukaEngine_Run , METH_NOARGS
, "Runs Mauka on it's Cell." }
, { "destroy" , (PyCFunction)PyMaukaEngine_destroy, METH_NOARGS
, "Destroy the associated hurricane object. The python object remains." }
, {NULL, NULL, 0, NULL} /* sentinel */
{ { "get" , (PyCFunction)PyMaukaEngine_get , METH_VARARGS|METH_STATIC
, "Return the Mauka engine associated to the Cell, None if there isn't." }
, { "create" , (PyCFunction)PyMaukaEngine_create , METH_VARARGS|METH_STATIC
, "Create a Mauka engine on this Cell." }
, { "printConfiguration" , (PyCFunction)PyMaukaEngine_printConfiguration , METH_NOARGS
, "Display on the console the configuration of Mauka." }
, { "regroupOverloadedGCells", (PyCFunction)PyMaukaEngine_regroupOverloadedGCells, METH_VARARGS|METH_STATIC
, "Destroy hierarchical levels that cannot satisfy the placement." }
, { "run" , (PyCFunction)PyMaukaEngine_Run , METH_NOARGS
, "Runs Mauka on it's Cell." }
, { "destroy" , (PyCFunction)PyMaukaEngine_destroy , METH_NOARGS
, "Destroy the associated hurricane object. The python object remains." }
, {NULL, NULL, 0, NULL} /* sentinel */
};
PythonOnlyDeleteMethod(MaukaEngine)
DBoDeleteMethod(MaukaEngine)
PyTypeObjectLinkPyType(MaukaEngine)
#else // End of Python Module Code Part.
// x=================================================================x
// +=================================================================+
// | "PyMaukaEngine" Shared Library Code Part |
// x=================================================================x
extern PyObject* PyMaukaEngine_get ( PyObject *module, PyObject* args )
{
trace << "PyMaukaEngine_get()" << endl;
MaukaEngine* mauka = NULL;
PyMaukaEngine* pyMauka = NULL;
HTRY
PyObject* arg0;
if ( not ParseOneArg ( "Mauka.get", args, CELL_ARG, &arg0) ) return NULL;
mauka = MaukaEngine::get ( PYCELL_O(arg0) );
pyMauka = PyObject_NEW ( PyMaukaEngine, &PyTypeMaukaEngine );
if ( pyMauka == NULL ) return NULL;
pyMauka->_object = mauka;
HCATCH
return (PyObject*)pyMauka;
}
extern PyObject* PyMaukaEngine_create ( PyObject *module, PyObject* args )
{
trace << "PyMaukaEngine_create()" << endl;
MaukaEngine* mauka = NULL;
PyMaukaEngine* pyMauka = NULL;
HTRY
PyObject* arg0;
if ( not ParseOneArg ( "Mauka.get", args, CELL_ARG, &arg0) ) return NULL;
Cell* cell = PYCELL_O(arg0);
mauka = MaukaEngine::get ( cell );
if ( mauka == NULL ) {
NimbusEngine* nimbus = NimbusEngine::get ( cell );
if ( nimbus == NULL )
NimbusEngine::create ( cell );
mauka = MaukaEngine::create ( cell );
if ( cmess1.enabled() )
mauka->getConfiguration()->print( cell );
} else
cerr << Warning("%s already has a Mauka engine.",getString(cell).c_str()) << endl;
pyMauka = PyObject_NEW ( PyMaukaEngine, &PyTypeMaukaEngine );
if ( pyMauka == NULL ) return NULL;
pyMauka->_object = mauka;
HCATCH
return (PyObject*)pyMauka;
}
// +=================================================================+
// Link/Creation Method.
PyTypeObjectDefinitions(MaukaEngine)
PyTypeInheritedObjectDefinitions(MaukaEngine,PyToolEngine)
DBoLinkCreateMethod(MaukaEngine)
#endif // End of Shared Library Code Part.

View File

@ -2,26 +2,17 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | M a u k a - P l a c e r |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./GraphicMaukaEngine.h" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// | C++ Header : "./mauka/GraphicMaukaEngine.h" |
// +-----------------------------------------------------------------+
#ifndef __MAUKA_GRAPHIC_MAUKA_ENGINE__
@ -38,7 +29,6 @@ namespace Hurricane {
}
#include "crlcore/GraphicToolEngine.h"
#include "mauka/MaukaEngine.h"

View File

@ -2,25 +2,16 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
//
// ===================================================================
//
// $Id$
// Copyright (c) UPMC/LIP6 2006-2012, All Rights Reserved
//
// x-----------------------------------------------------------------x
// | |
// | C O R I O L I S |
// | M a u k a - P l a c e r |
// | |
// | Author : Christophe Alexandre |
// | E-mail : Christophe.Alexandre@lip6.fr |
// | Date : 19/07/2006 |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./MaukaEngine.h" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// | C++ Header : "./mauka/MaukaEngine.h" |
// x-----------------------------------------------------------------x
@ -92,6 +83,7 @@ namespace Mauka {
static const Name& staticGetName ();
virtual const Name& getName () const;
inline Configuration* getConfiguration () const;
inline void printConfiguration () const;
inline const FeedCells& getFeedCells () const;
inline DbU::Unit getPitch () const;
inline DbU::Unit getSliceHeight () const;
@ -153,6 +145,7 @@ namespace Mauka {
// Inline Methods.
inline Configuration* MaukaEngine::getConfiguration () const { return _configuration; }
inline void MaukaEngine::printConfiguration () const { _configuration->print(getCell()); }
inline const FeedCells& MaukaEngine::getFeedCells () const { return _feedCells; }
inline DbU::Unit MaukaEngine::getPitch () const { return _configuration->getPitch(); }
inline DbU::Unit MaukaEngine::getSliceHeight () const { return _configuration->getSliceHeight(); }

View File

@ -0,0 +1,56 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2008-2012, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | Alliance / Hurricane Interface |
// | |
// | Author : Damien DUPUIS |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./mauka/PyGraphicMaukaEngine.h" |
// +-----------------------------------------------------------------+
#ifndef __MAUKA_PY_GRAPHIC_MAUKA_ENGINE__
#define __MAUKA_PY_GRAPHIC_MAUKA_ENGINE__
#include "crlcore/PyGraphicToolEngine.h"
#include "mauka/GraphicMaukaEngine.h"
namespace Mauka {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyGraphicMaukaEngine".
typedef struct {
CRL::PyGraphicTool _baseObject;
} PyGraphicMaukaEngine;
// -------------------------------------------------------------------
// Functions & Types exported to "PyMauka.ccp".
extern PyTypeObject PyTypeGraphicMaukaEngine;
extern PyMethodDef PyGraphicMaukaEngine_Methods[];
extern void PyGraphicMaukaEngine_LinkPyType ();
#define IsPyGraphicMaukaEngine(v) ( (v)->ob_type == &PyTypeGraphicMaukaEngine )
#define PY_GRAPHIC_MAUKA_ENGINE(v) ( (PyGraphicMaukaEngine*)(v) )
#define PY_GRAPHIC_MAUKA_ENGINE_O(v) ( PY_GRAPHIC_MAUKA_ENGINE(v)->_baseObject.object )
} // End of extern "C".
} // Mauka namespace.
#endif // __MAUKA_PY_GRAPHIC_MAUKA_ENGINE__

View File

@ -2,14 +2,9 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved
// Copyright (c) UPMC/LIP6 2010-2012, All Rights Reserved
//
// ===================================================================
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | M a u k a - P l a c e r |
// | |
@ -17,16 +12,14 @@
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== |
// | C++ Header : "./PyMaukaEngine.cpp" |
// | *************************************************************** |
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
// +-----------------------------------------------------------------+
#ifndef __PY_MAUKA_ENGINE__
#define __PY_MAUKA_ENGINE__
#include "hurricane/isobar/PyHurricane.h"
#include "crlcore/PyToolEngine.h"
#include "mauka/MaukaEngine.h"
@ -40,8 +33,7 @@ extern "C" {
// Python Object : "PyMaukaEngine".
typedef struct {
PyObject_HEAD
Mauka::MaukaEngine* _object;
CRL::PyToolEngine _baseObject;
} PyMaukaEngine;
@ -51,15 +43,13 @@ extern "C" {
extern PyTypeObject PyTypeMaukaEngine;
extern PyMethodDef PyMaukaEngine_Methods[];
extern PyObject* PyMaukaEngine_get ( PyObject* module, PyObject* args );
extern PyObject* PyMaukaEngine_create ( PyObject* module, PyObject* args );
extern PyObject* PyMaukaEngine_Link ( Mauka::MaukaEngine* );
extern void PyMaukaEngine_LinkPyType ();
extern PyObject* PyMaukaEngine_Link ( Mauka::MaukaEngine* );
extern void PyMaukaEngine_LinkPyType ();
#define IsPyMaukaEngine(v) ( (v)->ob_type == &PyTypeMaukaEngine )
#define PYMAUKAENGINE(v) ( (PyMaukaEngine*)(v) )
#define PYMAUKAENGINE_O(v) ( PYALLIANCEFRAMEWORK(v)->_object )
#define PYMAUKAENGINE_O(v) ( PYMAUKAENGINE(v)->_baseObject._object )
} // End of extern "C".