ANNA Suite  2020b
Multipurpose development suite for Telco applications
Dictionary.hpp
Go to the documentation of this file.
1 // ANNA - Anna is Not Nothingness Anymore //
2 // //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
4 // //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7 
8 
9 #ifndef anna_diameter_stack_Dictionary_hpp
10 #define anna_diameter_stack_Dictionary_hpp
11 
12 
13 // Local
19 
21 
22 // STL
23 #include <string>
24 #include <map>
25 
26 namespace anna {
27 namespace xml {
28 class Node;
29 class DTDMemory;
30 }
31 }
32 
33 
34 
35 
36 namespace anna {
37 
38 namespace diameter {
39 
40 namespace stack {
41 
42 
43 
44 //------------------------------------------------------------------------------
45 //------------------------------------------------------------- class Dictionary
46 //------------------------------------------------------------------------------
50 class Dictionary {
51 
52 public:
53 
54  typedef std::map<std::string, Format> format_container;
55  typedef format_container::const_iterator const_format_iterator;
56 
57  typedef std::map<S32, Vendor> vendor_container;
58  typedef vendor_container::const_iterator const_vendor_iterator;
59 
60  struct lessAvp { // order by vendor id
61  bool operator()(AvpId id1, AvpId id2) const {
62  if(id1.second == id2.second) return (id1.first < id2.first);
63 
64  return (id1.second < id2.second);
65  }
66  };
67  typedef std::map<AvpId, Avp, lessAvp> avp_container;
68  typedef avp_container::const_iterator const_avp_iterator;
69 
70 
71  struct lessCommand {
72  bool operator()(CommandId id1, CommandId id2) const {
73  if(id1.first == id2.first) {
74  if(id1.second != id2.second) return (id1.second); // request -> answer
75 
76  return (false);
77  }
78 
79  return (id1.first < id2.first);
80  }
81  };
82  typedef std::map<CommandId, Command, lessCommand> command_container;
83  typedef command_container::const_iterator const_command_iterator;
84 
85 protected:
86  std::string a_name;
87 
88 private:
89 
90  bool a_allowUpdates;
91  format_container a_formats;
92  vendor_container a_vendors;
93  avp_container a_avps;
94  command_container a_commands;
95 
96  // Auxiliary
97  const anna::xml::DTDMemory * a_dtd;
98 
99  // Name identifiers:
100  typedef std::map<std::string, const Vendor *> vendorNames_container;
101  typedef vendorNames_container::const_iterator const_vendorNames_iterator;
102 
103  typedef std::map<std::string, const Avp *> avpNames_container;
104  typedef avpNames_container::const_iterator const_avpNames_iterator;
105 
106  typedef std::map<std::string, const Command *> commandNames_container;
107  typedef commandNames_container::const_iterator const_commandNames_iterator;
108 
109  vendorNames_container a_vendorNames;
110  avpNames_container a_avpNames;
111  commandNames_container a_commandNames;
112 
113 
114  // init
115  void initialize() ;
116 
117  // check & addings
118  //void checkUniqueIdentifiers(const anna::xml::Node *rootNode) const noexcept(false);
119  void extractFormats(const anna::xml::Node *rootNode) noexcept(false);
120  void extractVendors(const anna::xml::Node *rootNode) noexcept(false);
121  void extractAvps(const anna::xml::Node *rootNode) noexcept(false);
122  void extractCommands(const anna::xml::Node *rootNode) noexcept(false);
123 
124 public:
125 
126  Dictionary();
128 
129  // get
130  const std::string & getName() const { return a_name; }
131  const Format * getFormat(const std::string & formatName) const ;
132  const Vendor * getVendor(S32 vendorId) const ;
133  const Vendor * getVendor(const std::string & vendorName) const ;
134  const Avp * getAvp(const AvpId & avpId) const ;
135  const Avp * getAvp(const std::string & avpName) const ;
136  const Command * getCommand(const CommandId & commandId) const ;
137  const Command * getCommand(const std::string & commandName) const ;
138 
139  // set
140  void allowUpdates(bool allow = true) { a_allowUpdates = allow; }
141  void addFormat(const Format &, bool reserved = false) noexcept(false);
142  void addVendor(const Vendor &) noexcept(false);
143  void addAvp(const Avp &) noexcept(false);
144  void addCommand(const Command &) noexcept(false);
145 
146  // containers
147  const_format_iterator format_begin() const { return a_formats.begin(); }
148  const_format_iterator format_end() const { return a_formats.end(); }
149  int format_size() const { return a_formats.size(); }
150 
151  const_vendor_iterator vendor_begin() const { return a_vendors.begin(); }
152  const_vendor_iterator vendor_end() const { return a_vendors.end(); }
153  int vendor_size() const { return a_vendors.size(); }
154 
155  const_avp_iterator avp_begin() const { return a_avps.begin(); }
156  const_avp_iterator avp_end() const { return a_avps.end(); }
157  int avp_size() const { return a_avps.size(); }
158 
159  const_command_iterator command_begin() const { return a_commands.begin(); }
160  const_command_iterator command_end() const { return a_commands.end(); }
161  int command_size() const { return a_commands.size(); }
162 
163 
164  // helpers
170  std::string asString(void) const ;
171 
177  anna::xml::Node* asXML(anna::xml::Node* parent) const ;
178 
183  std::string asXMLString() const ;
184 
185  // operators
186 
207  virtual void load(const std::string & pathFile) noexcept(false);
208 
212  void clear(void) { initialize(); } // initialize and prepares the dictionary
213 };
214 
215 
216 }
217 }
218 }
219 
220 
221 #endif
const_format_iterator format_end() const
Definition: Dictionary.hpp:148
const_avp_iterator avp_begin() const
Definition: Dictionary.hpp:155
Definition: Dictionary.hpp:60
Definition: Vendor.hpp:46
const_avp_iterator avp_end() const
Definition: Dictionary.hpp:156
~Dictionary()
Definition: Dictionary.hpp:127
int format_size() const
Definition: Dictionary.hpp:149
Definition: Node.hpp:56
const_command_iterator command_begin() const
Definition: Dictionary.hpp:159
vendor_container::const_iterator const_vendor_iterator
Definition: Dictionary.hpp:58
bool operator()(CommandId id1, CommandId id2) const
Definition: Dictionary.hpp:72
void clear(void)
Definition: Dictionary.hpp:212
bool operator()(AvpId id1, AvpId id2) const
Definition: Dictionary.hpp:61
int vendor_size() const
Definition: Dictionary.hpp:153
int avp_size() const
Definition: Dictionary.hpp:157
const_vendor_iterator vendor_end() const
Definition: Dictionary.hpp:152
std::map< AvpId, Avp, lessAvp > avp_container
Definition: Dictionary.hpp:67
std::pair< S32, S32 > AvpId
Definition: defines.hpp:31
const std::string & getName() const
Definition: Dictionary.hpp:130
Definition: DTDMemory.hpp:24
int32_t S32
Definition: defines.hpp:78
std::map< std::string, Format > format_container
Definition: Dictionary.hpp:54
std::string a_name
Definition: Dictionary.hpp:86
void allowUpdates(bool allow=true)
Definition: Dictionary.hpp:140
format_container::const_iterator const_format_iterator
Definition: Dictionary.hpp:55
xml::Node Node
Definition: Node.hpp:21
Definition: Dictionary.hpp:50
avp_container::const_iterator const_avp_iterator
Definition: Dictionary.hpp:68
Definition: Command.hpp:48
Definition: app.hpp:12
Definition: Avp.hpp:58
std::map< S32, Vendor > vendor_container
Definition: Dictionary.hpp:57
int command_size() const
Definition: Dictionary.hpp:161
const_vendor_iterator vendor_begin() const
Definition: Dictionary.hpp:151
Definition: Format.hpp:45
std::pair< U24, bool > CommandId
Definition: defines.hpp:32
const_format_iterator format_begin() const
Definition: Dictionary.hpp:147
std::map< CommandId, Command, lessCommand > command_container
Definition: Dictionary.hpp:82
const_command_iterator command_end() const
Definition: Dictionary.hpp:160
command_container::const_iterator const_command_iterator
Definition: Dictionary.hpp:83