#ifndef CPYCPPYY_PYRESULT_H #define CPYCPPYY_PYRESULT_H ////////////////////////////////////////////////////////////////////////////// // // // TPyResult // // // // Morphing return type from evaluating python expressions. // // // ////////////////////////////////////////////////////////////////////////////// // Python struct _object; typedef _object PyObject; // Bindings #include "CPyCppyy/CommonDefs.h" namespace CPyCppyy { class CPYCPPYY_CLASS_EXTERN PyResult { public: PyResult(); PyResult(PyObject* pyobject); PyResult(const PyResult&); PyResult& operator=(const PyResult&); virtual ~PyResult(); // conversions to standard types, may fail if unconvertible operator char*() const; operator const char*() const; operator char() const; operator long() const; operator int() const { return (int)operator long(); } operator short() const { return (short)operator long(); } operator unsigned long() const; operator unsigned int() const { return (unsigned int)operator unsigned long(); } operator unsigned short() const { return (unsigned short)operator unsigned long(); } operator double() const; operator float() const { return (float)operator double(); } // used for both general object type and PyObject conversions operator void*() const; template operator T*() const { return (T*)(void*)*this; } // used strictly for PyObject conversions operator PyObject*() const; private: PyObject* fPyObject; //! actual python object }; } // namespace CPyCppyy #endif // !CPYCPPYY_PYRESULT_H