VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
luaObjectSerializer.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 #pragma once
6 
7 #include <vrfLua/vrfLuaDefines.h>
8 
9 #include <vlutil/vlString.h>
10 #include <map>
11 #include <set>
12 #include <vrfLua/luaUtils.h>
14 #include <vrfcore/simManager.h>
15 
16 struct lua_State;
17 
18 typedef DtAsciiSerializable* (*DtSerializableCreatorFunc)();
19 typedef luabind::object (*DtDeserializerFunc)(lua_State* state, const DtString& typeName, const DtString& serializedString);
20 typedef bool (*DtSerializerFunc)(const luabind::object&, DtString& serializedString);
21 
23 {
24 protected:
27  DtLuaObjectSerializer& operator=(const DtLuaObjectSerializer& other);
28 
29 public:
30  virtual ~DtLuaObjectSerializer();
31 
33  static DtLuaObjectSerializer* instance();
34 
37  virtual DtAsciiSerializable* createInstance(const DtString& typeName, const DtString& serializedString);
38 
39  virtual void registerCreatorFunc(const DtString& typeName, DtSerializableCreatorFunc func);
40 
42  virtual void registerDeserializerFunc(const DtString& typeName, DtDeserializerFunc func);
43 
45  virtual void registerSerializerFunc(const DtString& typeName, DtSerializerFunc func);
46 
49  virtual bool serializeObject(const luabind::object& lobj, DtString& buffer, std::vector<luabind::object> stackParameters);
50 
54  virtual const char* deserializeObject(lua_State* state, const char* buffer, luabind::object& lobj);
55 
56  virtual bool doesSerializerExist(const DtString& type);
57 
58  virtual DtSimManager& simManager();
59 
60  static DtLuaObjectSerializer* create(DtSimManager* simManager);
61  static void setFactory( DtLuaObjectSerializer* factory );
62 
64  virtual bool saveLuaScriptGlobals(lua_State* state, DtString& buffer);
65 
67  virtual bool loadLuaScriptGlobals(lua_State* state, const DtString& buffer);
68 
69  typedef DtTemplatedException<300> DtStateParseException;
70 
72  virtual void addKeyToIgnore(const std::string&);
73 
75  virtual void removeKeyToIgnore(const std::string&);
76 
77 protected:
79  virtual const char* parseBufferToTableKeyVals(lua_State* state, luabind::object& table, const char* buffer);
80 
83  virtual void parseTableKeyValsToBuffer(const luabind::object&, DtString& buffer,
84  std::vector<luabind::object> stackParameters);
85 
86  virtual void applyStandardEscapes(DtString& buffer);
87  virtual void unapplyStandardEscapes(DtString& buffer);
88  virtual bool isKeyToIgnore(const DtString& keyName);
89  virtual bool IsALoadedPackage(lua_State * L, const char * tableName);
90 
93  virtual const char* nextToken(char separator, const char* buf, DtString& tok);
94 
95  std::map<DtString, DtSerializableCreatorFunc> myCreators;
96  std::map<DtString, DtSerializerFunc> mySerializers;
97  std::map<DtString, DtDeserializerFunc> myDeserializers;
100 
102  std::set<std::string> myKeysToIgnore;
103 };
104 
105 namespace vrfLua
106 {
113  template<typename T>
114  bool DtAsciiSerializeLua(const luabind::object& lobj, DtString& serializedString)
115  {
116  if (lobj)
117  {
118  T* obj = luaTypeCastNoThrow<T>(lobj);
119 
120  if (obj)
121  {
122  serializedString += obj->serialize();
123  return true;
124  }
125  }
126  return false;
127  }
128 
129  template<typename T, typename Parent>
130  bool DtAsciiSerializeLua(const luabind::object& lobj, DtString& serializedString)
131  {
132  if (lobj)
133  {
134  Parent* pobj = luaTypeCastNoThrow<Parent>(lobj);
135  T* obj = dynamic_cast<T*>(pobj);
136 
137  if (obj)
138  {
139  serializedString += obj->serialize();
140  return true;
141  }
142  }
143  return false;
144  }
145 
152  template<typename T>
153  luabind::object DtAsciiDeserializeLua(lua_State* state, const DtString& typeName, const DtString& serializedString)
154  {
156  if (deserializer)
157  {
158  DtAsciiSerializable* obj = deserializer->createInstance(typeName, serializedString);
159  if (obj && (obj->objectType() == typeName))
160  {
161  obj->deserialize(serializedString);
162  luabind::object lobj(state, *(dynamic_cast<T*>(obj)));
163 
164  delete obj;
165 
166  return lobj;
167  }
168 
169  delete obj;
170  }
171 
172  return luabind::object();
173  }
174 
175  template<typename T>
177  lua_State* state, const DtString& typeName, const DtString& serializedString)
178  {
180  if (deserializer)
181  {
182  boost::shared_ptr<T> obj(static_cast<T*>(deserializer->createInstance(typeName, serializedString)));
183  if (obj.get() && obj->objectType() == typeName)
184  {
185  obj->deserialize(serializedString);
186  return luabind::object(state, obj);
187  }
188  }
189 
190  return luabind::object();
191  }
192 }
193 

Document ID: Generated on Tue Mar 8 22:13:38 EST 2016 from SVN revision 162938
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)