31
31
#include < ctype.h>
32
32
33
33
34
- // A pure abstract class forward used as a means to proide a unique pointer type
35
- // but really is never defined.
34
+ // an abstract class used as a means to proide a unique pointer type
35
+ // but really has no body
36
36
class __FlashStringHelper ;
37
- #define FPSTR (pstr_pointer ) (pstr_pointer)
38
- #define F (string_literal ) (string_literal)
37
+ #define FPSTR (pstr_pointer ) (reinterpret_cast < const __FlashStringHelper *>( pstr_pointer) )
38
+ #define F (string_literal ) (FPSTR(PSTR( string_literal)) )
39
39
40
40
// An inherited class for holding the result of a concatenation. These
41
41
// result objects are assumed to be writable by subsequent concatenations.
@@ -59,10 +59,10 @@ class String {
59
59
String (const char *cstr = " " );
60
60
String (const char *cstr, unsigned int length);
61
61
#ifdef __GXX_EXPERIMENTAL_CXX0X__
62
- String (const uint8_t *cstr, unsigned int length) : String(reinterpret_cast < const char *>(cstr) , length) {}
62
+ String (const uint8_t *cstr, unsigned int length) : String(( const char *)cstr , length) {}
63
63
#endif
64
64
String (const String &str);
65
- String (const __FlashStringHelper *str) : String( reinterpret_cast < const char *>(str)) {}
65
+ String (const __FlashStringHelper *str);
66
66
#ifdef __GXX_EXPERIMENTAL_CXX0X__
67
67
String (String &&rval);
68
68
String (StringSumHelper &&rval);
@@ -103,7 +103,7 @@ class String {
103
103
// marked as invalid ("if (s)" will be false).
104
104
String & operator =(const String &rhs);
105
105
String & operator =(const char *cstr);
106
- String & operator = (const __FlashStringHelper *str) { return * this = reinterpret_cast < const char *>(str);}
106
+ String & operator = (const __FlashStringHelper *str);
107
107
#ifdef __GXX_EXPERIMENTAL_CXX0X__
108
108
String & operator =(String &&rval);
109
109
String & operator =(StringSumHelper &&rval);
@@ -117,7 +117,7 @@ class String {
117
117
bool concat (const String &str);
118
118
bool concat (const char *cstr);
119
119
bool concat (const char *cstr, unsigned int length);
120
- bool concat (const uint8_t *cstr, unsigned int length) {return concat (reinterpret_cast < const char *>(cstr) , length);}
120
+ bool concat (const uint8_t *cstr, unsigned int length) {return concat (( const char *)cstr , length);}
121
121
bool concat (char c);
122
122
bool concat (unsigned char c);
123
123
bool concat (int num);
@@ -128,7 +128,7 @@ class String {
128
128
bool concat (double num);
129
129
bool concat (long long num);
130
130
bool concat (unsigned long long num);
131
- bool concat (const __FlashStringHelper * str) { return concat ( reinterpret_cast < const char *>(str));}
131
+ bool concat (const __FlashStringHelper * str);
132
132
133
133
// if there's not enough memory for the concatenated value, the string
134
134
// will be left unchanged (but this isn't signalled in any way)
@@ -180,7 +180,10 @@ class String {
180
180
concat (num);
181
181
return (*this );
182
182
}
183
- String & operator += (const __FlashStringHelper *str) {return *this += reinterpret_cast <const char *>(str);}
183
+ String & operator += (const __FlashStringHelper *str){
184
+ concat (str);
185
+ return (*this );
186
+ }
184
187
185
188
friend StringSumHelper & operator +(const StringSumHelper &lhs, const String &rhs);
186
189
friend StringSumHelper & operator +(const StringSumHelper &lhs, const char *cstr);
@@ -192,6 +195,7 @@ class String {
192
195
friend StringSumHelper & operator +(const StringSumHelper &lhs, unsigned long num);
193
196
friend StringSumHelper & operator +(const StringSumHelper &lhs, float num);
194
197
friend StringSumHelper & operator +(const StringSumHelper &lhs, double num);
198
+ friend StringSumHelper & operator +(const StringSumHelper &lhs, const __FlashStringHelper *rhs);
195
199
friend StringSumHelper & operator +(const StringSumHelper &lhs, long long num);
196
200
friend StringSumHelper & operator +(const StringSumHelper &lhs, unsigned long long num);
197
201
@@ -225,15 +229,15 @@ class String {
225
229
return this ->startsWith (String (prefix));
226
230
}
227
231
bool startsWith (const __FlashStringHelper *prefix) const {
228
- return this ->startsWith (reinterpret_cast < const char *> (prefix));
232
+ return this ->startsWith (String (prefix));
229
233
}
230
234
bool startsWith (const String &prefix, unsigned int offset) const ;
231
235
bool endsWith (const String &suffix) const ;
232
236
bool endsWith (const char *suffix) const {
233
237
return this ->endsWith (String (suffix));
234
238
}
235
239
bool endsWith (const __FlashStringHelper * suffix) const {
236
- return this ->endsWith (reinterpret_cast < const char *> (suffix));
240
+ return this ->endsWith (String (suffix));
237
241
}
238
242
239
243
// character access
@@ -272,16 +276,16 @@ class String {
272
276
this ->replace (String (find), replace);
273
277
}
274
278
void replace (const __FlashStringHelper *find, const String &replace) {
275
- this ->replace (reinterpret_cast < const char *> (find), replace);
279
+ this ->replace (String (find), replace);
276
280
}
277
281
void replace (const char *find, const char *replace) {
278
282
this ->replace (String (find), String (replace));
279
283
}
280
284
void replace (const __FlashStringHelper *find, const char *replace) {
281
- this ->replace (reinterpret_cast < const char *> (find), String (replace));
285
+ this ->replace (String (find), String (replace));
282
286
}
283
287
void replace (const __FlashStringHelper *find, const __FlashStringHelper *replace) {
284
- this ->replace (reinterpret_cast < const char *> (find), reinterpret_cast < const char *> (replace));
288
+ this ->replace (String (find), String (replace));
285
289
}
286
290
void remove (unsigned int index);
287
291
void remove (unsigned int index, unsigned int count);
@@ -336,7 +340,7 @@ class String {
336
340
inline void setCapacity (int cap) { if (!isSSO ()) ptr.cap = cap; }
337
341
inline void setBuffer (char *buff) { if (!isSSO ()) ptr.buff = buff; }
338
342
// Buffer accessor functions
339
- inline const char *buffer () const { return reinterpret_cast < const char *> (isSSO () ? sso.buff : ptr.buff ); }
343
+ inline const char *buffer () const { return ( const char *) (isSSO () ? sso.buff : ptr.buff ); }
340
344
inline char *wbuffer () const { return isSSO () ? const_cast <char *>(sso.buff ) : ptr.buff ; } // Writable version of buffer
341
345
342
346
protected:
@@ -346,9 +350,7 @@ class String {
346
350
347
351
// copy and move
348
352
String & copy (const char *cstr, unsigned int length);
349
- String & copy (const __FlashStringHelper *pstr, unsigned int length) {
350
- return copy (reinterpret_cast <const char *>(pstr), length);
351
- }
353
+ String & copy (const __FlashStringHelper *pstr, unsigned int length);
352
354
#ifdef __GXX_EXPERIMENTAL_CXX0X__
353
355
void move (String &rhs);
354
356
#endif
@@ -393,10 +395,6 @@ class StringSumHelper: public String {
393
395
String (num) {
394
396
}
395
397
};
396
-
397
- inline StringSumHelper & operator +(const StringSumHelper &lhs, const __FlashStringHelper *rhs) {
398
- return lhs + reinterpret_cast <const char *>(rhs);
399
- }
400
398
401
399
extern const String emptyString;
402
400
0 commit comments