VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
enumLoader.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2021 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
11 #include <vrfutil/enumDictionary.h>
12 #include <vrfutil/vrfutilDefines.h>
13 
14 #include <map>
15 #include <vector>
16 #include <list>
17 #include <libxml/xmlmemory.h>
18 #include <libxml/parser.h>
19 #include <boost/function.hpp>
20 
23 {
24 public:
25 
27  typedef DtEnumLoader*(*EnumLoaderCreator)();
28 
32  typedef std::list<DtEntityTypeRange> Applicability;
33 
35  typedef boost::function<bool(const DtFilename&, DtEnumDictionary&)> FileLoaderFcn;
36 
38  typedef boost::function<unsigned(const DtFilename&)> FilePriorityReaderFcn;
39 
41  typedef boost::function<void(xmlNodePtr, const Applicability&, DtEnumDictionary&)> XmlEntityTypeEntryReaderFcn;
42 
44  typedef boost::function<void(xmlNodePtr, DtEnumDictionary&)> XmlEntryReaderFcn;
45 
46 public:
47 
49  static DtEnumLoader* create();
50 
54  static void setCreator(EnumLoaderCreator creator);
55 
57  virtual ~DtEnumLoader();
58 
61  virtual bool loadFromDirectory(const DtFilename& directory, DtEnumDictionary& dict);
62 
64  virtual bool loadFile(const DtFilename& file, DtEnumDictionary& dict);
65 
69 
70 
72  virtual void addInterestInEnum(DtEnumUid uid);
73 
75  virtual void addInterestInEnumRange(DtEnumUid lowerUid, DtEnumUid upperUid);
76 
78  virtual void addInterestInEntityTypeEnum(DtEnumUid uid, DtEntityTypeField);
79 
81 
88 
89 
91  virtual void registerFileLoader(const DtString& fileExt, FileLoaderFcn fcn);
92 
94  virtual void unregisterFileLoader(const DtString& fileExt);
95 
97  virtual void registerFilePriorityReader(const DtString& fileExt, FilePriorityReaderFcn fcn);
98 
100  virtual void unregisterFilePriorityReader(const DtString& fileExt);
101 
103  virtual void registerUidEntryReader(DtEnumUid uid, XmlEntryReaderFcn fcn);
104 
106  virtual void unregisterUidEntryReader(DtEnumUid uid);
107 
111  virtual void registerUidRangeEntryReader(DtEnumUid lowerUid,
112  DtEnumUid upperUid, XmlEntryReaderFcn fcn);
113 
115  virtual void unregisterUidRangeEntryReader(DtEnumUid lowerUid,
116  DtEnumUid upperUid);
117 
119  virtual void registerEntityTypeUidEntryReader(DtEnumUid uid,
121 
123  virtual void unregisterEntityTypeUidEntryReader(DtEnumUid uid);
124 
128  virtual void registerEntityTypeFieldEntryReader(DtEntityTypeField lvl,
130 
133  virtual void unregisterEntityTypeFieldEntryReader(DtEntityTypeField lvl);
134 
136 
137 protected:
138 
141  DtEnumLoader();
142 
146  virtual void registerDefaultLoaders();
147 
150  virtual bool loadFromXml(const DtFilename& fn, DtEnumDictionary& dict);
151 
154  virtual unsigned readPriorityFromXml(const DtFilename& fn);
155 
157 
158  virtual void readEntityTypeEnum(xmlNodePtr node, DtEntityTypeField field,
159  const Applicability& applics, DtEnumDictionary& dict) const;
160  virtual void readEntityTypesHierarchy(xmlNodePtr node, DtEnumDictionary& dict) const;
161  virtual void readEnum(xmlNodePtr node, DtEnumDictionary& dict) const;
163 
165  virtual DtEnumUid processSingleLevelEntry(xmlNodePtr node,
166  DtEnumDictionary::EnumMap& enums, DtString& name) const;
167 
170  virtual void processMultiLevelEntry(xmlNodePtr node, DtEntityTypeField field,
171  const DtEntityTypeRange& applic, DtEnumDictionary& dict, DtEnumUid parentUid) const;
172 
174  virtual void setEntityTypeLevel(unsigned lvl, int lowerVal, int upperVal,
175  DtEntityTypeRange& etRange) const;
176 
178  virtual DtEntityTypeField parseApplicability(const xmlChar* c,
179  std::list<DtEntityTypeRange>& applics) const;
180 
182  virtual int xmlCharToInt(const xmlChar* c) const;
183 
184 protected:
185 
186  typedef std::map<DtString, FileLoaderFcn> FileLoaderMap;
187  typedef std::map<DtString, FilePriorityReaderFcn> FilePriorityReaderMap;
188  typedef std::map<int, XmlEntryReaderFcn> XmlUidReaderMap;
189  typedef std::pair<int, int> XmlUidRange;
190  typedef std::map<XmlUidRange, XmlEntryReaderFcn> XmlUidRangeReaderMap;
191  typedef std::map<int, XmlEntityTypeEntryReaderFcn> XmlEntityTypeUidReaderMap;
192  typedef std::map<DtEntityTypeField, XmlEntityTypeEntryReaderFcn> XmlEntityTypeLevelReaderMap;
193 
195 
202 
204 
205  DtFilename myCurrFilename;
206 
207  static EnumLoaderCreator theCreator;
208 };
209 
std::map< DtString, FileLoaderFcn > FileLoaderMap
Definition: enumLoader.h:186
DtFilename myCurrFilename
Definition: enumLoader.h:205
FilePriorityReaderMap myFilePriorityReaders
Definition: enumLoader.h:197
std::map< DtEntityTypeField, XmlEntityTypeEntryReaderFcn > XmlEntityTypeLevelReaderMap
Definition: enumLoader.h:192
Maintains a list of enumerations read in from files. The dictionary supports two different types of e...
Definition: enumDictionary.h:98
XmlUidRangeReaderMap myReadersByUidRange
Definition: enumLoader.h:199
DtEnumDictionary * myDict
Definition: enumLoader.h:203
Specifies a range of entity types, where each individual field can match a a range of values or a sin...
Definition: entityTypeRange.h:19
boost::function< void(xmlNodePtr, DtEnumDictionary &)> XmlEntryReaderFcn
The function prototype for loading a individual enumeration from an xml node.
Definition: enumLoader.h:44
std::map< int, XmlEntityTypeEntryReaderFcn > XmlEntityTypeUidReaderMap
Definition: enumLoader.h:191
FileLoaderMap myFileLoaders
Definition: enumLoader.h:196
bool myDefaultLoadersRegistered
Definition: enumLoader.h:194
boost::function< bool(const DtFilename &, DtEnumDictionary &)> FileLoaderFcn
The function prototype for loading an enumerations file.
Definition: enumLoader.h:35
static EnumLoaderCreator theCreator
Definition: enumLoader.h:207
xmlNode * xmlNodePtr
Definition: DtLightPointTable.h:20
std::map< XmlUidRange, XmlEntryReaderFcn > XmlUidRangeReaderMap
Definition: enumLoader.h:190
DtEntityTypeField
The different fields of an entity type.
Definition: enumDictionary.h:17
Loads entity type enumerations from an XML file into a DtEnumDictionary.
Definition: enumLoader.h:22
unsigned char xmlChar
Definition: DtLightPointTable.h:21
std::list< DtEntityTypeRange > Applicability
Type for specifying the applicability of an enumeration. This indicates what higher level entity type...
Definition: enumLoader.h:32
std::map< int, XmlEntryReaderFcn > XmlUidReaderMap
Definition: enumLoader.h:188
boost::function< unsigned(const DtFilename &)> FilePriorityReaderFcn
The function prototype for loading an enumerations file.
Definition: enumLoader.h:38
#define DT_DLL_vrfutil
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfutilDefines.h:34
boost::function< void(xmlNodePtr, const Applicability &, DtEnumDictionary &)> XmlEntityTypeEntryReaderFcn
The function prototype for loading an individual entity type from an xml node.
Definition: enumLoader.h:41
std::map< int, DtEnumInfo > EnumMap
Definition: enumDictionary.h:116
XmlEntityTypeUidReaderMap myEntityTypeReadersByUid
Definition: enumLoader.h:200
XmlEntityTypeLevelReaderMap myEntityTypeReadersByLevel
Definition: enumLoader.h:201
std::map< DtString, FilePriorityReaderFcn > FilePriorityReaderMap
Definition: enumLoader.h:187
XmlUidReaderMap myReadersByUid
Definition: enumLoader.h:198
std::pair< int, int > XmlUidRange
Definition: enumLoader.h:189

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)