Added PyHook.cpp & PyHook.h ...
This commit is contained in:
parent
31abc474f1
commit
b1af37ca2c
|
@ -0,0 +1,184 @@
|
|||
|
||||
// -*- 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 : "./PyHook.cpp" |
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#include "hurricane/isobar/PyEntity.h"
|
||||
#include "hurricane/isobar/PyComponent.h"
|
||||
#include "hurricane/isobar/PyHook.h"
|
||||
|
||||
|
||||
namespace Isobar {
|
||||
|
||||
using namespace Hurricane;
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
#define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Hook,hook,function)
|
||||
|
||||
|
||||
// +=================================================================+
|
||||
// | "PyHook" Python Module Code Part |
|
||||
// +=================================================================+
|
||||
|
||||
#if defined(__PYTHON_MODULE__)
|
||||
|
||||
accessorHook(getNextHook ,PyHook,Hook)
|
||||
accessorHook(getPreviousHook ,PyHook,Hook)
|
||||
accessorHook(getMasterHook ,PyHook,Hook)
|
||||
accessorHook(getNextMasterHook ,PyHook,Hook)
|
||||
accessorHook(getPreviousMasterHook,PyHook,Hook)
|
||||
DirectGetBoolAttribute(PyHook_isMaster ,isMaster ,PyHook,Hook)
|
||||
DirectGetBoolAttribute(PyHook_isAttached,isAttached,PyHook,Hook)
|
||||
|
||||
|
||||
static PyObject* PyHook_getComponent ( PyHook *self )
|
||||
{
|
||||
trace << "PyHook_getComponent()" << endl;
|
||||
METHOD_HEAD ( "Hook.getComponent()" )
|
||||
|
||||
Component* component = NULL;
|
||||
HTRY
|
||||
component = hook->getComponent();
|
||||
HCATCH
|
||||
|
||||
return (PyObject*)PyEntity_NEW(component);
|
||||
}
|
||||
|
||||
|
||||
static PyObject* PyHook_detach ( PyHook *self )
|
||||
{
|
||||
trace << "PyHook_detach()" << endl;
|
||||
METHOD_HEAD ( "Hook.detach()" )
|
||||
|
||||
PyHook* pyReturnHook = PyObject_NEW ( PyHook, &PyTypeHook );
|
||||
if (pyReturnHook == NULL) return NULL;
|
||||
|
||||
HTRY
|
||||
pyReturnHook->_object = hook->detach();
|
||||
HCATCH
|
||||
|
||||
return (PyObject*)pyReturnHook;
|
||||
}
|
||||
|
||||
|
||||
static PyObject* PyHook_attach ( PyHook *self, PyObject* args )
|
||||
{
|
||||
trace << "PyHook_attach()" << endl;
|
||||
METHOD_HEAD ( "Hook.attach()" )
|
||||
|
||||
PyHook* pyReturnHook = PyObject_NEW ( PyHook, &PyTypeHook );
|
||||
if (pyReturnHook == NULL) return NULL;
|
||||
|
||||
PyObject* pyMasterHook = NULL;
|
||||
if (not PyArg_ParseTuple(args,"O:Hook.attach", &pyMasterHook))
|
||||
return NULL;
|
||||
|
||||
Hook* masterHook = PYHOOK_O(pyMasterHook);
|
||||
if (masterHook == NULL) {
|
||||
PyErr_SetString ( ConstructorError
|
||||
, "Hook.attach(): Parameter is not of Hook type" );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
HTRY
|
||||
pyReturnHook->_object = hook->attach( masterHook );
|
||||
HCATCH
|
||||
|
||||
return (PyObject*)pyReturnHook;
|
||||
}
|
||||
|
||||
|
||||
static PyObject* PyHook_merge ( PyHook *self, PyObject* args )
|
||||
{
|
||||
trace << "PyHook_merge()" << endl;
|
||||
METHOD_HEAD ( "Hook.merge()" )
|
||||
|
||||
PyHook* pyReturnHook = PyObject_NEW ( PyHook, &PyTypeHook );
|
||||
if (pyReturnHook == NULL) return NULL;
|
||||
|
||||
PyObject* pyMasterHook = NULL;
|
||||
if (not PyArg_ParseTuple(args,"O:Hook.merge", &pyMasterHook))
|
||||
return NULL;
|
||||
|
||||
Hook* masterHook = PYHOOK_O(pyMasterHook);
|
||||
if (masterHook == NULL) {
|
||||
PyErr_SetString ( ConstructorError
|
||||
, "Hook.merge(): Parameter is not of Hook type" );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
HTRY
|
||||
pyReturnHook->_object = hook->merge( masterHook );
|
||||
HCATCH
|
||||
|
||||
return (PyObject*)pyReturnHook;
|
||||
}
|
||||
|
||||
|
||||
// Standart destroy (Attribute).
|
||||
|
||||
|
||||
PyMethodDef PyHook_Methods[] =
|
||||
{ { "getComponent" , (PyCFunction)PyHook_getComponent , METH_NOARGS
|
||||
, "Return the Component into which the Hook is nested." }
|
||||
, { "getNextHook" , (PyCFunction)PyHook_getNextHook , METH_NOARGS
|
||||
, "Return the the next Hook in the ring." }
|
||||
, { "getPreviousHook" , (PyCFunction)PyHook_getPreviousHook , METH_NOARGS
|
||||
, "Return the the previous Hook in the ring (walk trough the whole ring)." }
|
||||
, { "getMasterHook" , (PyCFunction)PyHook_getMasterHook , METH_NOARGS
|
||||
, "Return the master of this Hook." }
|
||||
, { "getNextMasterHook" , (PyCFunction)PyHook_getNextMasterHook , METH_NOARGS
|
||||
, "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)." }
|
||||
, { "isMaster" , (PyCFunction)PyHook_isMaster , METH_NOARGS
|
||||
, "Tells if this Hook is of master kind" }
|
||||
, { "isAttached" , (PyCFunction)PyHook_isAttached , METH_NOARGS
|
||||
, "Tells if this Hook is inserted in a ring" }
|
||||
, { "detach" , (PyCFunction)PyHook_detach , METH_NOARGS
|
||||
, "Detach a slave from it's ring or detach the whole ring of a master." }
|
||||
, { "attach" , (PyCFunction)PyHook_attach , METH_VARARGS
|
||||
, "Insert this hook (slave) or ring (master) into another ring." }
|
||||
, { "merge" , (PyCFunction)PyHook_merge , METH_VARARGS
|
||||
, "Merge the the two rings of thoses masters." }
|
||||
, {NULL, NULL, 0, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// PyHook Type Methods.
|
||||
|
||||
|
||||
PlugDeleteMethod(PyHook_DeAlloc,PyHook)
|
||||
PyTypeObjectLinkPyType(Hook)
|
||||
|
||||
|
||||
#else // End of Python Module Code Part.
|
||||
|
||||
|
||||
// +=================================================================+
|
||||
// | "PyHook" Shared Library Code Part |
|
||||
// +=================================================================+
|
||||
|
||||
PyTypeRootObjectDefinitions(Hook)
|
||||
|
||||
|
||||
#endif // End of Shared Library Code Part.
|
||||
|
||||
} // extern "C".
|
||||
|
||||
} // Isobar namespace.
|
|
@ -0,0 +1,56 @@
|
|||
|
||||
// -*- 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/PyHook.h" |
|
||||
// +-----------------------------------------------------------------+
|
||||
|
||||
|
||||
#ifndef ISOBAR_PYHOOK_H
|
||||
#define ISOBAR_PYHOOK_H
|
||||
|
||||
#include "hurricane/isobar/PyHurricane.h"
|
||||
#include "hurricane/Hook.h"
|
||||
|
||||
namespace Isobar {
|
||||
|
||||
using namespace Hurricane;
|
||||
|
||||
extern "C" {
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Python Object : "PyHook".
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
Hook* _object;
|
||||
} PyHook;
|
||||
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// Functions & Types exported to "PyHurricane.ccp".
|
||||
|
||||
extern PyTypeObject PyTypeHook;
|
||||
extern PyMethodDef PyHook_Methods[];
|
||||
|
||||
extern void PyHook_LinkPyType ();
|
||||
|
||||
#define IsPyHook(v) ( (v)->ob_type == &PyTypeHook )
|
||||
#define PYHOOK(v) ( (PyHook*)(v) )
|
||||
#define PYHOOK_O(v) ( PYHOOK(v)->_object )
|
||||
|
||||
|
||||
} // extern "C".
|
||||
|
||||
} // Isobar namespace.
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue