Base::PyHandle< HandledType > Class Template Reference

The PyHandler class This class is the base class of all FreeCAD classes which exports into the python space. More...

#include <PyExport.h>

List of all members.

Public Member Functions

PyObjectgetPyObject (void) const
 returns the type as PyObject
bool IsNull (void) const
 Test if it not handels something.
bool IsValid (void) const
 Test if it handels something.
const HandledType & operator* () const
 derefrence operators
HandledType & operator* ()
 derefrence operators
const HandledType * operator-> () const
 derefrence operators
HandledType * operator-> ()
 derefrence operators
bool operator< (const PyHandle< HandledType > &other) const
 lower operator needed for sorting in maps and sets
PyHandle< HandledType > & operator= (const PyHandle< HandledType > &other)
PyHandle< HandledType > & operator= (HandledType *other)
bool operator== (const PyHandle< HandledType > &other) const
 equal operator
 PyHandle (const PyHandle< HandledType > &ToHandel)
 Copy constructor.
 PyHandle (HandledType *ToHandel=0L)
 pointer and default constructor the good way would be not using pointer instead using a overwriten new operator in the HandledType class! But is not easy to inforce!
 ~PyHandle ()
 destructor Release the referenc count which cause, if was the last one, the referenced object to destruct!

Detailed Description

template<class HandledType>
class Base::PyHandle< HandledType >

The PyHandler class This class is the base class of all FreeCAD classes which exports into the python space.

This class handles the creation referencing of the python export object.

Remarks:
GetPyObject() returns the associated Python object to any C++ subclasses. As we cannot determine for sure if we can increment the returned Python object from outside of GetPyObject() we have specified that GetPyObject() does already the increment of the reference counter if needed.

E.g. if GetPyObject() always returns a new Python object then no increment is necessary, because at construction time the reference counter is already set to 1. If the Python interpreter stores this object pointer into a local variable and destroys this variable then the reference counter gets decremented (to 0) and the object gets destroyed automatically. In case we didn't make this specification and increment the Python object from outside once again then the reference counter would be set to 2 and there would be no chance to destroy the object again.

The other case is that we have a member variable in our C++ class that holds the Python object then we either can create this Python in the constructor or create it the first time when GetPyObject() gets called. In the destructor then we must decrement the Python object to avoid a memory leak while GetPyObject() then increments the Python object everytime it gets called.

Remarks:
One big consequence of this specification is that the programmer must know whether the Python interpreter gets the Python object or not. If the interpreter gets the object then it decrements the counter later on when the internal variable is freed. In case the interpreter doesn't get this object then the programmer must do the decrement on his own.
Note:
To not to undermine this specification the programmer must make sure to get the Python object always via GetPyObject().
See also:
PyHandle @ Python Object handle class Using pointers on classes derived from PyObjectBase would be potentionaly dangerous because you would have to take care of the referenc counting of python by your self. There fore this class was designd. It takes care of references and as long as a object of this class exists the handled class get not destructed. That means a PyObjectBase derived object you can only destruct by destructing all FCPyHandle and all python references on it!
PyObjectBase

Definition at line 104 of file PyExport.h.


Constructor & Destructor Documentation

template<class HandledType>
Base::PyHandle< HandledType >::PyHandle ( HandledType *  ToHandel = 0L  )  [inline]

pointer and default constructor the good way would be not using pointer instead using a overwriten new operator in the HandledType class! But is not easy to inforce!

Definition at line 115 of file PyExport.h.

template<class HandledType>
Base::PyHandle< HandledType >::PyHandle ( const PyHandle< HandledType > &  ToHandel  )  [inline]

Copy constructor.

Definition at line 122 of file PyExport.h.

template<class HandledType>
Base::PyHandle< HandledType >::~PyHandle (  )  [inline]

destructor Release the referenc count which cause, if was the last one, the referenced object to destruct!

Definition at line 133 of file PyExport.h.


Member Function Documentation

template<class HandledType>
PyObject* Base::PyHandle< HandledType >::getPyObject ( void   )  const [inline]

returns the type as PyObject

Definition at line 199 of file PyExport.h.

template<class HandledType>
bool Base::PyHandle< HandledType >::IsNull ( void   )  const [inline]

Test if it not handels something.

Definition at line 213 of file PyExport.h.

template<class HandledType>
bool Base::PyHandle< HandledType >::IsValid ( void   )  const [inline]

Test if it handels something.

Definition at line 208 of file PyExport.h.

template<class HandledType>
const HandledType& Base::PyHandle< HandledType >::operator* (  )  const [inline]

derefrence operators

Definition at line 173 of file PyExport.h.

template<class HandledType>
HandledType& Base::PyHandle< HandledType >::operator* (  )  [inline]

derefrence operators

Definition at line 163 of file PyExport.h.

template<class HandledType>
const HandledType* Base::PyHandle< HandledType >::operator-> (  )  const [inline]

derefrence operators

Definition at line 178 of file PyExport.h.

template<class HandledType>
HandledType* Base::PyHandle< HandledType >::operator-> (  )  [inline]

derefrence operators

Definition at line 168 of file PyExport.h.

template<class HandledType>
bool Base::PyHandle< HandledType >::operator< ( const PyHandle< HandledType > &  other  )  const [inline]

lower operator needed for sorting in maps and sets

Definition at line 185 of file PyExport.h.

template<class HandledType>
PyHandle<HandledType>& Base::PyHandle< HandledType >::operator= ( const PyHandle< HandledType > &  other  )  [inline]

Definition at line 153 of file PyExport.h.

template<class HandledType>
PyHandle<HandledType>& Base::PyHandle< HandledType >::operator= ( HandledType *  other  )  [inline]

Definition at line 142 of file PyExport.h.

template<class HandledType>
bool Base::PyHandle< HandledType >::operator== ( const PyHandle< HandledType > &  other  )  const [inline]

equal operator

Definition at line 192 of file PyExport.h.


The documentation for this class was generated from the following file:

Generated on Wed Nov 23 19:01:47 2011 for FreeCAD by  doxygen 1.6.1