UGDK
|
00001 00002 #ifndef UGDK_SCRIPT_VIRTUALDATA_H_ 00003 #define UGDK_SCRIPT_VIRTUALDATA_H_ 00004 00005 #include <ugdk/portable/tr1.h> 00006 00007 #include FROM_TR1(memory) 00008 00009 #include <vector> 00010 #include <list> 00011 #include <map> 00012 #include FROM_TR1(functional) 00013 00014 #include <ugdk/base/types.h> 00015 #include <ugdk/script/type.h> 00016 00017 /*namespace ugdk { 00018 namespace script { 00019 class VirtualData; 00020 } 00021 } 00022 00023 namespace std { 00024 00025 template <> 00026 struct less<std::tr1::shared_ptr<ugdk::script::VirtualData> > : 00027 binary_function <std::tr1::shared_ptr<ugdk::script::VirtualData>, 00028 std::tr1::shared_ptr<ugdk::script::VirtualData>, 00029 bool> { 00030 bool operator() (const std::tr1::shared_ptr<ugdk::script::VirtualData>& x, 00031 const std::tr1::shared_ptr<ugdk::script::VirtualData>& y) 00032 const 00033 {return x.get()<y.get();} 00034 }; 00035 00036 }*/ 00037 00038 namespace ugdk { 00039 00040 namespace script { 00041 00042 class VirtualObj; 00043 class LangWrapper; 00044 00046 class VirtualData : public std::tr1::enable_shared_from_this<VirtualData> { 00047 00048 public: 00049 00050 typedef std::tr1::shared_ptr<VirtualData> Ptr; 00051 typedef std::tr1::shared_ptr<const VirtualData> ConstPtr; 00052 typedef std::tr1::weak_ptr<VirtualData> WeakPtr; 00053 typedef std::vector<Ptr> Vector; 00054 typedef std::list<Ptr> List; 00055 typedef std::map<Ptr, Ptr> Map; 00056 00057 virtual ~VirtualData() {} 00058 00059 Ptr Copy() { 00060 return shared_from_this(); 00061 } 00062 00064 virtual void* Unwrap(const VirtualType& type, bool disown) const = 0; 00065 virtual const char* UnwrapString() const = 0; 00066 virtual bool UnwrapBoolean() const = 0; 00067 virtual int UnwrapInteger() const = 0; 00068 virtual double UnwrapNumber() const = 0; 00069 virtual Vector UnwrapVector() const = 0; 00070 virtual List UnwrapList() const = 0; 00071 virtual Map UnwrapMap() const = 0; 00072 00074 00093 virtual void Wrap(void* data, const VirtualType& type) = 0; 00094 virtual void WrapString(const char* str) = 0; 00095 virtual void WrapBoolean(bool boolean) = 0; 00096 virtual void WrapInteger(int number) = 0; 00097 virtual void WrapNumber(double number) = 0; 00098 00099 virtual LangWrapper* wrapper () const = 0; 00100 00103 virtual Ptr Execute(const Vector& args) = 0; 00104 00106 00108 virtual Ptr GetAttribute(Ptr key) = 0; 00109 00110 virtual Ptr SetAttribute(Ptr key, Ptr value) = 0; 00111 00112 virtual void* unsafe_data() const = 0; 00113 00114 virtual void AddToBuffer() {} 00115 virtual void RemoveFromBuffer() {} 00116 00117 protected: 00118 00119 VirtualData() {} 00120 00121 private: 00122 00123 00124 00125 }; 00126 00127 } /* namespace script */ 00128 00129 } /* namespace ugdk */ 00130 00131 #endif /* UGDK_SCRIPT_VIRTUALDATA_H_ */