VR-Forces 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  std::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:40
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:96
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.
Definition: localObject.h:98

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)