paho-mqtt-cpp
MQTT C++ Client for POSIX and Windows
string_collection.h
Go to the documentation of this file.
1 
8 /*******************************************************************************
9  * Copyright (c) 2017 Frank Pagliughi <fpagliughi@mindspring.com>
10  *
11  * All rights reserved. This program and the accompanying materials
12  * are made available under the terms of the Eclipse Public License v2.0
13  * and Eclipse Distribution License v1.0 which accompany this distribution.
14  *
15  * The Eclipse Public License is available at
16  * http://www.eclipse.org/legal/epl-v20.html
17  * and the Eclipse Distribution License is available at
18  * http://www.eclipse.org/org/documents/edl-v10.php.
19  *
20  * Contributors:
21  * Frank Pagliughi - initial implementation and documentation
22  *******************************************************************************/
23 
24 #ifndef __mqtt_string_collection_h
25 #define __mqtt_string_collection_h
26 
27 #include "MQTTAsync.h"
28 #include "mqtt/types.h"
29 #include <vector>
30 #include <map>
31 #include <memory>
32 
33 namespace mqtt {
34 
36 
43 {
45  using collection_type = std::vector<string>;
47  using c_arr_type = std::vector<const char*>;
48 
52  collection_type coll_;
60  c_arr_type cArr_;
66  void update_c_arr();
67 
68 public:
70  using ptr_t = std::shared_ptr<string_collection>;
72  using const_ptr_t = std::shared_ptr<const string_collection>;
73 
77  string_collection() =default;
82  string_collection(const string& str);
87  string_collection(string&& str);
92  string_collection(const collection_type& vec);
97  string_collection(collection_type&& vec);
107  string_collection(string_collection&& coll) = default;
112  string_collection(std::initializer_list<string> sl);
118  string_collection(std::initializer_list<const char*> sl);
123  static ptr_t create(const string& str) {
124  return std::make_shared<string_collection>(str);
125  }
132  static ptr_t create(string&& str) {
133  return std::make_shared<string_collection>(str);
134  }
140  static ptr_t create(const collection_type& vec) {
141  return std::make_shared<string_collection>(vec);
142  }
149  static ptr_t create(collection_type&& vec) {
150  return std::make_shared<string_collection>(vec);
151  }
158  static ptr_t create(std::initializer_list<string> sl) {
159  return std::make_shared<string_collection>(sl);
160  }
167  static ptr_t create(std::initializer_list<const char*> sl) {
168  return std::make_shared<string_collection>(sl);
169  }
183  string_collection& operator=(string_collection&& coll) = default;
188  bool empty() const { return coll_.empty(); }
193  size_t size() const { return coll_.size(); }
198  void push_back(const string& str);
203  void push_back(string&& str);
207  void clear();
213  const string& operator[](size_t i) const { return coll_[i]; }
225  char* const* c_arr() const { return (char* const *) cArr_.data(); }
226 };
227 
229 
232 
235 
237 
242 {
244  using collection_type = std::map<string, string>;
246  using c_arr_type = std::vector<MQTTAsync_nameValue>;
247 
251  collection_type map_;
255  c_arr_type cArr_;
261  void update_c_arr();
262 
263 public:
265  using ptr_t = std::shared_ptr<name_value_collection>;
267  using const_ptr_t = std::shared_ptr<const name_value_collection>;
269  using value_type = collection_type::value_type;
273  name_value_collection() =default;
278  name_value_collection(const collection_type& map) : map_(map) {
279  update_c_arr();
280  }
285  name_value_collection(collection_type&& map) : map_(std::move(map)) {
286  update_c_arr();
287  }
293  : map_(other.map_) {
294  update_c_arr();
295  }
300  name_value_collection(name_value_collection&& other) = default;
310  name_value_collection(std::initializer_list<value_type> init)
311  : map_{ init } {
312  update_c_arr();
313  }
319  map_ = other.map_;
320  update_c_arr();
321  return *this;
322  }
333  bool empty() const { return map_.empty(); }
338  size_t size() const { return map_.size(); }
342  void clear() {
343  map_.clear();
344  update_c_arr();
345  }
351  bool insert(const value_type& nvpair) {
352  if (map_.insert(nvpair).second) {
353  update_c_arr();
354  return true;
355  }
356  return false;
357  }
368  const MQTTAsync_nameValue* c_arr() const { return cArr_.data(); }
369 };
370 
371 
373 // end namespace mqtt
374 }
375 
376 #endif // __mqtt_string_collection_h
377 
std::shared_ptr< name_value_collection > ptr_t
Definition: string_collection.h:265
std::shared_ptr< string_collection > ptr_t
Definition: string_collection.h:70
size_t size() const
Definition: string_collection.h:193
name_value_collection(collection_type &&map)
Definition: string_collection.h:285
static ptr_t create(collection_type &&vec)
Definition: string_collection.h:149
const string & operator[](size_t i) const
Definition: string_collection.h:213
void push_back(const string &str)
string_collection::const_ptr_t const_string_collection_ptr
Definition: string_collection.h:234
name_value_collection(const name_value_collection &other)
Definition: string_collection.h:292
const MQTTAsync_nameValue * c_arr() const
Definition: string_collection.h:368
name_value_collection(const collection_type &map)
Definition: string_collection.h:278
string_collection & operator=(const string_collection &coll)
static ptr_t create(const collection_type &vec)
Definition: string_collection.h:140
Definition: string_collection.h:42
char *const * c_arr() const
Definition: string_collection.h:225
static ptr_t create(std::initializer_list< string > sl)
Definition: string_collection.h:158
static ptr_t create(string &&str)
Definition: string_collection.h:132
std::shared_ptr< const string_collection > const_ptr_t
Definition: string_collection.h:72
static ptr_t create(const string &str)
Definition: string_collection.h:123
string_collection::ptr_t string_collection_ptr
Definition: string_collection.h:231
name_value_collection(std::initializer_list< value_type > init)
Definition: string_collection.h:310
bool empty() const
Definition: string_collection.h:188
bool insert(const value_type &nvpair)
Definition: string_collection.h:351
void clear()
Definition: string_collection.h:342
collection_type::value_type value_type
Definition: string_collection.h:269
name_value_collection & operator=(const name_value_collection &other)
Definition: string_collection.h:318
Definition: async_client.h:49
std::shared_ptr< const name_value_collection > const_ptr_t
Definition: string_collection.h:267
bool empty() const
Definition: string_collection.h:333
size_t size() const
Definition: string_collection.h:338
static ptr_t create(std::initializer_list< const char *> sl)
Definition: string_collection.h:167
Definition: string_collection.h:241