VR-Forces 4.10 Class Documentation
 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<void(xmlNodePtr, const Applicability&, DtEnumDictionary&)> XmlEntityTypeEntryReaderFcn;
39 
41  typedef boost::function<void(xmlNodePtr, DtEnumDictionary&)> XmlEntryReaderFcn;
42 
43 public:
44 
46  static DtEnumLoader* create();
47 
51  static void setCreator(EnumLoaderCreator creator);
52 
54  virtual ~DtEnumLoader();
55 
58  virtual bool loadFromFiles(const std::vector<DtFilename>& filenames, DtEnumDictionary& dict);
59 
63 
64 
66  virtual void addInterestInEnum(DtEnumUid uid);
67 
69  virtual void addInterestInEnumRange(DtEnumUid lowerUid, DtEnumUid upperUid);
70 
72  virtual void addInterestInEntityTypeEnum(DtEnumUid uid, DtEntityTypeField);
73 
75 
82 
83 
85  virtual void registerFileLoader(const DtString& fileExt, FileLoaderFcn fcn);
86 
88  virtual void unregisterFileLoader(const DtString& fileExt);
89 
91  virtual void registerUidEntryReader(DtEnumUid uid, XmlEntryReaderFcn fcn);
92 
94  virtual void unregisterUidEntryReader(DtEnumUid uid);
95 
99  virtual void registerUidRangeEntryReader(DtEnumUid lowerUid,
100  DtEnumUid upperUid, XmlEntryReaderFcn fcn);
101 
103  virtual void unregisterUidRangeEntryReader(DtEnumUid lowerUid,
104  DtEnumUid upperUid);
105 
107  virtual void registerEntityTypeUidEntryReader(DtEnumUid uid,
109 
111  virtual void unregisterEntityTypeUidEntryReader(DtEnumUid uid);
112 
116  virtual void registerEntityTypeFieldEntryReader(DtEntityTypeField lvl,
118 
121  virtual void unregisterEntityTypeFieldEntryReader(DtEntityTypeField lvl);
122 
124 
125 protected:
126 
129  DtEnumLoader();
130 
134  virtual void registerDefaultLoaders();
135 
138  virtual bool loadFromXml(const DtFilename& fn, DtEnumDictionary& dict);
139 
141 
142  virtual void readEntityTypeEnum(xmlNodePtr node, DtEntityTypeField field,
143  const Applicability& applics, DtEnumDictionary& dict) const;
144  virtual void readEntityTypesHierarchy(xmlNodePtr node, DtEnumDictionary& dict) const;
145  virtual void readEnum(xmlNodePtr node, DtEnumDictionary& dict) const;
147 
149  virtual DtEnumUid processSingleLevelEntry(xmlNodePtr node,
150  DtEnumDictionary::EnumMap& enums, DtString& name) const;
151 
154  virtual void processMultiLevelEntry(xmlNodePtr node, DtEntityTypeField field,
155  const DtEntityTypeRange& applic, DtEnumDictionary& dict) const;
156 
158  virtual void setEntityTypeLevel(unsigned lvl, int lowerVal, int upperVal,
159  DtEntityTypeRange& etRange) const;
160 
162  virtual DtEntityTypeField parseApplicability(const xmlChar* c,
163  std::list<DtEntityTypeRange>& applics) const;
164 
166  virtual int xmlCharToInt(const xmlChar* c) const;
167 
168 protected:
169 
170  typedef std::map<DtString, FileLoaderFcn> FileLoaderMap;
171  typedef std::map<int, XmlEntryReaderFcn> XmlUidReaderMap;
172  typedef std::pair<int, int> XmlUidRange;
173  typedef std::map<XmlUidRange, XmlEntryReaderFcn> XmlUidRangeReaderMap;
174  typedef std::map<int, XmlEntityTypeEntryReaderFcn> XmlEntityTypeUidReaderMap;
175  typedef std::map<DtEntityTypeField, XmlEntityTypeEntryReaderFcn> XmlEntityTypeLevelReaderMap;
176 
178 
184 
186 
187  DtFilename myCurrFilename;
188 
189  static EnumLoaderCreator theCreator;
190 };
191 
std::map< DtString, FileLoaderFcn > FileLoaderMap
Definition: enumLoader.h:170
DtFilename myCurrFilename
Definition: enumLoader.h:187
std::map< DtEntityTypeField, XmlEntityTypeEntryReaderFcn > XmlEntityTypeLevelReaderMap
Definition: enumLoader.h:175
Maintains a list of enumerations read in from files.
Definition: enumDictionary.h:90
XmlUidRangeReaderMap myReadersByUidRange
Definition: enumLoader.h:181
DtEnumDictionary * myDict
Definition: enumLoader.h:185
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:41
std::map< int, XmlEntityTypeEntryReaderFcn > XmlEntityTypeUidReaderMap
Definition: enumLoader.h:174
FileLoaderMap myFileLoaders
Definition: enumLoader.h:179
bool myDefaultLoadersRegistered
Definition: enumLoader.h:177
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:189
xmlNode * xmlNodePtr
Definition: DtLightPointTable.h:20
std::map< XmlUidRange, XmlEntryReaderFcn > XmlUidRangeReaderMap
Definition: enumLoader.h:173
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.
Definition: enumLoader.h:32
std::map< int, XmlEntryReaderFcn > XmlUidReaderMap
Definition: enumLoader.h:171
#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:38
std::map< int, DtEnumInfo > EnumMap
Definition: enumDictionary.h:108
XmlEntityTypeUidReaderMap myEntityTypeReadersByUid
Definition: enumLoader.h:182
XmlEntityTypeLevelReaderMap myEntityTypeReadersByLevel
Definition: enumLoader.h:183
XmlUidReaderMap myReadersByUid
Definition: enumLoader.h:180
std::pair< int, int > XmlUidRange
Definition: enumLoader.h:172

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)