VR-Forces 4.1 Class Documentation
luaObjectSerializer.h
Go to the documentation of this file.
1 
2 /*******************************************************************************
3 ** Copyright (c) 2012 MAK Technologies, Inc.
4 ** All rights reserved.
5 *******************************************************************************/
6 #pragma once
7 
8 #include <vrfLua/vrfLuaDefines.h>
9 
10 #include <vlutil/vlString.h>
11 #include <map>
12 #include <set>
13 #include <vrfLua/luaUtils.h>
15 #include <vrfcore/simMgr.h>
16 
17 struct lua_State;
18 
19 typedef DtAsciiSerializable* (*DtSerializableCreatorFunc)();
20 typedef luabind::object (*DtDeserializerFunc)(lua_State* state, const DtString& typeName, const DtString& serializedString);
21 typedef bool (*DtSerializerFunc)(const luabind::object&, DtString& serializedString);
22 
24 {
25 protected:
28  DtLuaObjectSerializer& operator=(const DtLuaObjectSerializer& other);
29 
30 public:
31  virtual ~DtLuaObjectSerializer();
32 
34  static DtLuaObjectSerializer* instance();
35 
38  virtual DtAsciiSerializable* createInstance(const DtString& typeName, const DtString& serializedString);
39 
40  virtual void registerCreatorFunc(const DtString& typeName, DtSerializableCreatorFunc func);
41 
43  virtual void registerDeserializerFunc(const DtString& typeName, DtDeserializerFunc func);
44 
46  virtual void registerSerializerFunc(const DtString& typeName, DtSerializerFunc func);
47 
50  virtual bool serializeObject(const luabind::object& lobj, DtString& buffer, std::vector<luabind::object> stackParameters);
51 
55  virtual const char* deserializeObject(lua_State* state, const char* buffer, luabind::object& lobj);
56 
57  virtual bool doesSerializerExist(const DtString& type);
58 
59  virtual DtSimManager& simManager();
60 
61  static DtLuaObjectSerializer* create(DtSimManager* simManager);
62  static void setFactory( DtLuaObjectSerializer* factory );
63 
65  virtual bool saveLuaScriptGlobals(lua_State* state, DtString& buffer);
66 
68  virtual bool loadLuaScriptGlobals(lua_State* state, const DtString& buffer);
69 
70  typedef DtTemplatedException<300> DtStateParseException;
71 
72 protected:
74  virtual const char* parseBufferToTableKeyVals(lua_State* state, luabind::object& table, const char* buffer);
75 
78  virtual void parseTableKeyValsToBuffer(const luabind::object&, DtString& buffer,
79  std::vector<luabind::object> stackParameters);
80 
81  virtual void applyStandardEscapes(DtString& buffer);
82  virtual void unapplyStandardEscapes(DtString& buffer);
83  virtual bool isKeyToIgnore(const DtString& keyName);
84  virtual bool IsALoadedPackage(lua_State * L, const char * tableName);
85 
88  virtual const char* nextToken(char separator, const char* buf, DtString& tok);
89 
90  std::map<DtString, DtSerializableCreatorFunc> myCreators;
91  std::map<DtString, DtSerializerFunc> mySerializers;
92  std::map<DtString, DtDeserializerFunc> myDeserializers;
95 };
96 
97 namespace vrfLua
98 {
105  template<typename T>
106  bool DtAsciiSerializeLua(const luabind::object& lobj, DtString& serializedString)
107  {
108  if (lobj)
109  {
110  const T* obj = luaTypeCastNoThrow<const T>(lobj);
111  if (obj)
112  {
113  serializedString += const_cast<T*>(obj)->serialize();
114  return true;
115  }
116  }
117  return false;
118  }
119 
126  template<typename T>
127  luabind::object DtAsciiDeserializeLua(lua_State* state, const DtString& typeName, const DtString& serializedString)
128  {
129  luabind::object lobj;
131  if (deserializer)
132  {
133  DtAsciiSerializable* sobj = deserializer->createInstance(typeName, serializedString);
134  T* obj = static_cast<T*>(sobj);
135  if (obj && obj->objectType() == typeName)
136  {
137  obj->deserialize(serializedString);
138  T newObj = *obj;
139  lobj = luabind::object(state, newObj);
140  }
141  if (sobj)
142  {
143  delete sobj;
144  }
145  }
146  return lobj;
147  }
148 }
149 

Document ID: Generated on Tue Jan 29 18:21:16 EST 2013 from SVN revision 123193
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)