VR-Forces 5.0.3 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 
66 
67 
69  virtual void addInterestInEnum(DtEnumUid uid);
70 
72  virtual void addInterestInEnumRange(DtEnumUid lowerUid, DtEnumUid upperUid);
73 
75  virtual void addInterestInEntityTypeEnum(DtEnumUid uid, DtEntityTypeField);
76 
78 
85 
86 
88  virtual void registerFileLoader(const DtString& fileExt, FileLoaderFcn fcn);
89 
91  virtual void unregisterFileLoader(const DtString& fileExt);
92 
94  virtual void registerFilePriorityReader(const DtString& fileExt, FilePriorityReaderFcn fcn);
95 
97  virtual void unregisterFilePriorityReader(const DtString& fileExt);
98 
100  virtual void registerUidEntryReader(DtEnumUid uid, XmlEntryReaderFcn fcn);
101 
103  virtual void unregisterUidEntryReader(DtEnumUid uid);
104 
108  virtual void registerUidRangeEntryReader(DtEnumUid lowerUid,
109  DtEnumUid upperUid, XmlEntryReaderFcn fcn);
110 
112  virtual void unregisterUidRangeEntryReader(DtEnumUid lowerUid,
113  DtEnumUid upperUid);
114 
116  virtual void registerEntityTypeUidEntryReader(DtEnumUid uid,
118 
120  virtual void unregisterEntityTypeUidEntryReader(DtEnumUid uid);
121 
125  virtual void registerEntityTypeFieldEntryReader(DtEntityTypeField lvl,
127 
130  virtual void unregisterEntityTypeFieldEntryReader(DtEntityTypeField lvl);
131 
133 
134 protected:
135 
138  DtEnumLoader();
139 
143  virtual void registerDefaultLoaders();
144 
147  virtual bool loadFromXml(const DtFilename& fn, DtEnumDictionary& dict);
148 
151  virtual unsigned readPriorityFromXml(const DtFilename& fn);
152 
154 
155  virtual void readEntityTypeEnum(xmlNodePtr node, DtEntityTypeField field,
156  const Applicability& applics, DtEnumDictionary& dict) const;
157  virtual void readEntityTypesHierarchy(xmlNodePtr node, DtEnumDictionary& dict) const;
158  virtual void readEnum(xmlNodePtr node, DtEnumDictionary& dict) const;
160 
162  virtual DtEnumUid processSingleLevelEntry(xmlNodePtr node,
163  DtEnumDictionary::EnumMap& enums, DtString& name) const;
164 
167  virtual void processMultiLevelEntry(xmlNodePtr node, DtEntityTypeField field,
168  const DtEntityTypeRange& applic, DtEnumDictionary& dict, DtEnumUid parentUid) const;
169 
171  virtual void setEntityTypeLevel(unsigned lvl, int lowerVal, int upperVal,
172  DtEntityTypeRange& etRange) const;
173 
175  virtual DtEntityTypeField parseApplicability(const xmlChar* c,
176  std::list<DtEntityTypeRange>& applics) const;
177 
179  virtual int xmlCharToInt(const xmlChar* c) const;
180 
181 protected:
182 
183  typedef std::map<DtString, FileLoaderFcn> FileLoaderMap;
184  typedef std::map<DtString, FilePriorityReaderFcn> FilePriorityReaderMap;
185  typedef std::map<int, XmlEntryReaderFcn> XmlUidReaderMap;
186  typedef std::pair<int, int> XmlUidRange;
187  typedef std::map<XmlUidRange, XmlEntryReaderFcn> XmlUidRangeReaderMap;
188  typedef std::map<int, XmlEntityTypeEntryReaderFcn> XmlEntityTypeUidReaderMap;
189  typedef std::map<DtEntityTypeField, XmlEntityTypeEntryReaderFcn> XmlEntityTypeLevelReaderMap;
190 
192 
199 
201 
202  DtFilename myCurrFilename;
203 
204  static EnumLoaderCreator theCreator;
205 };
206 
std::map< DtString, FileLoaderFcn > FileLoaderMap
Definition: enumLoader.h:183
DtFilename myCurrFilename
Definition: enumLoader.h:202
FilePriorityReaderMap myFilePriorityReaders
Definition: enumLoader.h:194
std::map< DtEntityTypeField, XmlEntityTypeEntryReaderFcn > XmlEntityTypeLevelReaderMap
Definition: enumLoader.h:189
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:196
DtEnumDictionary * myDict
Definition: enumLoader.h:200
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:188
FileLoaderMap myFileLoaders
Definition: enumLoader.h:193
bool myDefaultLoadersRegistered
Definition: enumLoader.h:191
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:204
xmlNode * xmlNodePtr
Definition: DtLightPointTable.h:20
std::map< XmlUidRange, XmlEntryReaderFcn > XmlUidRangeReaderMap
Definition: enumLoader.h:187
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:185
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:197
XmlEntityTypeLevelReaderMap myEntityTypeReadersByLevel
Definition: enumLoader.h:198
std::map< DtString, FilePriorityReaderFcn > FilePriorityReaderMap
Definition: enumLoader.h:184
XmlUidReaderMap myReadersByUid
Definition: enumLoader.h:195
std::pair< int, int > XmlUidRange
Definition: enumLoader.h:186

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)