Dripline-Cpp  v2.4.2
Dripline Implementation in C++
specifier.cc
Go to the documentation of this file.
1 /*
2  * specifier.cc
3  *
4  * Created on: Feb 18, 2016
5  * Author: nsoblath
6  */
7 
8 #define DRIPLINE_API_EXPORTS
9 
10 #include "specifier.hh"
11 
12 #include "logger.hh"
13 
14 LOGGER( dlog, "specifier" );
15 
16 namespace dripline
17 {
18 
19  routing_key::routing_key( const std::string& a_rk ) :
20  deque()
21  {
22  if( ! a_rk.empty() ) add_next( a_rk );
23  }
24 
26  {
27  }
28 
29  void routing_key::parse( const std::string& a_rk )
30  {
31  while( ! empty() ) pop_front();
32 
33  add_next( a_rk );
34  return;
35  }
36 
37  std::string routing_key::to_string() const
38  {
39  std::string t_return;
40  for( container_type::const_iterator t_it = this->begin(); t_it != this->end(); ++t_it )
41  {
42  if( t_it != this->begin() ) t_return += f_node_separator;
43  t_return += *t_it;
44  }
45  return t_return;
46  }
47 
48  void routing_key::add_next( const std::string& a_addr )
49  {
50  size_t t_div_pos = a_addr.find( f_node_separator );
51  if( t_div_pos == a_addr.npos )
52  {
53  push_back( a_addr );
54  return;
55  }
56  push_back( a_addr.substr( 0, t_div_pos ) );
57  add_next( a_addr.substr( t_div_pos + 1 ) );
58  return;
59  }
60 
61 
62  specifier::specifier( const std::string& a_unparsed ) :
64  f_unparsed( a_unparsed )
65  {
66  LTRACE( dlog, "Creating specifier <" << a_unparsed << ">" );
67  if( ! a_unparsed.empty() ) add_next( a_unparsed );
68  }
69 
70  specifier::specifier( const specifier& a_orig ) :
71  container_type( a_orig ),
72  f_unparsed( a_orig.f_unparsed )
73  {}
74 
76  container_type( a_orig ),
77  f_unparsed( std::move( a_orig.f_unparsed ) )
78  {}
79 
81  {
82  }
83 
84  const specifier& specifier::operator=( const specifier& a_orig )
85  {
86  container_type::operator=( a_orig );
87  f_unparsed = a_orig.f_unparsed;
88  return *this;
89  }
90 
92  {
93  container_type::operator=( a_orig );
94  f_unparsed = std::move(a_orig.f_unparsed);
95  return *this;
96  }
97 
98  void specifier::parse( const std::string& a_unparsed )
99  {
100  LTRACE( dlog, "Parsing <" << a_unparsed << ">" );
101 
102  while( ! empty() ) pop_front();
103 
104  f_unparsed = a_unparsed;
105 
106  if( a_unparsed.empty() ) return;
107 
108  add_next( a_unparsed );
109  return;
110  }
111 
112  std::string specifier::to_string() const
113  {
114  std::string t_return;
115  for( container_type::const_iterator t_it = this->begin(); t_it != this->end(); ++t_it )
116  {
117  if( t_it != this->begin() ) t_return += f_node_separator;
118  t_return += *t_it;
119  }
120  return t_return;
121  }
122 
123  void specifier::add_next( const std::string& a_addr )
124  {
125  size_t t_div_pos = a_addr.find( f_node_separator );
126  if( t_div_pos == a_addr.npos )
127  {
128  push_back( a_addr );
129  return;
130  }
131  push_back( a_addr.substr( 0, t_div_pos ) );
132  add_next( a_addr.substr( t_div_pos + 1 ) );
133  return;
134  }
135 
136 
137 } /* namespace dripline */
std::string to_string() const
Converts specifier tokens into a single string.
Definition: specifier.cc:112
static scarab::logger dlog("specifier")
specifier(const std::string &a_unparsed="")
Definition: specifier.cc:62
STL namespace.
void add_next(const std::string &a_addr)
Definition: specifier.cc:123
routing_key(const std::string &a_rk="")
Definition: specifier.cc:19
std::deque< std::string > container_type
Definition: specifier.hh:58
void parse(const std::string &a_unparsed)
Parse a new specifier.
Definition: specifier.cc:98
static scarab::logger dlog("agent")
virtual ~specifier()
Definition: specifier.cc:80
std::string to_string() const
Converts the routing-key tokens into a single string.
Definition: specifier.cc:37
virtual ~routing_key()
Definition: specifier.cc:25
static const char f_node_separator
Definition: specifier.hh:45
void add_next(const std::string &a_addr)
Definition: specifier.cc:48
void parse(const std::string &a_rk)
Parses a routing key.
Definition: specifier.cc:29
const specifier & operator=(const specifier &a_orig)
Definition: specifier.cc:84
Parses specifiers and stores the tokenized information.
Definition: specifier.hh:55
static const char f_node_separator
Definition: specifier.hh:83