# 6. Encapsulating DbU — Coriolis 2 documentation

# 6. Encapsulating DbU

While `Hurricane::DbU` is a class, the `Hurricane::DbU::Unit` is only a `typedef` over `uint64_t`. The `DbU` class only provides a set of static methods to manipulate and convert to and from other units. At Python level, `DbU::Unit` will be stored in plain `long long`.

When a `DbU::Unit` argument is expected in a Python functions, just use the `DbU::Unit PyAny_AsLong( PyObject* )` function to convert it.

For example, if we explicit the expension of:

    DirectSetLongAttribute(PyPoint_SetX,setX,PyPoint,Point)

We would get:

    static PyObject* PyPoint_setX ( PyPoint *self, PyObject* args )
    {
      Point* cobject = static_cast<Point*>( self->_object );
      if (cobject == NULL) {
        PyErr_SetString( ProxyError
                       , "Attempt to call Point.setX() on an unbound Hurricane object" );
        return NULL;
      }

      HTRY
        PyObject* arg0 = NULL;
        if (not PyArg_ParseTuple( args, "O:Point.setX()", &arg0 ))
          return ( NULL );
        cobject->setX( Isobar::PyAny_AsLong(arg0) );
      HCATCH
      Py_RETURN_NONE;
    }

For the other way around, use `PyObject* PyDbU_FromLong( DbU::Unit )`.

    DirectGetLongAttribute(PyPoint_GetX,getX,PyPoint,Point)

We would get:

    static PyObject* PyPoint_GetX ( PyPoint *self, PyObject* args )
    {
      Point* cobject = static_cast<Point*>( self->_object );
      if (cobject == NULL) {
        PyErr_SetString( ProxyError
                       , "Attempt to call Point.getX() on an unbound Hurricane object" );
        return NULL;
      }
      return Isobar::PyDbU_FromLong(cobject->getX());
    }