UGDK  0.4.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
virtualdata.h
Go to the documentation of this file.
1 
2 #ifndef UGDK_SCRIPT_VIRTUALDATA_H_
3 #define UGDK_SCRIPT_VIRTUALDATA_H_
4 
5 #include <ugdk/portable/tr1.h>
6 
7 #include FROM_TR1(memory)
8 
9 #include <vector>
10 #include <list>
11 #include <map>
12 #include FROM_TR1(functional)
13 
14 #include <ugdk/base/types.h>
15 #include <ugdk/script/type.h>
16 
17 /*namespace ugdk {
18 namespace script {
19 class VirtualData;
20 }
21 }
22 
23 namespace std {
24 
25 template <>
26 struct less<std::tr1::shared_ptr<ugdk::script::VirtualData> > :
27 binary_function <std::tr1::shared_ptr<ugdk::script::VirtualData>,
28  std::tr1::shared_ptr<ugdk::script::VirtualData>,
29  bool> {
30  bool operator() (const std::tr1::shared_ptr<ugdk::script::VirtualData>& x,
31  const std::tr1::shared_ptr<ugdk::script::VirtualData>& y)
32  const
33  {return x.get()<y.get();}
34 };
35 
36 }*/
37 
38 namespace ugdk {
39 
40 namespace script {
41 
42 class VirtualObj;
43 class LangWrapper;
44 
46 class VirtualData : public std::tr1::enable_shared_from_this<VirtualData> {
47 
48  public:
49 
50  typedef std::tr1::shared_ptr<VirtualData> Ptr;
51  typedef std::tr1::shared_ptr<const VirtualData> ConstPtr;
52  typedef std::tr1::weak_ptr<VirtualData> WeakPtr;
53  typedef std::vector<Ptr> Vector;
54  typedef std::list<Ptr> List;
55  typedef std::map<Ptr, Ptr> Map;
56 
57  virtual ~VirtualData() {}
58 
59  Ptr Copy() {
60  return shared_from_this();
61  }
62 
64  virtual void* Unwrap(const VirtualType& type, bool disown) const = 0;
65  virtual const char* UnwrapString() const = 0;
66  virtual bool UnwrapBoolean() const = 0;
67  virtual int UnwrapInteger() const = 0;
68  virtual double UnwrapNumber() const = 0;
69  virtual Vector UnwrapVector() const = 0;
70  virtual List UnwrapList() const = 0;
71  virtual Map UnwrapMap() const = 0;
72 
74 
93  virtual void Wrap(void* data, const VirtualType& type) = 0;
94  virtual void WrapString(const char* str) = 0;
95  virtual void WrapBoolean(bool boolean) = 0;
96  virtual void WrapInteger(int number) = 0;
97  virtual void WrapNumber(double number) = 0;
98 
99  virtual LangWrapper* wrapper () const = 0;
100 
103  virtual Ptr Execute(const Vector& args) = 0;
104 
106 
108  virtual Ptr GetAttribute(Ptr key) = 0;
109 
110  virtual Ptr SetAttribute(Ptr key, Ptr value) = 0;
111 
112  virtual void* unsafe_data() const = 0;
113 
114  virtual void AddToBuffer() {}
115  virtual void RemoveFromBuffer() {}
116 
117  protected:
118 
120 
121  private:
122 
123 
124 
125 };
126 
127 } /* namespace script */
128 
129 } /* namespace ugdk */
130 
131 #endif /* UGDK_SCRIPT_VIRTUALDATA_H_ */