UGDK
|
00001 00002 #ifndef UGDK_SCRIPT_LUA_LUADATA_H_ 00003 #define UGDK_SCRIPT_LUA_LUADATA_H_ 00004 00005 #include <ugdk/script/type.h> 00006 #include <ugdk/script/virtualdata.h> 00007 00008 #include <ugdk/script/languages/lua/defs.h> 00009 #include <ugdk/script/languages/lua/luawrapper.h> 00010 00011 namespace ugdk { 00012 namespace script { 00013 namespace lua { 00014 00015 class LuaData : public VirtualData { 00016 00017 public: 00018 00019 LuaData(LuaWrapper* wrapper, DataID id) : 00020 wrapper_(wrapper), 00021 id_(id) {} 00022 00023 ~LuaData(); 00024 00025 void* Unwrap(const VirtualType& type, bool disown) const; 00026 const char* UnwrapString() const; 00027 bool UnwrapBoolean() const; 00028 int UnwrapInteger() const; 00029 double UnwrapNumber() const; 00030 Vector UnwrapVector() const; 00031 List UnwrapList() const; 00032 Map UnwrapMap() const; 00033 00034 void Wrap(void* data, const VirtualType& type); 00035 void WrapString(const char* str); 00036 void WrapBoolean(bool boolean); 00037 void WrapInteger(int number); 00038 void WrapNumber(double number); 00039 00040 LangWrapper* wrapper () const { return wrapper_; } 00041 00042 Ptr Execute(const std::vector<Ptr>& args); 00043 00044 Ptr GetAttribute(Ptr key); 00045 00046 Ptr SetAttribute(Ptr key, Ptr value); 00047 00048 void* unsafe_data() const { 00049 return const_cast<void*>(static_cast<const void*>(this)); 00050 } 00051 00052 DataID id () const { return id_; } 00053 00055 00057 void UnsafePopValue(); 00058 00059 void UnsafePushValue(); 00060 00061 void AddToBuffer(); 00062 void RemoveFromBuffer() {} 00063 00064 private: 00065 00066 LuaWrapper* wrapper_; 00067 DataID id_; 00068 00069 }; 00070 00071 } /* namespace lua */ 00072 } /* namespace script */ 00073 } /* namespace ugdk */ 00074 00075 #endif /* UGDK_SCRIPT_LUA_LUADATA_H_ */