24 #ifndef __ARDUINO_STRINGS__
25 #define __ARDUINO_STRINGS__
31 #include "avr/pgmspace.h"
33 #include "deprecated-avr-comp/avr/pgmspace.h"
44 class __FlashStringHelper;
45 #define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))
49 class StringSumHelper;
54 friend class StringSumHelper;
58 typedef void (String::*StringIfHelperType)()
const;
59 void StringIfHelper()
const {}
61 static size_t const FLT_MAX_DECIMAL_PLACES = 10;
62 static size_t const DBL_MAX_DECIMAL_PLACES = FLT_MAX_DECIMAL_PLACES;
70 String(
const char *cstr =
"");
71 String(
const String &str);
72 String(
const __FlashStringHelper *str);
73 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
74 String(String &&rval);
75 String(StringSumHelper &&rval);
77 explicit String(
char c);
78 explicit String(
unsigned char,
unsigned char base=10);
79 explicit String(
int,
unsigned char base=10);
80 explicit String(
unsigned int,
unsigned char base=10);
81 explicit String(
long,
unsigned char base=10);
82 explicit String(
unsigned long,
unsigned char base=10);
83 explicit String(
float,
unsigned char decimalPlaces=2);
84 explicit String(
double,
unsigned char decimalPlaces=2);
91 unsigned char reserve(
unsigned int size);
92 inline unsigned int length(
void)
const {
return len;}
97 String & operator = (
const String &rhs);
98 String & operator = (
const char *cstr);
99 String & operator = (
const __FlashStringHelper *str);
100 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
101 String & operator = (String &&rval);
102 String & operator = (StringSumHelper &&rval);
110 unsigned char concat(
const String &str);
111 unsigned char concat(
const char *cstr);
112 unsigned char concat(
char c);
113 unsigned char concat(
unsigned char num);
114 unsigned char concat(
int num);
115 unsigned char concat(
unsigned int num);
116 unsigned char concat(
long num);
117 unsigned char concat(
unsigned long num);
118 unsigned char concat(
float num);
119 unsigned char concat(
double num);
120 unsigned char concat(
const __FlashStringHelper * str);
124 String & operator += (
const String &rhs) {concat(rhs);
return (*
this);}
125 String & operator += (
const char *cstr) {concat(cstr);
return (*
this);}
126 String & operator += (
char c) {concat(c);
return (*
this);}
127 String & operator += (
unsigned char num) {concat(num);
return (*
this);}
128 String & operator += (
int num) {concat(num);
return (*
this);}
129 String & operator += (
unsigned int num) {concat(num);
return (*
this);}
130 String & operator += (
long num) {concat(num);
return (*
this);}
131 String & operator += (
unsigned long num) {concat(num);
return (*
this);}
132 String & operator += (
float num) {concat(num);
return (*
this);}
133 String & operator += (
double num) {concat(num);
return (*
this);}
134 String & operator += (
const __FlashStringHelper *str){concat(str);
return (*
this);}
136 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
const String &rhs);
137 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
const char *cstr);
138 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
char c);
139 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
unsigned char num);
140 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
int num);
141 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
unsigned int num);
142 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
long num);
143 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
unsigned long num);
144 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
float num);
145 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
double num);
146 friend StringSumHelper & operator + (
const StringSumHelper &lhs,
const __FlashStringHelper *rhs);
149 operator StringIfHelperType()
const {
return buffer ? &String::StringIfHelper : 0; }
150 int compareTo(
const String &s)
const;
151 int compareTo(
const char *cstr)
const;
152 unsigned char equals(
const String &s)
const;
153 unsigned char equals(
const char *cstr)
const;
155 friend unsigned char operator == (
const String &a,
const String &b) {
return a.equals(b); }
156 friend unsigned char operator == (
const String &a,
const char *b) {
return a.equals(b); }
157 friend unsigned char operator == (
const char *a,
const String &b) {
return b == a; }
158 friend unsigned char operator < (
const String &a,
const String &b) {
return a.compareTo(b) < 0; }
159 friend unsigned char operator < (
const String &a,
const char *b) {
return a.compareTo(b) < 0; }
160 friend unsigned char operator < (
const char *a,
const String &b) {
return b.compareTo(a) > 0; }
162 friend unsigned char operator != (
const String &a,
const String &b) {
return !(a == b); }
163 friend unsigned char operator != (
const String &a,
const char *b) {
return !(a == b); }
164 friend unsigned char operator != (
const char *a,
const String &b) {
return !(a == b); }
165 friend unsigned char operator > (
const String &a,
const String &b) {
return b < a; }
166 friend unsigned char operator > (
const String &a,
const char *b) {
return b < a; }
167 friend unsigned char operator > (
const char *a,
const String &b) {
return b < a; }
168 friend unsigned char operator <= (
const String &a,
const String &b) {
return !(b < a); }
169 friend unsigned char operator <= (
const String &a,
const char *b) {
return !(b < a); }
170 friend unsigned char operator <= (
const char *a,
const String &b) {
return !(b < a); }
171 friend unsigned char operator >= (
const String &a,
const String &b) {
return !(a < b); }
172 friend unsigned char operator >= (
const String &a,
const char *b) {
return !(a < b); }
173 friend unsigned char operator >= (
const char *a,
const String &b) {
return !(a < b); }
175 unsigned char equalsIgnoreCase(
const String &s)
const;
176 unsigned char startsWith(
const String &prefix)
const;
177 unsigned char startsWith(
const String &prefix,
unsigned int offset)
const;
178 unsigned char endsWith(
const String &suffix)
const;
181 char charAt(
unsigned int index)
const;
182 void setCharAt(
unsigned int index,
char c);
183 char operator [] (
unsigned int index)
const;
184 char& operator [] (
unsigned int index);
185 void getBytes(
unsigned char *buf,
unsigned int bufsize,
unsigned int index=0)
const;
186 void toCharArray(
char *buf,
unsigned int bufsize,
unsigned int index=0)
const
187 { getBytes((
unsigned char *)buf, bufsize, index); }
188 const char* c_str()
const {
return buffer; }
189 char* begin() {
return buffer; }
190 char* end() {
return buffer + length(); }
191 const char* begin()
const {
return c_str(); }
192 const char* end()
const {
return c_str() + length(); }
195 int indexOf(
char ch )
const;
196 int indexOf(
char ch,
unsigned int fromIndex )
const;
197 int indexOf(
const String &str )
const;
198 int indexOf(
const String &str,
unsigned int fromIndex )
const;
199 int lastIndexOf(
char ch )
const;
200 int lastIndexOf(
char ch,
unsigned int fromIndex )
const;
201 int lastIndexOf(
const String &str )
const;
202 int lastIndexOf(
const String &str,
unsigned int fromIndex )
const;
203 String substring(
unsigned int beginIndex )
const {
return substring(beginIndex, len); };
204 String substring(
unsigned int beginIndex,
unsigned int endIndex )
const;
207 void replace(
char find,
char replace);
208 void replace(
const String& find,
const String& replace);
209 void remove(
unsigned int index);
210 void remove(
unsigned int index,
unsigned int count);
211 void toLowerCase(
void);
212 void toUpperCase(
void);
216 long toInt(
void)
const;
217 float toFloat(
void)
const;
218 double toDouble(
void)
const;
222 unsigned int capacity;
226 void invalidate(
void);
227 unsigned char changeBuffer(
unsigned int maxStrLen);
228 unsigned char concat(
const char *cstr,
unsigned int length);
231 String & copy(
const char *cstr,
unsigned int length);
232 String & copy(
const __FlashStringHelper *pstr,
unsigned int length);
233 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
234 void move(String &rhs);
238 class StringSumHelper :
public String
241 StringSumHelper(
const String &s) : String(s) {}
242 StringSumHelper(
const char *p) : String(p) {}
243 StringSumHelper(
char c) : String(c) {}
244 StringSumHelper(
unsigned char num) : String(num) {}
245 StringSumHelper(
int num) : String(num) {}
246 StringSumHelper(
unsigned int num) : String(num) {}
247 StringSumHelper(
long num) : String(num) {}
248 StringSumHelper(
unsigned long num) : String(num) {}
249 StringSumHelper(
float num) : String(num) {}
250 StringSumHelper(
double num) : String(num) {}