00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __DATASTACK_H__
00017 #define __DATASTACK_H__
00018
00019
00020 #include "../dependencies.h"
00021 #include "DataStore.h"
00022
00023
00024 class DataStore;
00025
00026
00027
00032 class DataStack
00033 {
00034 public:
00035
00036
00039 DataStack(const std::string &name);
00041 ~DataStack();
00042
00044 void init();
00046 void clear();
00047
00048
00051 static DataStack* refFactory(const std::string &name);
00054 void refAdd();
00057 void refRelease();
00058
00059
00061 u32 getID() const;
00063 const std::string& getName() const;
00064
00066 u32 getSize() const;
00067
00073 template<typename T>
00074 bool setVar(const std::string &name, const T &value)
00075 {
00076
00077 std::stringstream ss;
00078 ss << value;
00079
00080
00081 if(ss.good())
00082 {
00083 mVars[name] = ss.str();
00084 return true;
00085 }
00086
00087
00088 else return false;
00089 };
00090
00096 template<typename T>
00097 T getVar(const std::string &name)
00098 {
00099
00100 std::map<std::string, std::string>::iterator it;
00101 it = mVars.find(name);
00102
00103
00104 if(it != mVars.end())
00105 {
00106 std::stringstream ss(it->second);
00107 T t;
00108
00109 ss >> t;
00110 return t;
00111 }
00112
00113
00114 else return NULL;
00115 };
00116
00121 std::string getVar(const std::string &name);
00122
00124 void removeAll();
00127 bool removeVar(const std::string &name);
00128
00131 bool saveBencode(const std::string &fileName);
00134 bool loadBencode(const std::string &fileName);
00135
00138 bool saveXML(const std::string &fileName);
00141 bool loadXML(const std::string &fileName);
00142
00143 private:
00144
00145
00146 static u32 mIDCount;
00147
00148
00149 s32 mRefCount;
00150
00151
00152 u32 mID;
00153 std::string mName;
00154
00155 std::map<std::string, std::string> mVars;
00156 };
00157
00158
00159
00161 extern void bindDataStack(asIScriptEngine *engine);
00162
00163 #endif