// x-----------------------------------------------------------------x 
// |                                                                 |
// |                   C O R I O L I S                               |
// |    I s o b a r  -  Hurricane / Python Interface                 |
// |                                                                 |
// |  Author      :                    Sophie BELLOEIL               |
// |  E-mail      :       Sophie.Belloeil@asim.lip6.fr               |
// | =============================================================== |
// |  C++ Module  :       "./PyVertical.cpp"                         |
// | *************************************************************** |
// |  U p d a t e s                                                  |
// |                                                                 |
// x-----------------------------------------------------------------x




#include "hurricane/isobar/PyNet.h"
#include "hurricane/isobar/PyLayer.h"
#include "hurricane/isobar/PyVertical.h"


namespace  Isobar {

using namespace Hurricane;

extern "C" {


#undef  ACCESS_OBJECT
#undef  ACCESS_CLASS
#define ACCESS_OBJECT            _baseObject._baseObject._baseObject._object
#define ACCESS_CLASS(_pyObject)  &(_pyObject->_baseObject._baseObject._baseObject)
#define METHOD_HEAD(function)    GENERIC_METHOD_HEAD(Vertical,vertical,function)

// x=================================================================x
// |              "PyVertical" Python Module Code Part               |
// x=================================================================x

#if defined(__PYTHON_MODULE__)

  
  // x-------------------------------------------------------------x
  // |              "PyVertical" Attribute Methods                 |
  // x-------------------------------------------------------------x


  // Standard destroy (Attribute).
  DBoDestroyAttribute(PyVertical_destroy, PyVertical)


  // ---------------------------------------------------------------
  // Attribute Method  :  "PyVertical_translate ()"

  static PyObject* PyVertical_translate ( PyVertical *self, PyObject* args ) {
    trace << "PyVertical_translate ()" << endl;
    
    HTRY
    METHOD_HEAD ( "Vertical.translate()" )
    DbU::Unit dx=0, dy=0;
    if (PyArg_ParseTuple(args,"ll:Vertical.translate", &dx, &dy)) {
        vertical->translate(dx, dy);
    } else {
      PyErr_SetString ( ConstructorError, "invalid number of parameters for Vertical.translate()" );
      return NULL;
    }
    HCATCH

    Py_RETURN_NONE;
  }


  // ---------------------------------------------------------------
  // PyVertical Attribute Method table.

  PyMethodDef PyVertical_Methods[] =
    { { "destroy"              , (PyCFunction)PyVertical_destroy   , METH_NOARGS
                               , "Destroy associated hurricane object, the python object remains." }
    , { "translate"            , (PyCFunction)PyVertical_translate , METH_VARARGS, "Translates the Vertical segment of dx and dy." }
    , {NULL, NULL, 0, NULL}           /* sentinel */
    };




  // x-------------------------------------------------------------x
  // |                "PyVertical" Object Methods                  |
  // x-------------------------------------------------------------x

  DBoDeleteMethod(Vertical)
  PyTypeObjectLinkPyType(Vertical)


#else  // End of Python Module Code Part.


// x=================================================================x
// |             "PyVertical" Shared Library Code Part               |
// x=================================================================x

  // ---------------------------------------------------------------
  // Attribute Method  :  "PyVertical_create ()"

  PyObject* PyVertical_create ( PyObject *module, PyObject *args ) {
    trace << "PyVertical_create()" << endl;

    PyObject* arg0;
    PyObject* arg1;
    PyObject* arg2;
    PyObject* arg3;
    PyObject* arg4;
    PyObject* arg5;
    PyObject* arg6;
    Vertical* vertical = NULL;

    HTRY
    __cs.init ("Vertical.create");
    if (!PyArg_ParseTuple(args,"O&O&O&|O&O&O&O&:Vertical.create"
                           ,Converter,&arg0
                           ,Converter,&arg1
                           ,Converter,&arg2
                           ,Converter,&arg3
                           ,Converter,&arg4
                           ,Converter,&arg5
                           ,Converter,&arg6
                           )) {
        PyErr_SetString ( ConstructorError, "invalid number of parameters for Vertical constructor." );
        return NULL;
    }


    if      ( __cs.getObjectIds() == NET_LAYER_INT_ARG )
      vertical = Vertical::create ( PYNET_O(arg0)
                                  , PYLAYER_O(arg1)
                                  , PyInt_AsLong(arg2) );
    else if ( __cs.getObjectIds() == NET_LAYER_INTS2_ARG )
      vertical = Vertical::create ( PYNET_O(arg0)
                                  , PYLAYER_O(arg1)
                                  , PyInt_AsLong(arg2)
                                  , PyInt_AsLong(arg3) );
    else if ( __cs.getObjectIds() == COMPS2_LAYER_INT_ARG )
      vertical = Vertical::create ( ComponentCast(arg0)
                                  , ComponentCast(arg1)
                                  , PYLAYER_O(arg2)
                                  , PyInt_AsLong(arg3) );
    else if ( __cs.getObjectIds() == NET_LAYER_INTS3_ARG )
      vertical = Vertical::create ( PYNET_O(arg0)
                                  , PYLAYER_O(arg1)
                                  , PyInt_AsLong(arg2)
                                  , PyInt_AsLong(arg3)
                                  , PyInt_AsLong(arg4) );
    else if ( __cs.getObjectIds() == COMPS2_LAYER_INTS2_ARG )
      vertical = Vertical::create ( ComponentCast(arg0)
                                  , ComponentCast(arg1)
                                  , PYLAYER_O(arg2)
                                  , PyInt_AsLong(arg3)
                                  , PyInt_AsLong(arg4) );
    else if ( __cs.getObjectIds() == NET_LAYER_INTS4_ARG )
      vertical = Vertical::create ( PYNET_O(arg0)
                                  , PYLAYER_O(arg1)
                                  , PyInt_AsLong(arg2)
                                  , PyInt_AsLong(arg3)
                                  , PyInt_AsLong(arg4)
                                  , PyInt_AsLong(arg5) );
    else if ( __cs.getObjectIds() == COMPS2_LAYER_INTS3_ARG )
      vertical = Vertical::create ( ComponentCast(arg0)
                                  , ComponentCast(arg1)
                                  , PYLAYER_O(arg2)
                                  , PyInt_AsLong(arg3)
                                  , PyInt_AsLong(arg4)
                                  , PyInt_AsLong(arg5) );
    else if ( __cs.getObjectIds() == COMPS2_LAYER_INTS4_ARG )
      vertical = Vertical::create ( ComponentCast(arg0)
                                  , ComponentCast(arg1)
                                  , PYLAYER_O(arg2)
                                  , PyInt_AsLong(arg3)
                                  , PyInt_AsLong(arg4)
                                  , PyInt_AsLong(arg5)
                                  , PyInt_AsLong(arg6) );
    else {
      PyErr_SetString ( ConstructorError, "invalid number of parameters for Vertical constructor." );
      return NULL;
    }

    HCATCH

    return PyVertical_Link(vertical);
  }



  // Link/Creation Method.
  DBoLinkCreateMethod(Vertical)

  // ---------------------------------------------------------------
  // PyVertical Object Definitions.

  PyTypeInheritedObjectDefinitions(Vertical, Segment)

#endif  // End of Shared Library Code Part.


}  // End of extern "C".




}  // End of Isobar namespace.
 
