VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
readerWriterFactory.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
14 #include <map>
15 #include <vlutil/vlString.h>
17 
18 #include <boost/function.hpp>
19 
21 class DtReaderWriter;
22 
35 {
36 public:
37  typedef DtReaderWriter* (*DtRWCreatorFcn)(const DtString& name, DtReaderWriterRegistry* parentRegistry);
38  typedef void (*DtRWCopyFcn)(const DtReaderWriter* source, DtReaderWriter* dest);
39  typedef int (*DtRwGetSizeFcn)(const DtReaderWriter* source);
40  typedef bool (*DtRwCompareFcn)(const DtReaderWriter* lhs, const DtReaderWriter* rhs);
41  typedef char* (*DtRwEncodeFcn)(const DtReaderWriter* source, char*);
42  typedef const char* (*DtRwDecodeFcn)(DtReaderWriter* source, const char*);
43 
45  {
46  DtRWCreatorFcn creatorFcn;
47  DtRwCompareFcn compareFcn;
48  DtRWCopyFcn copyFcn;
49  DtRwGetSizeFcn getSizeFcn;
50  DtRwEncodeFcn encodeFcn;
51  DtRwDecodeFcn decodeFcn;
52  };
53 
54  typedef std::map<DtString, DtRwFunctions> DtRwFunctionMap;
55 
56 public:
57  DtReaderWriterFactory(bool registerDefaults = true);
58 
60  virtual const std::set<DtString>& xmlTypes() const;
61 
63  virtual DtString mapXmlToRwType(const DtString& xmlType) const;
64 
66  virtual DtString mapRwToXmlType(const DtString& rwType) const;
67 
71  virtual DtReaderWriter* createItem(const DtString& type, const DtString& name,
72  DtReaderWriterRegistry* parentRegistry) const;
73 
78  virtual bool copyReaderWriter(const DtReaderWriter* sourceRw, DtReaderWriter* destRw) const;
79 
81  virtual bool compareReaderWriter(const DtReaderWriter* sourceRw, const DtReaderWriter* destRw) const;
82 
88  virtual DtReaderWriter* cloneReaderWriter(const DtString& name,
89  const DtReaderWriter* sourceRw, DtReaderWriterRegistry* parentRegistry) const;
90 
93  void addDefaultRwCreators();
94 
99  template<typename T_RWType>
100  void registerType(const DtString& rwTypeString);
101 
109  template<typename T_RWType>
110  void registerNumericType(const DtString& rwTypeString);
111 
113  template<typename T_RWType>
114  void registerTypeWithoutSerialization(const DtString& rwTypeString);
115 
116  const DtRwFunctionMap& functionMap() const;
117 
119  bool typeRegistered(const DtString& rwTypeString) const;
120 
121  virtual int getSize(const DtReaderWriter*) const;
122 
124  virtual char* encode(const DtReaderWriter*, char*) const;
125 
127  virtual const char* decode(DtReaderWriter*, const char*);
128 
129 protected:
131  virtual void mapRwToXml(const DtString& rwType, const DtString& xmlType);
132 
135  template <typename T_RWType>
136  static DtReaderWriter* createRWType(const DtString& name, DtReaderWriterRegistry* parentRegistry);
137 
139  template <typename T_RWType>
140  static void copyRwType(const DtReaderWriter* sourceRw, DtReaderWriter* destRw);
141 
143  template <typename T_RWType>
144  static void copyNumericRwType(const DtReaderWriter* sourceRw, DtReaderWriter* destRw);
145 
147  template <typename T_RWType>
148  static bool compareRwType(const DtReaderWriter* sourceRw, const DtReaderWriter* destRw);
149 
151  template <typename T_RWType>
152  static int getRwSize(const DtReaderWriter* sourceRw);
153 
155  template <typename T_RWType>
156  static char* encodeRwType(const DtReaderWriter* sourceRw, char* buf);
157 
159  template <typename T_RWType>
160  static const char* decodeRwType(DtReaderWriter* sourceRw, const char* buf);
161 
162 protected:
164 
165  typedef std::map<DtString, DtString> StringMap;
168 
169  std::set<DtString> myXmlTypes;
170 };
171 
173 {
176 
179 };
180 
181 typedef std::vector<DtMergePathStruct> DtMergePath;
182 
183 typedef boost::function<bool (const DtReaderWriter* source, DtReaderWriter* destination,
185 
188 {
189 public:
190  typedef std::map<DtString, DtPropertyRollUpFunction> RollUpRules;
191 
192  DtReaderWriterPropertyFactory(bool registerDefaults = true);
194 
196  virtual bool defaultRollUpFunction(const DtReaderWriter* source, DtReaderWriter* destination);
197  virtual DtPropertyRollUpFunction defaultRollUpRule() const;
198  virtual void setDefaultRollUpRule(DtPropertyRollUpFunction);
199 
201  virtual void setRollUpRule(const DtString& type, DtPropertyRollUpFunction fcn);
202 
205  virtual bool rollUpReaderWriter(const DtReaderWriter* source, DtReaderWriter* destination,
206  const DtMergePath&) const;
207 
208  virtual const RollUpRules& rollUpRules() const
209  {
210  return myRollUpRules;
211  }
212 
214  {
215  return myRollUpRules;
216  }
217 
218 protected:
220 
222 };
223 
224 #define readerWriterFactory_inl_
225 #include "readerWriter/readerWriterFactory.inl"
226 #undef readerWriterFactory_inl_
227 
DT_DLL_readerWriter int getSize(const DtString &val)
The number of bytes required to encode the value.
DtReaderWriter * source
Definition: readerWriterFactory.h:175
#define DT_DLL_readerWriter
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: readerWriterDefines.h:34
std::map< DtString, DtRwFunctions > DtRwFunctionMap
Definition: readerWriterFactory.h:54
DtRWCreatorFcn creatorFcn
Definition: readerWriterFactory.h:46
DtRwFunctionMap myRwFunctionMap
Definition: readerWriterFactory.h:163
boost::function< bool(const DtReaderWriter *source, DtReaderWriter *destination, const DtMergePath &path)> DtPropertyRollUpFunction
Definition: readerWriterFactory.h:184
Definition: readerWriterFactory.h:172
DtRwCompareFcn compareFcn
Definition: readerWriterFactory.h:47
std::map< DtString, DtString > StringMap
Definition: readerWriterFactory.h:165
Definition: readerWriter.h:85
typedef int(ZCALLBACK *close_file_func) OF((voidpf opaque
Definition: readerWriterRegistry.h:39
voidpf void * buf
Definition: ioapi.h:39
StringMap myRwToXmlType
Definition: readerWriterFactory.h:166
DtPropertyRollUpFunction myDefaultRollUpRule
Definition: readerWriterFactory.h:221
RollUpRules myRollUpRules
Definition: readerWriterFactory.h:219
Specialized type of reader/writer factory that supports properties.
Definition: readerWriterFactory.h:187
std::set< DtString > myXmlTypes
Definition: readerWriterFactory.h:169
Definition: readerWriterFactory.h:44
DtRWCopyFcn copyFcn
Definition: readerWriterFactory.h:48
StringMap myXmlToRwType
Definition: readerWriterFactory.h:167
std::vector< DtMergePathStruct > DtMergePath
Definition: readerWriterFactory.h:181
DtRwDecodeFcn decodeFcn
Definition: readerWriterFactory.h:51
DT_DLL_readerWriter char * encode(const DtFilename &val, char *buffer)
Serializes the provided value val into buffer.
const char * source
Definition: lz4.h:442
DtReaderWriter * destination
Definition: readerWriterFactory.h:178
std::map< DtString, DtPropertyRollUpFunction > RollUpRules
Definition: readerWriterFactory.h:190
Factory for creating ReaderWriter objects dynamically based on a type string.
Definition: readerWriterFactory.h:34
DT_DLL_readerWriter const char * decode(DtString &val, const char *buffer)
Decodes a value from buffer and places the result in val of the type specified by val...
DtMergePathStruct(DtReaderWriter *s, DtReaderWriter *d)
Definition: readerWriterFactory.h:174
DtRwGetSizeFcn getSizeFcn
Definition: readerWriterFactory.h:49
virtual RollUpRules & rollUpRules()
Definition: readerWriterFactory.h:213
DtRwEncodeFcn encodeFcn
Definition: readerWriterFactory.h:50
virtual const RollUpRules & rollUpRules() const
Definition: readerWriterFactory.h:208
char * dest
Definition: lz4.h:440

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)