FRIBParallelanalysis  1.0
FrameworkforMPIParalleldataanalysisatFRIB
CItemConfiguration.h
1 /*
2  This software is Copyright by the Board of Trustees of Michigan
3  State University (c) Copyright 2005.
4 
5  You may use this software under the terms of the GNU public license
6  (GPL). The terms of this license are described at:
7 
8  http://www.gnu.org/licenses/gpl.txt
9 
10  Author:
11  Ron Fox
12  NSCL
13  Michigan State University
14  East Lansing, MI 48824-1321
15 */
16 
17 #ifndef CITEMCONFIGURATION_H
18 #define CITEMCONFIGURATION_H
19 
20 // Necessary includes (kept to a minimum using forward class defs).
21 
22 #include <string>
23 #include <map> // also defines std::pair
24 #include <vector>
25 #include <set>
26 
27 // Typedefs for the parameter checker are in the global namespace:
28 
29 typedef bool (*typeChecker)(std::string name, std::string value, void* arg);
30 
66 
67  // public typedefs:
68 
69 public:
70  typedef std::pair<typeChecker, void*> TypeCheckInfo; // Type checker + arg.
71  typedef std::vector<std::pair<std::string, std::string> > ConfigurationArray;
72 
73  // Arg types for the standard type checkers.
74 
75  struct limit {
76  bool s_checkMe;
77  long s_value;
78  limit() :
79  s_checkMe(false)
80  {}
81  limit(long value) :
82  s_checkMe(true),
83  s_value(value) {}
84  } ;
85  typedef std::pair<limit, limit> Limits;
86  typedef std::set<std::string> isEnumParameter;
87  typedef struct _ListSizeConstraint {
88  limit s_atLeast;
89  limit s_atMost;
91 
92  typedef struct _isListParameter {
93  ListSizeConstraint s_allowedSize;
94  TypeCheckInfo s_checker;
96 
97 
98  struct flimit {
99  bool s_checkMe;
100  float s_value;
101  flimit() :
102  s_checkMe(false) {}
103  flimit(float value) :
104  s_checkMe(true),
105  s_value(value) {}
106  };
107 
108  typedef std::pair<flimit, flimit> FloatingLimits;
109 
110 
111  // Internal typedefs
112 private:
113  typedef std::pair<std::string, TypeCheckInfo> ConfigData;
114  typedef std::map<std::string, ConfigData> Configuration;
115  typedef Configuration::iterator ConfigIterator;
116 
117 
118 private:
119  std::string m_name;
120  Configuration m_parameters;
121 
122 public:
123  // Canonicals..
124 
125  CItemConfiguration(std::string name);
127  virtual ~CItemConfiguration();
129  int operator==(const CItemConfiguration& rhs) const;
130  int operator!=(const CItemConfiguration& rhs) const;
131 
132  // Selectors:
133 
134 public:
135  std::string getName() const;
136  std::string cget(std::string name) ;
137  ConfigurationArray cget();
138 
139  // Convenience functions that get common conversions:
140 
141  int getIntegerParameter (std::string name);
142  unsigned int getUnsignedParameter(std::string name);
143  bool getBoolParameter (std::string name);
144  double getFloatParameter (std::string name);
145  std::vector<int> getIntegerList (std::string name);
146 
147  // Operations:
148 
149 public:
150  // Establishing the configuration:
151 
152  void addParameter(std::string name, typeChecker checker, void* arg,
153  std::string defaultValue = std::string(""));
154 
155  void clearConfiguration();
156 
157  // Manipulating and querying the configuration:
158 
159  bool isValid(std::string name, std::string value);
160  void configure(std::string name, std::string value);
161 
162 
163  // common type checkers:
164 
165  static bool isInteger(std::string name, std::string value, void* arg);
166  static bool isBool( std::string name, std::string value, void* arg);
167  static bool isEnum( std::string name, std::string value, void* arg);
168  static bool isFloat( std::string name, std::string value, void* arg);
169  static bool isList( std::string name, std::string value, void* arg);
170  static bool isBoolList(std::string name,std::string value, void* arg);
171  static bool isIntList(std::string name, std::string value, void* arg);
172  static bool isStringList(std::string name, std::string value, void* arg);
173 
174 
175  // utilities:
176 private:
177  static void addTrueValues(std::set<std::string>& values);
178  static void addFalseValues(std::set<std::string>& values);
179  ConfigIterator findOrThrow(std::string name);
180 };
181 
182 
183 #endif
virtual ~CItemConfiguration()
Definition: CItemConfiguration.cpp:64
static bool isList(std::string name, std::string value, void *arg)
Definition: CItemConfiguration.cpp:619
int getIntegerParameter(std::string name)
Definition: CItemConfiguration.cpp:193
ConfigurationArray cget()
Definition: CItemConfiguration.cpp:157
bool isValid(std::string name, std::string value)
Definition: CItemConfiguration.cpp:359
int operator==(const CItemConfiguration &rhs) const
Definition: CItemConfiguration.cpp:96
static bool isStringList(std::string name, std::string value, void *arg)
Definition: CItemConfiguration.cpp:755
std::vector< int > getIntegerList(std::string name)
Definition: CItemConfiguration.cpp:287
Definition: CItemConfiguration.h:92
static bool isBoolList(std::string name, std::string value, void *arg)
Definition: CItemConfiguration.cpp:680
static bool isInteger(std::string name, std::string value, void *arg)
Definition: CItemConfiguration.cpp:439
static bool isBool(std::string name, std::string value, void *arg)
Definition: CItemConfiguration.cpp:489
double getFloatParameter(std::string name)
Definition: CItemConfiguration.cpp:263
CItemConfiguration & operator=(const CItemConfiguration &rhs)
Definition: CItemConfiguration.cpp:83
void addParameter(std::string name, typeChecker checker, void *arg, std::string defaultValue=std::string(""))
Definition: CItemConfiguration.cpp:337
static bool isIntList(std::string name, std::string value, void *arg)
Definition: CItemConfiguration.cpp:719
static bool isEnum(std::string name, std::string value, void *arg)
Definition: CItemConfiguration.cpp:585
Definition: CItemConfiguration.h:98
Definition: CItemConfiguration.h:87
void clearConfiguration()
Definition: CItemConfiguration.cpp:413
int operator!=(const CItemConfiguration &rhs) const
Definition: CItemConfiguration.cpp:105
bool getBoolParameter(std::string name)
Definition: CItemConfiguration.cpp:241
Definition: CItemConfiguration.h:75
void configure(std::string name, std::string value)
Definition: CItemConfiguration.cpp:387
Definition: CItemConfiguration.h:65
unsigned int getUnsignedParameter(std::string name)
Definition: CItemConfiguration.cpp:213
static bool isFloat(std::string name, std::string value, void *arg)
Definition: CItemConfiguration.cpp:529
std::string getName() const
Definition: CItemConfiguration.cpp:119