libdap++  Updated for version 3.13.3
D4EnumDef.h
Go to the documentation of this file.
1 /*
2  * D4EnumDef.h
3  *
4  * Created on: Oct 9, 2012
5  * Author: jimg
6  */
7 
8 #ifndef D4ENUMDEF_H_
9 #define D4ENUMDEF_H_
10 
11 #include <string>
12 #include <vector>
13 #include <algorithm>
14 #include <functional>
15 
16 #include "BaseType.h"
17 
18 using namespace std;
19 
20 namespace libdap {
21 
22 class D4EnumDef {
23  string d_name;
24  Type d_type;
25 
26  struct enum_val {
27  string d_item;
28  // cast to unsigned based on d_type.
29  long long d_val;
30 
31  enum_val(const string &item, unsigned long val) :
32  d_item(item), d_val(val)
33  {
34  }
35  };
36 
37  vector<enum_val> d_values;
38  typedef vector<enum_val>::iterator enumValIter;
39 
40 public:
41  D4EnumDef() {}
42  D4EnumDef(const string &name, Type type) : d_name(name), d_type(type) {}
43 
44  virtual ~D4EnumDef() {}
45 
46  string get_name() const { return d_name; }
47  void set_name(const string &name) { d_name = name; }
48 
49  Type get_type() const { return d_type; }
50  void set_type(Type t) { d_type = t; }
51 
52  void add_value(const string &item, unsigned long val) {
53  d_values.push_back(enum_val(item, val));
54  }
55 
56  enumValIter begin_vals() { return d_values.begin(); }
57  enumValIter end_vals() { return d_values.end(); }
58  long long get_value(enumValIter i) { return i->d_val; }
59  string get_item(enumValIter i ) { return i->d_item; }
60 
61  static bool is_item(const enum_val e, const string item) {
62  return e.d_item == item;
63  }
64 
65  // Written to use for_each() as an exercise... Cannot use reference
66  // types in is_item(...)
67  long long get_value(const string &item) {
68  // lookup name and return d_val;
69  enumValIter i = find_if(d_values.begin(), d_values.end(),
70  bind2nd(ptr_fun(libdap::D4EnumDef::is_item), item));
71  return i->d_val;
72  }
73 
74 private:
75 #if 0
76  string type_name();
77 #endif
78  static void print_enum_const(XMLWriter *xml, const enum_val ev);
79 
80 public:
81  void print_xml_writer(XMLWriter &xml);
82 };
83 
84 } /* namespace libdap */
85 #endif /* D4ENUMDEF_H_ */
void add_value(const string &item, unsigned long val)
Definition: D4EnumDef.h:52
enumValIter end_vals()
Definition: D4EnumDef.h:57
void set_type(Type t)
Definition: D4EnumDef.h:50
void set_name(const string &name)
Definition: D4EnumDef.h:47
D4EnumDef(const string &name, Type type)
Definition: D4EnumDef.h:42
string get_item(enumValIter i)
Definition: D4EnumDef.h:59
Type
Identifies the data type.
Definition: BaseType.h:137
long long get_value(const string &item)
Definition: D4EnumDef.h:67
enumValIter begin_vals()
Definition: D4EnumDef.h:56
string get_name() const
Definition: D4EnumDef.h:46
long long get_value(enumValIter i)
Definition: D4EnumDef.h:58
virtual ~D4EnumDef()
Definition: D4EnumDef.h:44
Type get_type() const
Definition: D4EnumDef.h:49
static bool is_item(const enum_val e, const string item)
Definition: D4EnumDef.h:61
string type_name(Type t)
Returns the type of the class instance as a string.
Definition: util.cc:522