VR-Forces 4.8 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 
103  template<typename T_RWType>
104  void registerTypeWithoutSerialization(const DtString& rwTypeString);
105 
106  const DtRwFunctionMap& functionMap() const;
107 
109  bool typeRegistered(const DtString& rwTypeString) const;
110 
111  virtual int getSize(const DtReaderWriter*) const;
112 
114  virtual char* encode(const DtReaderWriter*, char*) const;
115 
117  virtual const char* decode(DtReaderWriter*, const char*);
118 
119 protected:
121  virtual void mapRwToXml(const DtString& rwType, const DtString& xmlType);
122 
125  template <typename T_RWType>
126  static DtReaderWriter* createRWType(const DtString& name, DtReaderWriterRegistry* parentRegistry);
127 
129  template <typename T_RWType>
130  static void copyRwType(const DtReaderWriter* sourceRw, DtReaderWriter* destRw);
131 
133  template <typename T_RWType>
134  static bool compareRwType(const DtReaderWriter* sourceRw, const DtReaderWriter* destRw);
135 
137  template <typename T_RWType>
138  static int getRwSize(const DtReaderWriter* sourceRw);
139 
141  template <typename T_RWType>
142  static char* encodeRwType(const DtReaderWriter* sourceRw, char* buf);
143 
145  template <typename T_RWType>
146  static const char* decodeRwType(DtReaderWriter* sourceRw, const char* buf);
147 
148 protected:
150 
151  typedef std::map<DtString, DtString> StringMap;
154 
155  std::set<DtString> myXmlTypes;
156 };
157 
159 {
162 
165 };
166 
167 typedef std::vector<DtMergePathStruct> DtMergePath;
168 
169 typedef boost::function<bool (const DtReaderWriter* source, DtReaderWriter* destination,
171 
174 {
175 public:
176  typedef std::map<DtString, DtPropertyRollUpFunction> RollUpRules;
177 
178  DtReaderWriterPropertyFactory(bool registerDefaults = true);
180 
182  virtual bool defaultRollUpFunction(const DtReaderWriter* source, DtReaderWriter* destination);
183  virtual DtPropertyRollUpFunction defaultRollUpRule() const;
184  virtual void setDefaultRollUpRule(DtPropertyRollUpFunction);
185 
187  virtual void setRollUpRule(const DtString& type, DtPropertyRollUpFunction fcn);
188 
191  virtual bool rollUpReaderWriter(const DtReaderWriter* source, DtReaderWriter* destination,
192  const DtMergePath&) const;
193 
194  virtual const RollUpRules& rollUpRules() const
195  {
196  return myRollUpRules;
197  }
198 
200  {
201  return myRollUpRules;
202  }
203 
204 protected:
206 
208 };
209 
210 #define readerWriterFactory_inl_
211 #include "readerWriter/readerWriterFactory.inl"
212 #undef readerWriterFactory_inl_
213 
DT_DLL_readerWriter int getSize(const DtString &val)
The number of bytes required to encode the value.
DtReaderWriter * source
Definition: readerWriterFactory.h:161
#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:149
boost::function< bool(const DtReaderWriter *source, DtReaderWriter *destination, const DtMergePath &path)> DtPropertyRollUpFunction
Definition: readerWriterFactory.h:170
Definition: readerWriterFactory.h:158
DtRwCompareFcn compareFcn
Definition: readerWriterFactory.h:47
std::map< DtString, DtString > StringMap
Definition: readerWriterFactory.h:151
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:152
DtPropertyRollUpFunction myDefaultRollUpRule
Definition: readerWriterFactory.h:207
RollUpRules myRollUpRules
Definition: readerWriterFactory.h:205
Specialized type of reader/writer factory that supports properties.
Definition: readerWriterFactory.h:173
std::set< DtString > myXmlTypes
Definition: readerWriterFactory.h:155
Definition: readerWriterFactory.h:44
DtRWCopyFcn copyFcn
Definition: readerWriterFactory.h:48
StringMap myXmlToRwType
Definition: readerWriterFactory.h:153
std::vector< DtMergePathStruct > DtMergePath
Definition: readerWriterFactory.h:167
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:436
DtReaderWriter * destination
Definition: readerWriterFactory.h:164
std::map< DtString, DtPropertyRollUpFunction > RollUpRules
Definition: readerWriterFactory.h:176
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:160
DtRwGetSizeFcn getSizeFcn
Definition: readerWriterFactory.h:49
virtual RollUpRules & rollUpRules()
Definition: readerWriterFactory.h:199
DtRwEncodeFcn encodeFcn
Definition: readerWriterFactory.h:50
virtual const RollUpRules & rollUpRules() const
Definition: readerWriterFactory.h:194
char * dest
Definition: lz4.h:434

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)