UGDK
src/ugdk/script/virtualdata.h
Go to the documentation of this file.
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_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines