VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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 "vlutil/vlExceptions.h"
15 
16 struct lua_State;
18 class DtLocalObject;
19 
20 typedef DtAsciiSerializable* (*DtSerializableCreatorFunc)();
21 typedef luabind::object (*DtDeserializerFunc)(lua_State* state, const DtString& typeName, const DtString& serializedString, DtLocalObject*);
22 typedef bool (*DtSerializerFunc)(const luabind::object&, DtString& serializedString);
23 
25 {
26 protected:
29  DtLuaObjectSerializer& operator=(const DtLuaObjectSerializer& other);
30 
31 public:
32  virtual ~DtLuaObjectSerializer();
33 
35  static DtLuaObjectSerializer* instance();
36 
39  virtual DtAsciiSerializable* createInstance(const DtString& typeName, const DtString& serializedString, DtLocalObject* owner);
40 
41  virtual void registerCreatorFunc(const DtString& typeName, DtSerializableCreatorFunc func);
42 
44  virtual void registerDeserializerFunc(const DtString& typeName, DtDeserializerFunc func);
45 
47  virtual void registerSerializerFunc(const DtString& typeName, DtSerializerFunc func);
48 
51  virtual bool serializeObject(const luabind::object& lobj, std::string& buffer, std::vector<luabind::object> stackParameters);
52 
56  virtual const char* deserializeObject(lua_State* state, const char* buffer, luabind::object& lobj, DtLocalObject* owner);
57 
58  virtual bool doesSerializerExist(const DtString& type);
59 
60  static DtLuaObjectSerializer* create(DtSimulationServices* simManager);
61  static void setFactory( DtLuaObjectSerializer* factory );
62 
64  virtual bool saveLuaScriptGlobals(lua_State* state, std::string &buffer);
65 
67  virtual bool saveLuaScriptTable(lua_State* state, const std::string& key, const luabind::object& lobj, std::string &buffer);
68 
70  virtual bool loadLuaScriptGlobals(lua_State* state, const DtString& buffer, DtLocalObject* owner);
71 
72  typedef DtTemplatedException<300> DtStateParseException;
73 
75  virtual void addKeyToIgnore(const std::string&);
76 
78  virtual void removeKeyToIgnore(const std::string&);
79 
80 protected:
82  virtual const char* parseBufferToTableKeyVals(lua_State* state, luabind::object& table, const char* buffer, DtLocalObject* owner);
83 
86  virtual void parseTableKeyValsToBuffer(const luabind::object&, std::string& buffer,
87  std::vector<luabind::object> stackParameters);
88 
89  virtual bool needsEscaping(const DtString& buffer) const;
90  virtual void applyStandardEscapes(DtString& buffer);
91  virtual bool needsUnescaping(DtString& buffer) const;
92  virtual void unapplyStandardEscapes(DtString& buffer);
93  virtual bool isKeyToIgnore(const DtString& keyName);
94  virtual bool IsALoadedPackage(lua_State * L, const char * tableName);
95 
98  virtual const char* nextToken(char separator, const char* buf, DtString& tok);
99 
100  std::map<DtString, DtSerializableCreatorFunc> myCreators;
101  std::map<DtString, DtSerializerFunc> mySerializers;
102  std::map<DtString, DtDeserializerFunc> myDeserializers;
105 
107  std::set<std::string> myKeysToIgnore;
108 };
109 
110 namespace vrfLua
111 {
118  template<typename T>
119  bool DtAsciiSerializeLua(const luabind::object& lobj, DtString& serializedString)
120  {
121  if (lobj)
122  {
123  T* obj = luaTypeCastNoThrow<T>(lobj);
124 
125  if (obj)
126  {
127  serializedString += obj->serialize();
128  return true;
129  }
130  }
131  return false;
132  }
133 
134  template<typename T, typename Parent>
135  bool DtAsciiSerializeLua(const luabind::object& lobj, DtString& serializedString)
136  {
137  if (lobj)
138  {
139  Parent* pobj = luaTypeCastNoThrow<Parent>(lobj);
140  T* obj = dynamic_cast<T*>(pobj);
141 
142  if (obj)
143  {
144  serializedString += obj->serialize();
145  return true;
146  }
147  }
148  return false;
149  }
150 
157  template<typename T>
158  luabind::object DtAsciiDeserializeLua(lua_State* state, const DtString& typeName, const DtString& serializedString, DtLocalObject* owner)
159  {
161  if (deserializer)
162  {
163  DtAsciiSerializable* obj = deserializer->createInstance(typeName, serializedString, owner);
164  if (obj && (obj->objectType() == typeName))
165  {
166  obj->deserialize(serializedString);
167  luabind::object lobj(state, *(dynamic_cast<T*>(obj)));
168 
169  delete obj;
170 
171  return lobj;
172  }
173 
174  delete obj;
175  }
176 
177  return luabind::object();
178  }
179 
180  template<typename T>
182  lua_State* state, const DtString& typeName, const DtString& serializedString, DtLocalObject* owner)
183  {
185  if (deserializer)
186  {
187  boost::shared_ptr<T> obj(static_cast<T*>(deserializer->createInstance(typeName, serializedString, owner)));
188  if (obj.get() && obj->objectType() == typeName)
189  {
190  obj->deserialize(serializedString);
191  return luabind::object(state, obj);
192  }
193  }
194 
195  return luabind::object();
196  }
197 }
198 
std::map< DtString, DtSerializableCreatorFunc > myCreators
Definition: luaObjectSerializer.h:100
DtAsciiSerializable *(* DtSerializableCreatorFunc)()
Definition: luaObjectSerializer.h:20
virtual DtAsciiSerializable * createInstance(const DtString &typeName, const DtString &serializedString, DtLocalObject *owner)
Registers a DtAsciiSerializable creator function. It should create a default object with default valu...
DtTemplatedException< 300 > DtStateParseException
Definition: luaObjectSerializer.h:72
std::map< DtString, DtSerializerFunc > mySerializers
Definition: luaObjectSerializer.h:101
std::set< std::string > myKeysToIgnore
When serializing, ignore these keys.
Definition: luaObjectSerializer.h:107
Definition: asciiSerializable.h:34
virtual bool deserialize(const DtString &)=0
This function should take the string that was serialized via serialize() and fill this object with th...
Definition: luaObjectSerializer.h:24
voidpf void * buf
Definition: ioapi.h:39
luabind::object DtAsciiDeserializeLua(lua_State *state, const DtString &typeName, const DtString &serializedString, DtLocalObject *owner)
This is a templated function that is used and registered to the (de)serializer for each object we hav...
Definition: luaObjectSerializer.h:158
static DtLuaObjectSerializer * instance()
Returns the static instance of this class.
luabind::object(* DtDeserializerFunc)(lua_State *state, const DtString &typeName, const DtString &serializedString, DtLocalObject *)
Definition: luaObjectSerializer.h:21
#define DT_DLL_vrfLua
This file is used to determine how to build.
Definition: vrfLuaDefines.h:25
virtual DtString objectType() const =0
Should return the string name of this object. The object name should not be part of the serialization...
bool DtAsciiSerializeLua(const luabind::object &lobj, DtString &serializedString)
This is a templated function that is used and registered to the serializer for each object we have de...
Definition: luaObjectSerializer.h:119
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:90
luabind::object DtAsciiDeserializeLuaSharedPtr(lua_State *state, const DtString &typeName, const DtString &serializedString, DtLocalObject *owner)
Definition: luaObjectSerializer.h:181
bool(* DtSerializerFunc)(const luabind::object &, DtString &serializedString)
Definition: luaObjectSerializer.h:22
DtSimulationServices * mySimulationServices
Definition: luaObjectSerializer.h:103
std::map< DtString, DtDeserializerFunc > myDeserializers
Definition: luaObjectSerializer.h:102
static DtLuaObjectSerializer * theInstance
Definition: luaObjectSerializer.h:104
A locally simulated VRF object. Holds all internal and external data for the object, and provides access to both the current frame and next frame state data for the object. All current frame data is read-only, and next-frame data can be written to. No thread safety guarantees are made on this object during the simulation frame and it should only be accessed by the thread that is simulating the object.
Definition: localObject.h:86

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)