From 31abc474f1e992fc0603409c69ea19e9282cda91 Mon Sep 17 00:00:00 2001 From: Jean-Paul Chaput Date: Sat, 27 Apr 2013 16:02:00 +0000 Subject: [PATCH] * ./hurricane/sr/isobar: - New: Added Hook support (PyHook). Hook accessors added in PyContact and PySegment. --- hurricane/src/isobar/CMakeLists.txt | 1 + hurricane/src/isobar/PyBox.cpp | 34 +++------- hurricane/src/isobar/PyContact.cpp | 66 ++++++------------- hurricane/src/isobar/PyHurricane.cpp | 40 +++-------- hurricane/src/isobar/PySegment.cpp | 29 +++++++- .../src/isobar/hurricane/isobar/PyHurricane.h | 17 +++++ 6 files changed, 83 insertions(+), 104 deletions(-) diff --git a/hurricane/src/isobar/CMakeLists.txt b/hurricane/src/isobar/CMakeLists.txt index eb55fb80..457d6fcb 100644 --- a/hurricane/src/isobar/CMakeLists.txt +++ b/hurricane/src/isobar/CMakeLists.txt @@ -40,6 +40,7 @@ PyNetExternalComponents.cpp PyOccurrence.cpp PyOccurrenceCollection.cpp + PyHook.cpp PyPad.cpp PyPath.cpp PyPin.cpp diff --git a/hurricane/src/isobar/PyBox.cpp b/hurricane/src/isobar/PyBox.cpp index b9cb6adb..8dabcd35 100644 --- a/hurricane/src/isobar/PyBox.cpp +++ b/hurricane/src/isobar/PyBox.cpp @@ -1,5 +1,10 @@ -// x-----------------------------------------------------------------x -// | | + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2013, All Rights Reserved +// +// +-----------------------------------------------------------------+ // | C O R I O L I S | // | I s o b a r - Hurricane / Python Interface | // | | @@ -7,10 +12,7 @@ // | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | =============================================================== | // | C++ Module : "./PyBox.cpp" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x +// +-----------------------------------------------------------------+ @@ -29,18 +31,13 @@ extern "C" { #define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Box,box,function) -// x=================================================================x +// +=================================================================+ // | "PyBox" Python Module Code Part | -// x=================================================================x +// +=================================================================+ #if defined(__PYTHON_MODULE__) - // x-------------------------------------------------------------x - // | "PyBox" Attribute Methods | - // x-------------------------------------------------------------x - - // Standart Accessors (Attributes). DirectGetLongAttribute(PyBox_getXMin ,getXMin ,PyBox,Box) DirectGetLongAttribute(PyBox_getYMin ,getYMin ,PyBox,Box) @@ -64,11 +61,6 @@ extern "C" { DirectDestroyAttribute(PyBox_destroy, PyBox) - - - // --------------------------------------------------------------- - // Attribute Method : "PyBox_getCenter ()" - static PyObject* PyBox_getCenter ( PyBox *self ) { trace << "PyBox_getCenter()" << endl; @@ -85,12 +77,6 @@ extern "C" { } - - - - // --------------------------------------------------------------- - // Attribute Method : "PyBox_getUnion ()" - static PyObject* PyBox_getUnion ( PyBox *self, PyObject* args ) { trace << "PyBox_getUnion()" << endl; diff --git a/hurricane/src/isobar/PyContact.cpp b/hurricane/src/isobar/PyContact.cpp index 83ed4693..4ba778ea 100644 --- a/hurricane/src/isobar/PyContact.cpp +++ b/hurricane/src/isobar/PyContact.cpp @@ -1,5 +1,10 @@ -// x-----------------------------------------------------------------x -// | | + +// -*- C++ -*- +// +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2013, All Rights Reserved +// +// +-----------------------------------------------------------------+ // | C O R I O L I S | // | I s o b a r - Hurricane / Python Interface | // | | @@ -7,16 +12,12 @@ // | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | =============================================================== | // | C++ Module : "./PyContact.cpp" | -// | *************************************************************** | -// | U p d a t e s | -// | | -// x-----------------------------------------------------------------x - - +// +-----------------------------------------------------------------+ #include "hurricane/isobar/PyNet.h" #include "hurricane/isobar/PyLayer.h" +#include "hurricane/isobar/PyHook.h" #include "hurricane/isobar/PyContact.h" #include "hurricane/isobar/PyHorizontal.h" #include "hurricane/isobar/PyVertical.h" @@ -24,7 +25,6 @@ namespace Isobar { - using namespace Hurricane; @@ -38,17 +38,11 @@ extern "C" { #define METHOD_HEAD(function) GENERIC_METHOD_HEAD(Contact,contact,function) -// x=================================================================x -// | "PyContact" Python Module Code Part | -// x=================================================================x - #if defined(__PYTHON_MODULE__) - - // x-------------------------------------------------------------x - // | "PyContact" Attribute Methods | - // x-------------------------------------------------------------x - +// +=================================================================+ +// | "PyContact" Python Module Code Part | +// +=================================================================+ // Standart Accessors (Attributes). DirectGetLongAttribute(PyContact_getWidth , getWidth , PyContact,Contact) @@ -63,15 +57,13 @@ extern "C" { DirectSetLongAttribute(PyContact_setY ,setY ,"Contact.setY" ,PyContact,Contact) DirectSetLongAttribute(PyContact_setDx,setDx,"Contact.setDx",PyContact,Contact) DirectSetLongAttribute(PyContact_setDy,setDy,"Contact.setDy",PyContact,Contact) + accessorHook(getAnchorHook,PyContact,Contact) // Standart destroy (Attribute). DBoDestroyAttribute(PyContact_destroy, PyContact) - // --------------------------------------------------------------- - // Attribute Method : "PyContact_translate ()" - static PyObject* PyContact_translate ( PyContact *self, PyObject* args ) { trace << "PyContact_translate ()" << endl; @@ -90,12 +82,10 @@ extern "C" { } - // --------------------------------------------------------------- - // PyContact Attribute Method table. - PyMethodDef PyContact_Methods[] = - { { "destroy" , (PyCFunction)PyContact_destroy , METH_NOARGS + { { "destroy" , (PyCFunction)PyContact_destroy , METH_NOARGS , "Destroy associated hurricane object, the python object remains." } + , { "getAnchorHook" , (PyCFunction)PyContact_getWidth , METH_NOARGS , "Return the contact anchor hook." } , { "getWidth" , (PyCFunction)PyContact_getWidth , METH_NOARGS , "Return the contact width." } , { "getHalfWidth" , (PyCFunction)PyContact_getHalfWidth , METH_NOARGS , "Return the contact half width." } , { "getHeight" , (PyCFunction)PyContact_getHeight , METH_NOARGS , "Return the contact height." } @@ -111,14 +101,6 @@ extern "C" { }; - - - // x-------------------------------------------------------------x - // | "PyContact" Object Methods | - // x-------------------------------------------------------------x - - - DBoDeleteMethod(Contact) PyTypeObjectLinkPyType(Contact) @@ -126,12 +108,10 @@ extern "C" { #else // End of Python Module Code Part. -// x=================================================================x +// +=================================================================+ // | "PyContact" Shared Library Code Part | -// x=================================================================x +// +=================================================================+ - // --------------------------------------------------------------- - // Attribute Method : "PyContact_create ()" PyObject* PyContact_create ( PyObject *module, PyObject *args ) { trace << "PyContact_create()" << endl; @@ -166,22 +146,14 @@ extern "C" { } - - // Link/Creation Method. DBoLinkCreateMethod(Contact) - - - // --------------------------------------------------------------- - // PyContact Object Definitions. - PyTypeInheritedObjectDefinitions(Contact, Component) #endif // End of Shared Library Code Part. -} // End of extern "C". +} // extern "C". - -} // End of Isobar namespace. +} // Isobar namespace. diff --git a/hurricane/src/isobar/PyHurricane.cpp b/hurricane/src/isobar/PyHurricane.cpp index 570ee4f2..509b2a8e 100644 --- a/hurricane/src/isobar/PyHurricane.cpp +++ b/hurricane/src/isobar/PyHurricane.cpp @@ -1,36 +1,8 @@ // -*- C++ -*- // -// This file is part of the Coriolis Project. -// Copyright (C) Laboratoire LIP6 - Departement ASIM -// Universite Pierre et Marie Curie -// -// Main contributors : -// Christophe Alexandre -// Sophie Belloeil -// Hugo Clément -// Jean-Paul Chaput -// Damien Dupuis -// Christian Masson -// Marek Sroka -// -// The Coriolis Project is free software; you can redistribute it -// and/or modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 of -// the License, or (at your option) any later version. -// -// The Coriolis Project is distributed in the hope that it will be -// useful, but WITHOUT ANY WARRANTY; without even the implied warranty -// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with the Coriolis Project; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -// USA -// -// License-Tag -// Authors-Tag +// This file is part of the Coriolis Software. +// Copyright (c) UPMC 2008-2013, All Rights Reserved // // +-----------------------------------------------------------------+ // | C O R I O L I S | @@ -43,8 +15,6 @@ // +-----------------------------------------------------------------+ - - #include "hurricane/isobar/PyHurricane.h" #include "hurricane/isobar/PyBreakpoint.h" #include "hurricane/isobar/PyUpdateSession.h" @@ -80,6 +50,7 @@ #include "hurricane/isobar/PyNetCollection.h" #include "hurricane/isobar/PyNetExternalComponents.h" #include "hurricane/isobar/PyHyperNet.h" +#include "hurricane/isobar/PyHook.h" #include "hurricane/isobar/PyComponent.h" #include "hurricane/isobar/PyComponentCollection.h" #include "hurricane/isobar/PyPlug.h" @@ -578,6 +549,7 @@ extern "C" { PyReference_LinkPyType (); PyNet_LinkPyType (); PyHyperNet_LinkPyType (); + PyHook_LinkPyType (); PyComponent_LinkPyType (); PySegment_LinkPyType (); PyPad_LinkPyType (); @@ -600,6 +572,7 @@ extern "C" { PYTYPE_READY ( Technology ) PYTYPE_READY ( Library ) PYTYPE_READY ( Entity ) + PYTYPE_READY ( Hook ) PYTYPE_READY ( Material ) PYTYPE_READY ( Layer ) PYTYPE_READY ( LayerMask ) @@ -663,6 +636,7 @@ extern "C" { __cs.addType ( "ent" , &PyTypeEntity , "" , false ); __cs.addType ( "cell" , &PyTypeCell , "" , false, "ent" ); __cs.addType ( "cellCol" , &PyTypeCellCollection , "" , false ); + __cs.addType ( "hook" , &PyTypeHook , "" , false ); __cs.addType ( "comp" , &PyTypeComponent , "" , false, "ent" ); __cs.addType ( "compCol" , &PyTypeComponentCollection , "" , false ); __cs.addType ( "contact" , &PyTypeContact , "" , false, "comp" ); @@ -753,6 +727,8 @@ extern "C" { Py_INCREF ( &PyTypeQuery ); PyModule_AddObject ( module, "Query" , (PyObject*)&PyTypeQuery ); + Py_INCREF ( &PyTypeHook ); + PyModule_AddObject ( module, "Hook" , (PyObject*)&PyTypeHook ); Py_INCREF ( &PyTypeRoutingPad ); PyModule_AddObject ( module, "RoutingPad" , (PyObject*)&PyTypeRoutingPad ); Py_INCREF ( &PyTypeVertical ); diff --git a/hurricane/src/isobar/PySegment.cpp b/hurricane/src/isobar/PySegment.cpp index 370e87aa..3d388415 100644 --- a/hurricane/src/isobar/PySegment.cpp +++ b/hurricane/src/isobar/PySegment.cpp @@ -18,6 +18,7 @@ +#include "hurricane/isobar/PyHook.h" #include "hurricane/isobar/PyNet.h" #include "hurricane/isobar/PyLayer.h" #include "hurricane/isobar/PySegment.h" @@ -58,11 +59,34 @@ extern "C" { DirectGetLongAttribute(PySegment_getWidth ,getWidth ,PySegment,Segment) DirectSetLongAttribute(PySegment_setWidth ,setWidth ,"Segment.setWidth",PySegment,Segment) DirectVoidMethod(Segment,segment,invert) + accessorHook(getSourceHook,PySegment,Segment) + accessorHook(getTargetHook,PySegment,Segment) // Standard Destroy (Attribute). DBoDestroyAttribute(PySegment_destroy, PySegment) + static PyObject* PySegment_getOppositeHook ( PySegment *self, PyObject* args ) + { + trace << "PySegment_getOppositeHook()" << endl; + METHOD_HEAD ( "Segment.getOppositeHook()" ) + + PyHook* pyReturnHook = PyObject_NEW( PyHook, &PyTypeHook ); + if (pyReturnHook == NULL) return NULL; + + PyObject* pyHook = NULL; + if (not PyArg_ParseTuple(args,"O:Hook.merge", &pyHook)) return NULL; + + Hook* hook = PYHOOK_O(pyHook); + + HTRY + pyReturnHook->_object = segment->getOppositeHook( hook ); + HCATCH + + return (PyObject*)pyReturnHook; + } + + static PyObject* PySegment_getSource ( PySegment *self ) { trace << "PySegment_getSource()" << endl; @@ -139,7 +163,10 @@ extern "C" { // PySegment Attribute Method table. PyMethodDef PySegment_Methods[] = - { { "getSource" , (PyCFunction)PySegment_getSource , METH_NOARGS , "Return the Segment source component (or None)." } + { { "getSourceHook" , (PyCFunction)PySegment_getSourceHook , METH_NOARGS , "Return the nested source Hook." } + , { "getTargetHook" , (PyCFunction)PySegment_getTargetHook , METH_NOARGS , "Return the nested target Hook." } + , { "getOppositeHook" , (PyCFunction)PySegment_getOppositeHook , METH_VARARGS, "Return the nested Hook opposite of the argument hook." } + , { "getSource" , (PyCFunction)PySegment_getSource , METH_NOARGS , "Return the Segment source component (or None)." } , { "getTarget" , (PyCFunction)PySegment_getTarget , METH_NOARGS , "Return the Segment target component (or None)." } , { "getSourceX" , (PyCFunction)PySegment_getSourceX , METH_NOARGS , "Return the Segment source X value." } , { "getSourceY" , (PyCFunction)PySegment_getSourceY , METH_NOARGS , "Return the Segment source Y value." } diff --git a/hurricane/src/isobar/hurricane/isobar/PyHurricane.h b/hurricane/src/isobar/hurricane/isobar/PyHurricane.h index ca1fd9e1..8d6a7b97 100644 --- a/hurricane/src/isobar/hurricane/isobar/PyHurricane.h +++ b/hurricane/src/isobar/hurricane/isobar/PyHurricane.h @@ -473,6 +473,23 @@ extern "C" { } +#define accessorHook(FUNC_NAME,PY_SELF_TYPE,SELF_TYPE) \ + static PyObject* PY_SELF_TYPE##_##FUNC_NAME( PY_SELF_TYPE *self ) \ + { \ + trace << #PY_SELF_TYPE "_" #FUNC_NAME "()" << endl; \ + \ + PyHook* pyHook = PyObject_NEW( PyHook, &PyTypeHook ); \ + if (pyHook == NULL) return NULL; \ + \ + HTRY \ + GENERIC_METHOD_HEAD(SELF_TYPE,cobject,#SELF_TYPE"."#FUNC_NAME"()") \ + pyHook->_object = cobject->FUNC_NAME(); \ + HCATCH \ + \ + return (PyObject*)pyHook; \ + } \ + + // ------------------------------------------------------------------- // Attribute Method Macro For Booleans.