Utilities.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef ROCKETCOREPYTHONUTILITIES_H
00029 #define ROCKETCOREPYTHONUTILITIES_H
00030
00031 #include <Rocket/Core/Variant.h>
00032 #include <Rocket/Core/Python/Header.h>
00033 #include <Rocket/Core/Python/Python.h>
00034
00035 namespace Rocket {
00036 namespace Core {
00037 namespace Python {
00038
00039 class ROCKETCOREPYTHON_API Utilities
00040 {
00041 public:
00043 static bool IsCallable(PyObject* self, const char* method_name);
00044
00050 template <typename R>
00051 static R Call(PyObject* object, const char* method_name, const python::tuple& args)
00052 {
00053 PyObject* result = PythonCall(object, method_name, args);
00054
00055 python::converter::return_from_python<R> converter;
00056 return converter(result);
00057 }
00063 static bool Call(PyObject* object, const char* method_name, const python::tuple& args);
00064
00068 template< typename T >
00069 static inline python::object MakeObject(T* object)
00070 {
00071
00072 typename python::return_by_value::apply< T* >::type result_converter;
00073 return python::object(python::handle<>(result_converter(object)));
00074 }
00078 template< typename T >
00079 static inline python::object MakeObject(const T& object)
00080 {
00081
00082 return python::object(object);
00083 }
00084
00087 static void PrintError(bool clear_error = false);
00088
00093 static bool ConvertToVariant(Variant& variant, PyObject* object);
00094
00095 private:
00096 static PyObject* PythonCall(PyObject* object, const char* method_name, const python::tuple& args );
00097 };
00098
00099
00100 template<>
00101 inline python::object Utilities::MakeObject< PyObject >(PyObject* object)
00102 {
00103 return python::object(python::handle<>(python::borrowed(object)));
00104 }
00105
00106 }
00107 }
00108 }
00109
00110 #endif
00111