BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Calibration/xmlBase/include/xmlBase/IFile.h
Go to the documentation of this file.
1// $Header: /bes/bes/BossCvs/Calibration/xmlBase/xmlBase/IFile.h,v 1.1.1.1 2005/10/17 06:10:27
2// maqm Exp $ adapted from Bonn, originally written by Ruediger Gross-Hardt
3// hardy@servax.iskp.uni-bonn.de
4
5// converted to use STL map
6
7// User: Suson Date: 6/29/98
8// Added getIntVector, getDoubleVector
9
10#ifndef xmlBase_IFile_h
11#define xmlBase_IFile_h
12
13#include <cstdio>
14#include <iostream>
15
16#include <map>
17#include <string>
18#include <vector>
19
20#include <xercesc/util/XercesDefs.hpp>
21
22XERCES_CPP_NAMESPACE_BEGIN
23class DOMElement;
24class DOMDocument;
25XERCES_CPP_NAMESPACE_END
26
27// typedef XERCES_CPP_NAMESPACE_QUALIFIER DOMElement DomElement;
28// typedef XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument DomDocument;
29
30namespace xmlBase {
31 XERCES_CPP_NAMESPACE_USE
33 public:
34 IFileException( std::string err ) : msg( err ) {}
35 std::string msg;
36 };
37 class IFile_Item {
38 // basic item, should be private to IFile
39 friend class IFile_Section;
40 friend class IFile;
41
42 public:
44 // IFile_Item(const char *line, int lineNumber);
45 IFile_Item( std::string name, std::string value )
46 : itemname( name ), itemstring( value ) {}
47 std::string& title() { return itemname; };
48 std::string& comment() { return itemcomment; };
49 std::string& mystring() { return itemstring; };
50
51 private:
52 std::string itemname;
53 std::string itemstring;
54 std::string itemcomment;
55 };
56
57 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58 class IFile_Section : public std::map<std::string, IFile_Item*, std::less<std::string>> {
59 // section, a map of items
60 friend class IFile;
61
62 public:
64 IFile_Section( std::string name ) : sectionname( name ) {}
66 std::string& title() { return sectionname; };
67
68 private:
69 bool contains( std::string name ) { return find( name ) != end(); }
70
71 IFile_Item* lookUp( std::string name ) {
72 iterator it = find( name );
73 return ( it == end() ) ? 0 : ( *it ).second;
74 }
75 std::string sectionname;
76 };
77
78 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
79
80 class IFile : protected std::map<std::string, IFile_Section*, std::less<std::string>> {
81 // IFile is a map of sections
82
83 public:
84 IFile( const char* filename );
85 IFile( const DOMDocument* instrument );
86 // or do we want document element rather than DomDocument as arg?
87 IFile( const DOMElement* instrument );
88
89 virtual ~IFile();
90
91 typedef std::vector<int> intVector;
92 typedef std::vector<double> doubleVector;
93
94 virtual bool contains( const char* section, const char* item );
95 // check, whether section and item is contained in IFile
96
97 virtual int getInt( const char* section, const char* item );
98 virtual double getDouble( const char* section, const char* item );
99 virtual int getBool( const char* section, const char* item );
100 virtual const char* getString( const char* section, const char* item );
101 virtual intVector getIntVector( const char* section, const char* item );
102 virtual doubleVector getDoubleVector( const char* section, const char* item );
103 // get data from [section]item
104
105 virtual int getInt( const char* section, const char* item, int defValue );
106 virtual double getDouble( const char* section, const char* item, double defValue );
107 virtual int getBool( const char* section, const char* item, int defValue );
108 virtual const char* getString( const char* section, const char* item,
109 const char* defValue );
110 virtual intVector getIntVector( const char* section, const char* item,
111 intVector defValues );
112 virtual doubleVector getDoubleVector( const char* section, const char* item,
113 doubleVector defValues );
114 // get data from [section]item, providing a default value, if not present
115
116 void setString( const char* section, const char* item, const char* newString );
117
118 void print(); // print contents to cout
119 // virtual void printOn (HOStream& out = herr);
120 virtual void printOn( std::ostream& out = std::cout );
121 // print IFile on stream
122
123 /// check for and replace an environment variable within a string
124 /// Soon to become obsolete -- maybe is by now
125 // static void extractEnvVar(std::string *fileStr);
126
127 protected:
128 friend class IFile_Section;
129 friend class IFile_Item;
130
131 static void stripBlanks( char* str1, const char* str2, int flags );
132 static int stricmp( const char* str1, const char* str2 );
133
134 // helper functions (some should be private/protected)
135
136 IFile(){};
137
138 private:
139 // May want to change & to *, to be more in line with the way
140 // Xerces has implemented the DOM interface
141 void addSection( const DOMElement* elt );
142 void domToIni( const DOMDocument* doc );
143 void domToIni( const DOMElement* doc );
144 virtual const char* _getstring( const char* section, const char* item,
145 int failIfNotFoundFlag = 1 );
146 // internal function, that does the work
147 };
148} // namespace xmlBase
149#endif
IFile_Item(std::string name, std::string value)
virtual int getInt(const char *section, const char *item)
Definition IFile.cxx:317
void setString(const char *section, const char *item, const char *newString)
Definition IFile.cxx:280
void print()
Definition IFile.cxx:46
virtual intVector getIntVector(const char *section, const char *item)
Definition IFile.cxx:351
virtual bool contains(const char *section, const char *item)
Definition IFile.cxx:221
static void stripBlanks(char *str1, const char *str2, int flags)
Definition IFile.cxx:63
virtual doubleVector getDoubleVector(const char *section, const char *item)
Definition IFile.cxx:383
IFile(const char *filename)
Definition IFile.cxx:130
virtual const char * getString(const char *section, const char *item)
Definition IFile.cxx:274
virtual double getDouble(const char *section, const char *item)
Definition IFile.cxx:302
virtual ~IFile()
Definition IFile.cxx:92
virtual void printOn(std::ostream &out=std::cout)
Definition IFile.cxx:31
static int stricmp(const char *str1, const char *str2)
Definition IFile.cxx:52
virtual int getBool(const char *section, const char *item)
Definition IFile.cxx:331