* ./hurricane/sr/isobar:

- New: Added support for Hook Collections, PyHookCollection.
This commit is contained in:
Jean-Paul Chaput 2013-04-27 17:51:33 +00:00
parent 21215595a5
commit ecf22a10c1
6 changed files with 189 additions and 1 deletions

View File

@ -41,6 +41,7 @@
PyOccurrence.cpp
PyOccurrenceCollection.cpp
PyHook.cpp
PyHookCollection.cpp
PyPad.cpp
PyPath.cpp
PyPin.cpp
@ -95,6 +96,8 @@
hurricane/isobar/PyNetExternalComponents.h
hurricane/isobar/PyOccurrence.h
hurricane/isobar/PyOccurrenceCollection.h
hurricane/isobar/PyHook.h
hurricane/isobar/PyHookCollection.h
hurricane/isobar/PyPad.h
hurricane/isobar/PyPath.h
hurricane/isobar/PyPin.h

View File

@ -18,6 +18,7 @@
#include "hurricane/isobar/PyEntity.h"
#include "hurricane/isobar/PyComponent.h"
#include "hurricane/isobar/PyHook.h"
#include "hurricane/isobar/PyHookCollection.h"
namespace Isobar {
@ -57,6 +58,48 @@ extern "C" {
return (PyObject*)PyEntity_NEW(component);
}
static PyObject* PyHook_getHooks ( PyHook *self )
{
trace << "PyHook_getHooks()" << endl;
METHOD_HEAD( "Hook.getHooks()" )
PyHookCollection* pyHookCollection = NULL;
HTRY
Hooks* hooks = new Hooks( hook->getHooks() );
pyHookCollection = PyObject_NEW( PyHookCollection, &PyTypeHookCollection );
if (pyHookCollection == NULL) return NULL;
pyHookCollection->_object = hooks;
HCATCH
return (PyObject*)pyHookCollection;
}
static PyObject* PyHook_getSlaveHooks ( PyHook *self )
{
trace << "PyHook_getSlaveHooks()" << endl;
METHOD_HEAD( "Hook.getSlaveHooks()" )
PyHookCollection* pyHookCollection = NULL;
HTRY
Hooks* hooks = new Hooks( hook->getSlaveHooks() );
pyHookCollection = PyObject_NEW( PyHookCollection, &PyTypeHookCollection );
if (pyHookCollection == NULL) return NULL;
pyHookCollection->_object = hooks;
HCATCH
return (PyObject*)pyHookCollection;
}
static PyObject* PyHook_detach ( PyHook *self )
@ -145,6 +188,10 @@ extern "C" {
, "Return the master hook next to the master of this Hook." }
, { "getPreviousMasterHook", (PyCFunction)PyHook_getPreviousMasterHook, METH_NOARGS
, "Return the master hook previous to the master of this Hook (walk trough the whole ring)." }
, { "getHooks" , (PyCFunction)PyHook_getHooks , METH_NOARGS
, "Return the Collection of all hooks part of that ring." }
, { "getSlaveHooks" , (PyCFunction)PyHook_getSlaveHooks , METH_NOARGS
, "Return the Collection of all hooks slave to this one." }
, { "isMaster" , (PyCFunction)PyHook_isMaster , METH_NOARGS
, "Tells if this Hook is of master kind" }
, { "isAttached" , (PyCFunction)PyHook_isAttached , METH_NOARGS

View File

@ -0,0 +1,58 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2013-2013, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | I s o b a r - Hurricane / Python Interface |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Module : "./PyHookCollection.cpp" |
// +-----------------------------------------------------------------+
#include "hurricane/isobar/PyHookCollection.h"
#include "hurricane/isobar/PyHook.h"
namespace Isobar {
using namespace Hurricane;
extern "C" {
#if defined(__PYTHON_MODULE__)
// +=================================================================+
// | "PyHookCollection" Python Module Code Part |
// +=================================================================+
DirectDeleteMethod(PyHookCollection_DeAlloc, PyHookCollection)
NolinkLocatorNextMethod(Hook)
CollectionMethods(Hook)
#else // End of Python Module Code Part.
// +=================================================================+
// | "PyHookCollection" Shared Library Code Part |
// +=================================================================+
PyTypeCollectionObjectDefinitions(HookCollection)
PyTypeCollectionObjectDefinitions(HookCollectionLocator)
#endif // End of Shared Library Code Part.
} // End of extern "C".
} // End of Isobar namespace.

View File

@ -51,6 +51,7 @@
#include "hurricane/isobar/PyNetExternalComponents.h"
#include "hurricane/isobar/PyHyperNet.h"
#include "hurricane/isobar/PyHook.h"
#include "hurricane/isobar/PyHookCollection.h"
#include "hurricane/isobar/PyComponent.h"
#include "hurricane/isobar/PyComponentCollection.h"
#include "hurricane/isobar/PyPlug.h"
@ -550,6 +551,7 @@ extern "C" {
PyNet_LinkPyType ();
PyHyperNet_LinkPyType ();
PyHook_LinkPyType ();
PyHookCollection_LinkPyType ();
PyComponent_LinkPyType ();
PySegment_LinkPyType ();
PyPad_LinkPyType ();
@ -573,6 +575,7 @@ extern "C" {
PYTYPE_READY ( Library )
PYTYPE_READY ( Entity )
PYTYPE_READY ( Hook )
PYTYPE_READY ( HookCollection )
PYTYPE_READY ( Material )
PYTYPE_READY ( Layer )
PYTYPE_READY ( LayerMask )
@ -637,6 +640,7 @@ extern "C" {
__cs.addType ( "cell" , &PyTypeCell , "<Cell>" , false, "ent" );
__cs.addType ( "cellCol" , &PyTypeCellCollection , "<CellCollection>" , false );
__cs.addType ( "hook" , &PyTypeHook , "<Hook>" , false );
__cs.addType ( "hookColl" , &PyTypeHookCollection , "<HookCollection>" , false );
__cs.addType ( "comp" , &PyTypeComponent , "<Component>" , false, "ent" );
__cs.addType ( "compCol" , &PyTypeComponentCollection , "<ComponentCollection>" , false );
__cs.addType ( "contact" , &PyTypeContact , "<Contact>" , false, "comp" );
@ -729,6 +733,8 @@ extern "C" {
Py_INCREF ( &PyTypeHook );
PyModule_AddObject ( module, "Hook" , (PyObject*)&PyTypeHook );
Py_INCREF ( &PyTypeHookCollection );
PyModule_AddObject ( module, "HookCollection" , (PyObject*)&PyTypeHookCollection );
Py_INCREF ( &PyTypeRoutingPad );
PyModule_AddObject ( module, "RoutingPad" , (PyObject*)&PyTypeRoutingPad );
Py_INCREF ( &PyTypeVertical );

View File

@ -0,0 +1,58 @@
// -*- C++ -*-
//
// This file is part of the Coriolis Software.
// Copyright (c) UPMC 2013-2013, All Rights Reserved
//
// +-----------------------------------------------------------------+
// | C O R I O L I S |
// | I s o b a r - Hurricane / Python Interface |
// | |
// | Author : Jean-Paul Chaput |
// | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== |
// | C++ Header : "./hurricane/isobar/PyHookCollection.h" |
// +-----------------------------------------------------------------+
#ifndef ISOBAR_PYSEGMENT_COLLECTION_H
#define ISOBAR_PYSEGMENT_COLLECTION_H
#include "hurricane/isobar/PyHurricane.h"
#include "hurricane/Hook.h"
#include "hurricane/Hooks.h"
namespace Isobar {
extern "C" {
// -------------------------------------------------------------------
// Python Object : "PyHookCollection".
typedef struct {
PyObject_HEAD
Hurricane::Hooks* _object;
} PyHookCollection;
typedef struct {
PyObject_HEAD
Hurricane::Locator<Hurricane::Hook*>* _object;
PyHookCollection* _collection;
} PyHookCollectionLocator;
// -------------------------------------------------------------------
// Functions & Types exported to "PyHurricane.ccp".
extern PyTypeObject PyTypeHookCollection;
extern PyTypeObject PyTypeHookCollectionLocator;
extern void PyHookCollection_LinkPyType();
extern void PyHookCollectionLocator_LinkPyType();
} // extern "C".
} // Isobar namespace.
#endif

View File

@ -719,8 +719,24 @@ extern "C" {
return NULL; \
}
#define NolinkLocatorNextMethod(TYPE) \
static PyObject* Py##TYPE##LocatorNext(Py##TYPE##CollectionLocator* pyLocator) \
{ \
Locator<TYPE*>* locator = pyLocator->_object; \
HTRY \
if (locator->isValid()) { \
Py##TYPE* pyObject = PyObject_NEW( Py##TYPE, &PyType##TYPE ); \
if (pyObject == NULL) return NULL; \
pyObject->_object = locator->getElement(); \
locator->progress(); \
return (PyObject*)pyObject; \
} \
HCATCH \
return NULL; \
}
#define EntityLocatorNextMethod(TYPE) \
#define EntityLocatorNextMethod(TYPE) \
static PyObject* Py##TYPE##LocatorNext(Py##TYPE##CollectionLocator* pyLocator) { \
Locator<TYPE*>* locator = pyLocator->_object; \
HTRY \