PahoMqttCpp
MQTT C++ Client for POSIX and Windows
Loading...
Searching...
No Matches
string_collection.h
Go to the documentation of this file.
1
7
8/*******************************************************************************
9 * Copyright (c) 2017-2024 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 <map>
28#include <memory>
29#include <vector>
30
31#include "MQTTAsync.h"
32#include "mqtt/types.h"
33
34namespace mqtt {
35
37
45{
46public:
48 using collection_type = std::vector<string>;
50 using const_iterator = collection_type::const_iterator;
51
53 using ptr_t = std::shared_ptr<string_collection>;
55 using const_ptr_t = std::shared_ptr<const string_collection>;
56
57private:
59 using c_arr_type = std::vector<const char*>;
60
64 collection_type coll_;
72 c_arr_type cArr_;
78 void update_c_arr();
79
80public:
84 string_collection() = default;
89 string_collection(const string& str);
94 string_collection(string&& str);
119 string_collection(std::initializer_list<string> sl);
125 string_collection(std::initializer_list<const char*> sl);
130 static ptr_t create(const string& str) {
131 return std::make_shared<string_collection>(str);
132 }
139 static ptr_t create(string&& str) { return std::make_shared<string_collection>(str); }
145 static ptr_t create(const collection_type& vec) {
146 return std::make_shared<string_collection>(vec);
147 }
155 return std::make_shared<string_collection>(vec);
156 }
163 static ptr_t create(std::initializer_list<string> sl) {
164 return std::make_shared<string_collection>(sl);
165 }
172 static ptr_t create(std::initializer_list<const char*> sl) {
173 return std::make_shared<string_collection>(sl);
174 }
193 const_iterator begin() const { return coll_.begin(); }
198 const_iterator end() const { return coll_.end(); }
203 const_iterator cbegin() const { return coll_.cbegin(); }
208 const_iterator cend() const { return coll_.cend(); }
213 bool empty() const { return coll_.empty(); }
218 size_t size() const { return coll_.size(); }
223 void push_back(const string& str);
228 void push_back(string&& str);
232 void clear();
238 const string& operator[](size_t i) const { return coll_[i]; }
250 char* const* c_arr() const { return (char* const*)cArr_.data(); }
251};
252
254
257
260
262
267{
269 using collection_type = std::map<string, string>;
271 using c_arr_type = std::vector<MQTTAsync_nameValue>;
272
276 collection_type map_;
280 c_arr_type cArr_;
286 void update_c_arr();
287
288public:
290 using ptr_t = std::shared_ptr<name_value_collection>;
292 using const_ptr_t = std::shared_ptr<const name_value_collection>;
294 using value_type = collection_type::value_type;
303 name_value_collection(const collection_type& map) : map_(map) { update_c_arr(); }
308 name_value_collection(collection_type&& map) : map_(std::move(map)) { update_c_arr(); }
313 name_value_collection(const name_value_collection& other) : map_(other.map_) {
314 update_c_arr();
315 }
330 name_value_collection(std::initializer_list<value_type> init) : map_{init} {
331 update_c_arr();
332 }
338 map_ = other.map_;
339 update_c_arr();
340 return *this;
341 }
352 bool empty() const { return map_.empty(); }
357 size_t size() const { return map_.size(); }
361 void clear() {
362 map_.clear();
363 update_c_arr();
364 }
370 bool insert(const value_type& nvpair) {
371 if (map_.insert(nvpair).second) {
372 update_c_arr();
373 return true;
374 }
375 return false;
376 }
387 const MQTTAsync_nameValue* c_arr() const { return cArr_.data(); }
388};
389
391} // namespace mqtt
392
393#endif // __mqtt_string_collection_h
Definition string_collection.h:267
name_value_collection & operator=(const name_value_collection &other)
Definition string_collection.h:337
std::shared_ptr< const name_value_collection > const_ptr_t
Definition string_collection.h:292
name_value_collection(const collection_type &map)
Definition string_collection.h:303
name_value_collection(const name_value_collection &other)
Definition string_collection.h:313
name_value_collection & operator=(name_value_collection &&other)=default
std::shared_ptr< name_value_collection > ptr_t
Definition string_collection.h:290
name_value_collection(collection_type &&map)
Definition string_collection.h:308
void clear()
Definition string_collection.h:361
name_value_collection(name_value_collection &&other)=default
bool insert(const value_type &nvpair)
Definition string_collection.h:370
bool empty() const
Definition string_collection.h:352
const MQTTAsync_nameValue * c_arr() const
Definition string_collection.h:387
name_value_collection(std::initializer_list< value_type > init)
Definition string_collection.h:330
collection_type::value_type value_type
Definition string_collection.h:294
size_t size() const
Definition string_collection.h:357
Definition string_collection.h:45
const_iterator cbegin() const
Definition string_collection.h:203
string_collection & operator=(const string_collection &coll)
const_iterator begin() const
Definition string_collection.h:193
string_collection(std::initializer_list< const char * > sl)
size_t size() const
Definition string_collection.h:218
string_collection(const string_collection &coll)
string_collection(std::initializer_list< string > sl)
static ptr_t create(std::initializer_list< string > sl)
Definition string_collection.h:163
std::shared_ptr< const string_collection > const_ptr_t
Definition string_collection.h:55
string_collection(string_collection &&coll)=default
string_collection(const collection_type &vec)
std::shared_ptr< string_collection > ptr_t
Definition string_collection.h:53
void push_back(const string &str)
const string & operator[](size_t i) const
Definition string_collection.h:238
string_collection(const string &str)
static ptr_t create(const collection_type &vec)
Definition string_collection.h:145
static ptr_t create(std::initializer_list< const char * > sl)
Definition string_collection.h:172
collection_type::const_iterator const_iterator
Definition string_collection.h:50
const_iterator cend() const
Definition string_collection.h:208
void push_back(string &&str)
static ptr_t create(const string &str)
Definition string_collection.h:130
static ptr_t create(collection_type &&vec)
Definition string_collection.h:154
string_collection(string &&str)
const_iterator end() const
Definition string_collection.h:198
string_collection(collection_type &&vec)
string_collection & operator=(string_collection &&coll)=default
std::vector< string > collection_type
Definition string_collection.h:48
bool empty() const
Definition string_collection.h:213
static ptr_t create(string &&str)
Definition string_collection.h:139
char *const * c_arr() const
Definition string_collection.h:250
Definition async_client.h:60
string_collection::const_ptr_t const_string_collection_ptr
Definition string_collection.h:259
string_collection::ptr_t string_collection_ptr
Definition string_collection.h:256