RUI3 (RAK Unified Interface 3) - RAK4631
WString.h
Go to the documentation of this file.
1 #ifndef __A_STRING_H__
2 #define __A_STRING_H__
3 
4 #include <cstdlib>
5 #include <stdlib.h>
6 #include <string.h>
7 #include <ctype.h>
8 #include <wchar.h>
9 #include <cstdio>
10 
11 #include "pgmspace.h"
12 
13 #define BUFSIZE (sizeof(long) * 8 + 1)
14 #define strcpy_P(dest, src) strcpy((dest), (src))
15 #define strncpy_P(dest, src, size) strncpy((dest), (src), (size))
16 #define strstr_P(a, b) strstr((a), (b))
17 #define strlen_P(a) strlen((a))
18 #define sprintf_P(s, f, ...) sprintf((s), (f), __VA_ARGS__)
19 
20 class StringSumHelper;
21 
22 class String
23 {
24  typedef void (String::*StringIfHelperType)() const;
25  void StringIfHelper() const {}
26 
27  public:
28 
29 
30  String(const char *cstr = "");
31  String(const String &str);
32  String(const __FlashStringHelper *str);
33  explicit String(char c);
34  explicit String(unsigned char, unsigned char base=10);
35  explicit String(int, unsigned char base=10);
36  explicit String(unsigned int, unsigned char base=10);
37  explicit String(long, unsigned char base=10);
38  explicit String(unsigned long, unsigned char base=10);
39  explicit String(float, unsigned char decimalPlaces=2);
40  explicit String(double, unsigned char decimalPlaces=2);
41  ~String(void);
42 
43  unsigned char reserve(unsigned int size);
44  inline unsigned int length(void) const {return len;}
45 
46  String & operator = (const String &rhs);
47  String & operator = (const char *cstr);
48  String & operator = (const __FlashStringHelper *str);
49 
50  unsigned char concat(const String &str);
51  unsigned char concat(const char *cstr);
52  unsigned char concat(char c);
53  unsigned char concat(unsigned char c);
54  unsigned char concat(int num);
55  unsigned char concat(unsigned int num);
56  unsigned char concat(long num);
57  unsigned char concat(unsigned long num);
58  unsigned char concat(float num);
59  unsigned char concat(double num);
60  unsigned char concat(const __FlashStringHelper * str);
61 
62  String & operator += (const String &rhs) {concat(rhs); return (*this);}
63  String & operator += (const char *cstr) {concat(cstr); return (*this);}
64  String & operator += (char c) {concat(c); return (*this);}
65  String & operator += (unsigned char num) {concat(num); return (*this);}
66  String & operator += (int num) {concat(num); return (*this);}
67  String & operator += (unsigned int num) {concat(num); return (*this);}
68  String & operator += (long num) {concat(num); return (*this);}
69  String & operator += (unsigned long num) {concat(num); return (*this);}
70  String & operator += (float num) {concat(num); return (*this);}
71  String & operator += (double num) {concat(num); return (*this);}
72  String & operator += (const __FlashStringHelper *str){concat(str); return (*this);}
73 
74  friend StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs);
75  friend StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr);
76  friend StringSumHelper & operator + (const StringSumHelper &lhs, char c);
77  friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num);
78  friend StringSumHelper & operator + (const StringSumHelper &lhs, int num);
79  friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num);
80  friend StringSumHelper & operator + (const StringSumHelper &lhs, long num);
81  friend StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num);
82  friend StringSumHelper & operator + (const StringSumHelper &lhs, float num);
83  friend StringSumHelper & operator + (const StringSumHelper &lhs, double num);
84  friend StringSumHelper & operator + (const StringSumHelper &lhs, const __FlashStringHelper *rhs);
85 
86  operator StringIfHelperType() const { return buffer ? &String::StringIfHelper : 0; }
87  int compareTo(const String &s) const;
88  unsigned char equals(const String &s) const;
89  unsigned char equals(const char *cstr) const;
90  unsigned char operator == (const String &rhs) const {return equals(rhs);}
91  unsigned char operator == (const char *cstr) const {return equals(cstr);}
92  unsigned char operator != (const String &rhs) const {return !equals(rhs);}
93  unsigned char operator != (const char *cstr) const {return !equals(cstr);}
94  unsigned char operator < (const String &rhs) const;
95  unsigned char operator > (const String &rhs) const;
96  unsigned char operator <= (const String &rhs) const;
97  unsigned char operator >= (const String &rhs) const;
98  unsigned char equalsIgnoreCase(const String &s) const;
99  unsigned char startsWith( const String &prefix) const;
100  unsigned char startsWith(const String &prefix, unsigned int offset) const;
101  unsigned char endsWith(const String &suffix) const;
102 
103  // character acccess
104  char charAt(unsigned int index) const;
105  void setCharAt(unsigned int index, char c);
106  char operator [] (unsigned int index) const;
107  char& operator [] (unsigned int index);
108  void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const;
109  void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const
110  { getBytes((unsigned char *)buf, bufsize, index); }
111  const char* c_str() const { return buffer; }
112  char* begin() { return buffer; }
113  char* end() { return buffer + length(); }
114  const char* begin() const { return c_str(); }
115  const char* end() const { return c_str() + length(); }
116 
117  // search
118  int indexOf( char ch ) const;
119  int indexOf( char ch, unsigned int fromIndex ) const;
120  int indexOf( const String &str ) const;
121  int indexOf( const String &str, unsigned int fromIndex ) const;
122  int lastIndexOf( char ch ) const;
123  int lastIndexOf( char ch, unsigned int fromIndex ) const;
124  int lastIndexOf( const String &str ) const;
125  int lastIndexOf( const String &str, unsigned int fromIndex ) const;
126  String substring( unsigned int beginIndex ) const { return substring(beginIndex, len); };
127  String substring( unsigned int beginIndex, unsigned int endIndex ) const;
128 
129  // modification
130  void replace(char find, char replace);
131  void replace(const String& find, const String& replace);
132  void remove(unsigned int index);
133  void remove(unsigned int index, unsigned int count);
134  void toLowerCase(void);
135  void toUpperCase(void);
136  void trim(void);
137 
138  // parsing/conversion
139  long toInt(void) const;
140  float toFloat(void) const;
141  double toDouble(void) const;
142 
143  protected:
144  char *buffer; // the actual char array
145  unsigned int capacity; // the array length minus one (for the '\0')
146  unsigned int len; // the String length (not counting the '\0')
147  private:
148  void init(void);
149  void invalidate(void);
150  unsigned char changeBuffer(unsigned int maxStrLen);
151  unsigned char concat(const char *cstr, unsigned int length);
152 
153  // copy and move
154  String & copy(const char *cstr, unsigned int length);
155  String & copy(const __FlashStringHelper *pstr, unsigned int length);
156 };
157 
158 class StringSumHelper : public String
159 {
160  public:
161  StringSumHelper(const String &s) : String(s) {}
162  StringSumHelper(const char *p) : String(p) {}
163  StringSumHelper(char c) : String(c) {}
164  StringSumHelper(unsigned char num) : String(num) {}
165  StringSumHelper(int num) : String(num) {}
166  StringSumHelper(unsigned int num) : String(num) {}
167  StringSumHelper(long num) : String(num) {}
168  StringSumHelper(unsigned long num) : String(num) {}
169  StringSumHelper(float num) : String(num) {}
170  StringSumHelper(double num) : String(num) {}
171 };
172 
173 #endif //end WString.h
unsigned int length(void) const
Definition: WString.h:44
const char * end() const
Definition: WString.h:115
char * buffer
Definition: WString.h:144
void toLowerCase(void)
unsigned char concat(const String &str)
void getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index=0) const
unsigned char operator>(const String &rhs) const
const char * begin() const
Definition: WString.h:114
StringSumHelper(double num)
Definition: WString.h:170
int compareTo(const String &s) const
unsigned char operator!=(const String &rhs) const
Definition: WString.h:92
Definition: WString.h:22
StringSumHelper(const String &s)
Definition: WString.h:161
unsigned char operator==(const String &rhs) const
Definition: WString.h:90
unsigned char operator<=(const String &rhs) const
void toCharArray(char *buf, unsigned int bufsize, unsigned int index=0) const
Definition: WString.h:109
StringSumHelper(float num)
Definition: WString.h:169
StringSumHelper(unsigned int num)
Definition: WString.h:166
unsigned char endsWith(const String &suffix) const
friend StringSumHelper & operator+(const StringSumHelper &lhs, const String &rhs)
unsigned int capacity
Definition: WString.h:145
unsigned char startsWith(const String &prefix) const
unsigned char equalsIgnoreCase(const String &s) const
StringSumHelper(const char *p)
Definition: WString.h:162
StringSumHelper(char c)
Definition: WString.h:163
String & operator=(const String &rhs)
char charAt(unsigned int index) const
char * begin()
Definition: WString.h:112
~String(void)
String & operator+=(const String &rhs)
Definition: WString.h:62
StringSumHelper(unsigned char num)
Definition: WString.h:164
Definition: WString.h:158
void setCharAt(unsigned int index, char c)
StringSumHelper(int num)
Definition: WString.h:165
unsigned char operator<(const String &rhs) const
char * end()
Definition: WString.h:113
unsigned char reserve(unsigned int size)
long toInt(void) const
const char * c_str() const
Definition: WString.h:111
char operator[](unsigned int index) const
int lastIndexOf(char ch) const
void toUpperCase(void)
unsigned int len
Definition: WString.h:146
int indexOf(char ch) const
String(const char *cstr="")
float toFloat(void) const
unsigned char equals(const String &s) const
double toDouble(void) const
StringSumHelper(unsigned long num)
Definition: WString.h:168
StringSumHelper(long num)
Definition: WString.h:167
void trim(void)
unsigned char operator>=(const String &rhs) const
String substring(unsigned int beginIndex) const
Definition: WString.h:126
void replace(char find, char replace)