CString.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * CString.h
8  *
9  * @author: 2020 - Mikee47 <mike@sillyhouse.net>
10  *
11  ****/
12 
13 #pragma once
14 
15 #include <WString.h>
16 #include <memory>
17 
25 class CString : public std::unique_ptr<char[]>
26 {
27 public:
28  CString() = default;
29 
30  CString(const CString& src) = default;
31 
32  CString(const String& src)
33  {
34  assign(src);
35  }
36 
37  void assign(const String& src)
38  {
39  if(src) {
40  assign(src.c_str(), src.length());
41  } else {
42  reset();
43  }
44  }
45 
46  void assign(const char* src)
47  {
48  assign(src, src ? strlen(src) : 0);
49  }
50 
51  void assign(const char* src, size_t len)
52  {
53  if(src == nullptr || len == 0) {
54  reset();
55  } else {
56  ++len;
57  reset(new char[len]);
58  memcpy(get(), src, len);
59  }
60  }
61 
62  CString& operator=(const String& src)
63  {
64  assign(src);
65  return *this;
66  }
67 
68  CString& operator=(const char* src)
69  {
70  assign(src);
71  return *this;
72  }
73 
74  char* begin()
75  {
76  return get();
77  }
78 
79  const char* c_str() const
80  {
81  return get() ?: "";
82  }
83 
84  bool operator==(const CString& other) const
85  {
86  return strcmp(c_str(), other.c_str()) == 0;
87  }
88 
89  bool operator==(const String& other) const
90  {
91  return strcmp(c_str(), other.c_str()) == 0;
92  }
93 
94  size_t length() const
95  {
96  auto p = get();
97  return p ? strlen(p) : 0;
98  }
99 
100  explicit operator String() const
101  {
102  return get();
103  }
104 };
char * begin()
Definition: CString.h:74
void assign(const char *src, size_t len)
Definition: CString.h:51
const char * c_str() const
Get a constant (un-modifiable) pointer to String content.
Definition: WString.h:641
The String class.
Definition: WString.h:136
bool operator==(const CString &other) const
Definition: CString.h:84
void assign(const String &src)
Definition: CString.h:37
CString()=default
bool operator==(const String &other) const
Definition: CString.h:89
Class to manage a NUL-terminated C-style string When storing persistent strings in RAM the regular St...
Definition: CString.h:25
size_t length(void) const
Obtain the String length in characters, excluding NUL terminator.
Definition: WString.h:237
CString(const String &src)
Definition: CString.h:32
const char * c_str() const
Definition: CString.h:79
void assign(const char *src)
Definition: CString.h:46
size_t length() const
Definition: CString.h:94
CString & operator=(const String &src)
Definition: CString.h:62
CString & operator=(const char *src)
Definition: CString.h:68