UGDK  0.5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
pythondata.h
Go to the documentation of this file.
1 #ifndef UGDK_SCRIPT_PYTHON_PYTHONDATA_H_
2 #define UGDK_SCRIPT_PYTHON_PYTHONDATA_H_
3 
4 #include <Python.h>
5 
9 
10 #include <vector>
11 
12 namespace ugdk {
13 namespace script {
14 
15 class VirtualObj;
16 class VirtualType;
17 
18 namespace python {
19 
20 class PythonData : public VirtualData {
21  public:
22  PythonData(PythonWrapper* wrapper, PyObject* data_object, bool owns_ref) : VirtualData(),
23  wrapper_(wrapper), own_ref_(owns_ref), py_data_(data_object) {}
24 
25  virtual ~PythonData() {
26  if (own_ref_)
27  Py_XDECREF(py_data_);
28  }
29 
31  virtual void* Unwrap(const VirtualType& type, bool disown) const override;
32  const char* UnwrapString() const override;
33  bool UnwrapBoolean() const override;
34  int UnwrapInteger() const override;
35  double UnwrapNumber() const override;
36  Vector UnwrapVector() const override;
37  List UnwrapList() const override;
38  Map UnwrapMap() const override;
39 
41  virtual void Wrap(void* data, const VirtualType& type, bool disown) override;
42  virtual void WrapString(const char* str) override;
43  virtual void WrapBoolean(bool boolean) override;
44  virtual void WrapInteger(int number) override;
45  virtual void WrapNumber(double number) override;
46 
47  virtual LangWrapper* wrapper () const { return wrapper_; }
48 
51  virtual Ptr Execute(const std::vector<Ptr>& args);
52 
54  virtual Ptr GetAttribute(Ptr key);
55 
56  virtual Ptr SetAttribute(Ptr key, Ptr value);
57 
58  void* unsafe_data() const {
59  return static_cast<void*>(py_data_);
60  }
61 
62  protected:
64  bool own_ref_; //if true, we own a ref to our PyObject* (py_data_), so we need to DECREF it in due time.
65  PyObject* py_data_;
66 };
67 
68 }
69 } /* namespace script */
70 } /* namespace ugdk */
71 
72 #endif /* UGDK_SCRIPT_PYTHON_PYTHONDATA_H_ */
Definition: pythondata.h:20
virtual LangWrapper * wrapper() const
Definition: pythondata.h:47
Abstract class representing virtual script data.
Definition: virtualdata.h:42
PythonData(PythonWrapper *wrapper, PyObject *data_object, bool owns_ref)
Definition: pythondata.h:22
virtual void Wrap(void *data, const VirtualType &type, bool disown) override
Tries to wrap the given data with the given type into this object.
bool UnwrapBoolean() const override
virtual Ptr Execute(const std::vector< Ptr > &args)
bool own_ref_
Definition: pythondata.h:64
virtual void WrapString(const char *str) override
virtual void WrapInteger(int number) override
Vector UnwrapVector() const override
virtual void * Unwrap(const VirtualType &type, bool disown) const override
Tries to unwrap the data contained in this object using the given type.
PyObject * py_data_
Definition: pythondata.h:65
Definition: pythonwrapper.h:24
Definition: animation.h:11
Definition: type.h:13
double UnwrapNumber() const override
std::shared_ptr< VirtualData > Ptr
Definition: virtualdata.h:46
virtual ~PythonData()
Definition: pythondata.h:25
int UnwrapInteger() const override
std::map< Ptr, Ptr > Map
Definition: virtualdata.h:51
virtual Ptr GetAttribute(Ptr key)
Tries to get a attribute with the given name from this object.
const char * UnwrapString() const override
Map UnwrapMap() const override
virtual void WrapBoolean(bool boolean) override
virtual Ptr SetAttribute(Ptr key, Ptr value)
Definition: langwrapper.h:17
List UnwrapList() const override
std::list< Ptr > List
Definition: virtualdata.h:50
virtual void WrapNumber(double number) override
std::vector< Ptr > Vector
Definition: virtualdata.h:49
PythonWrapper * wrapper_
Definition: pythondata.h:63
void * unsafe_data() const
Definition: pythondata.h:58