ANNA Suite  2020b
Multipurpose development suite for Telco applications
Abstract.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_http_wims20_Abstract_hpp
10 #define anna_http_wims20_Abstract_hpp
11 
12 #include <vector>
13 
16 
17 namespace anna {
18 
19 namespace http {
20 
21 namespace wims20 {
22 
46 class Abstract {
47 public:
48  typedef std::vector <std::string*> other_level_container;
49  typedef other_level_container::iterator other_level_iterator;
50  typedef other_level_container::const_iterator const_other_level_iterator;
51 
58  typedef std::pair <std::string*, std::string*> parameter_pkv;
59  typedef std::vector <parameter_pkv> parameter_container;
60  typedef parameter_container::iterator parameter_iterator;
61  typedef parameter_container::const_iterator const_parameter_iterator;
62 
66  virtual ~Abstract();
67 
72  const std::string& getDomain() const { return a_domain; }
73 
78  const std::string* getPath() const { return a_path; }
79 
84  const std::string& getServiceID() const { return a_serviceID; }
85 
90  const std::string& getGUID() const { return a_guid; }
91 
96  void setServiceID(const std::string& serviceID) { a_serviceID = serviceID; a_fixedPart.clear(); }
97 
103  void setGUID(const std::string& guid) { a_guid = guid; a_fixedPart.clear(); }
104 
109  bool hasParameters() const { return a_parameters != NULL && a_parameters->empty() == false; }
110 
115  bool hasOtherLevels() const { return a_otherLevels != NULL && a_otherLevels->empty() == false; }
116 
121  virtual void clearOtherLevels() ;
122 
129  virtual void clearParameters() ;
130 
134  void clear() {
136  clearParameters();
137  }
138 
143  std::string asString() const ;
144 
150  other_level_iterator other_level_begin() { return a_otherLevels->begin(); }
151 
157  other_level_iterator other_level_end() { return a_otherLevels->end(); }
158 
164  static std::string* otherLevel(other_level_iterator ii) { return *ii; }
165 
171  const_other_level_iterator other_level_begin() const { return a_otherLevels->begin(); }
172 
178  const_other_level_iterator other_level_end() const { return a_otherLevels->end(); }
179 
185  static const std::string& otherLevel(const_other_level_iterator ii) { return **ii; }
186 
192  const_parameter_iterator parameter_begin() const { return a_parameters->begin(); }
193 
199  const_parameter_iterator parameter_end() const { return a_parameters->end(); }
200 
206  static const std::string& parameter_name(const_parameter_iterator ii) { return *(ii->first); }
207 
213  static const std::string& parameter_value(const_parameter_iterator ii) { return *(ii->second); }
214 
215 protected:
216  other_level_container* a_otherLevels;
217  parameter_container* a_parameters;
218 
225  Abstract(const char* whatis, const std::string& domain, const std::string& path);
226 
232  explicit Abstract(const char* whatis, const std::string& domain);
233 
239  const std::string& calculeFixedPart() noexcept(false);
240 
246  const std::string& calculeShortFixedPart() noexcept(false);
247 
252  std::string* createString() noexcept(false) { return a_string_pool.create(); }
253 
258  std::string* createString(const char* value) noexcept(false) {
259  std::string* result = a_string_pool.create();
260  *result = value;
261  return result;
262  }
263 
268  std::string* createString(const std::string& value) noexcept(false) { return createString(value.c_str()); }
269 
274  void destroyString(std::string* str) { a_string_pool.release(str); }
275 
280  void other_level_add(const std::string& otherLevel) noexcept(false);
281 
287  void parameter_set(const std::string& name, const std::string& value) noexcept(false);
288 
294  parameter_iterator parameter_begin() { return a_parameters->begin(); }
295 
301  parameter_iterator parameter_end() { return a_parameters->end(); }
302 
308  static std::string* parameter_name(parameter_iterator ii) { return ii->first; }
309 
315  static std::string* parameter_value(parameter_iterator ii) { return ii->second; }
316 
320  static void appendWithSlash(std::string& target, const std::string& other) ;
321 
322 private:
323  const std::string a_whatis;
324  const std::string a_domain;
325  std::string* a_path;
326  std::string a_serviceID;
327  std::string a_guid;
328  Recycler <std::string> a_string_pool;
329  std::string a_fixedPart;
330 };
331 
332 
333 }
334 }
335 }
336 
337 #endif
std::pair< std::string *, std::string * > parameter_pkv
Definition: Abstract.hpp:58
std::string * createString() noexcept(false)
Definition: Abstract.hpp:252
void clear()
Definition: Abstract.hpp:134
std::string asString() const
const_parameter_iterator parameter_end() const
Definition: Abstract.hpp:199
void other_level_add(const std::string &otherLevel) noexcept(false)
T * create() noexcept(false)
Definition: Recycler.hpp:88
parameter_container::const_iterator const_parameter_iterator
Definition: Abstract.hpp:61
const_other_level_iterator other_level_begin() const
Definition: Abstract.hpp:171
std::string * createString(const char *value) noexcept(false)
Definition: Abstract.hpp:258
Definition: Abstract.hpp:46
const std::string & getDomain() const
Definition: Abstract.hpp:72
other_level_container::iterator other_level_iterator
Definition: Abstract.hpp:49
const std::string & getServiceID() const
Definition: Abstract.hpp:84
void setServiceID(const std::string &serviceID)
Definition: Abstract.hpp:96
parameter_container * a_parameters
Definition: Abstract.hpp:217
void parameter_set(const std::string &name, const std::string &value) noexcept(false)
other_level_iterator other_level_end()
Definition: Abstract.hpp:157
static std::string * otherLevel(other_level_iterator ii)
Definition: Abstract.hpp:164
std::vector< std::string * > other_level_container
Definition: Abstract.hpp:48
const_parameter_iterator parameter_begin() const
Definition: Abstract.hpp:192
std::vector< parameter_pkv > parameter_container
Definition: Abstract.hpp:59
parameter_iterator parameter_begin()
Definition: Abstract.hpp:294
static const std::string & otherLevel(const_other_level_iterator ii)
Definition: Abstract.hpp:185
static const std::string & parameter_value(const_parameter_iterator ii)
Definition: Abstract.hpp:213
Abstract(const char *whatis, const std::string &domain, const std::string &path)
void destroyString(std::string *str)
Definition: Abstract.hpp:274
std::string * createString(const std::string &value) noexcept(false)
Definition: Abstract.hpp:268
const std::string & getGUID() const
Definition: Abstract.hpp:90
Definition: app.hpp:12
void setGUID(const std::string &guid)
Definition: Abstract.hpp:103
static std::string * parameter_name(parameter_iterator ii)
Definition: Abstract.hpp:308
const std::string * getPath() const
Definition: Abstract.hpp:78
void release(T *t)
Definition: Recycler.hpp:144
static std::string * parameter_value(parameter_iterator ii)
Definition: Abstract.hpp:315
other_level_iterator other_level_begin()
Definition: Abstract.hpp:150
const std::string & calculeFixedPart() noexcept(false)
other_level_container * a_otherLevels
Definition: Abstract.hpp:216
const std::string & calculeShortFixedPart() noexcept(false)
other_level_container::const_iterator const_other_level_iterator
Definition: Abstract.hpp:50
static const std::string & parameter_name(const_parameter_iterator ii)
Definition: Abstract.hpp:206
bool hasOtherLevels() const
Definition: Abstract.hpp:115
static void appendWithSlash(std::string &target, const std::string &other)
virtual void clearOtherLevels()
virtual void clearParameters()
const_other_level_iterator other_level_end() const
Definition: Abstract.hpp:178
bool hasParameters() const
Definition: Abstract.hpp:109
parameter_container::iterator parameter_iterator
Definition: Abstract.hpp:60
parameter_iterator parameter_end()
Definition: Abstract.hpp:301