- added Delay to Serial flush method
Fork of ArduinoAPI by
WString.cpp@7:c62910a9e405, 2017-04-24 (annotated)
- Committer:
- JojoS
- Date:
- Mon Apr 24 16:23:14 2017 +0000
- Revision:
- 7:c62910a9e405
- Parent:
- 6:926a4df8c0fb
support routiines for ESP;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
itead | 0:5ebc917ebd09 | 1 | /* |
itead | 0:5ebc917ebd09 | 2 | WString.cpp - String library for Wiring & Arduino |
itead | 0:5ebc917ebd09 | 3 | ...mostly rewritten by Paul Stoffregen... |
itead | 0:5ebc917ebd09 | 4 | Copyright (c) 2009-10 Hernando Barragan. All rights reserved. |
itead | 0:5ebc917ebd09 | 5 | Copyright 2011, Paul Stoffregen, paul@pjrc.com |
itead | 0:5ebc917ebd09 | 6 | |
itead | 0:5ebc917ebd09 | 7 | This library is free software; you can redistribute it and/or |
itead | 0:5ebc917ebd09 | 8 | modify it under the terms of the GNU Lesser General Public |
itead | 0:5ebc917ebd09 | 9 | License as published by the Free Software Foundation; either |
itead | 0:5ebc917ebd09 | 10 | version 2.1 of the License, or (at your option) any later version. |
itead | 0:5ebc917ebd09 | 11 | |
itead | 0:5ebc917ebd09 | 12 | This library is distributed in the hope that it will be useful, |
itead | 0:5ebc917ebd09 | 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
itead | 0:5ebc917ebd09 | 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
itead | 0:5ebc917ebd09 | 15 | Lesser General Public License for more details. |
itead | 0:5ebc917ebd09 | 16 | |
itead | 0:5ebc917ebd09 | 17 | You should have received a copy of the GNU Lesser General Public |
itead | 0:5ebc917ebd09 | 18 | License along with this library; if not, write to the Free Software |
itead | 0:5ebc917ebd09 | 19 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
itead | 0:5ebc917ebd09 | 20 | */ |
itead | 0:5ebc917ebd09 | 21 | |
itead | 0:5ebc917ebd09 | 22 | #include "WString.h" |
itead | 0:5ebc917ebd09 | 23 | |
itead | 0:5ebc917ebd09 | 24 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 25 | /* Constructors */ |
itead | 0:5ebc917ebd09 | 26 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 27 | |
itead | 0:5ebc917ebd09 | 28 | String::String(const char *cstr) |
itead | 0:5ebc917ebd09 | 29 | { |
itead | 0:5ebc917ebd09 | 30 | init(); |
itead | 0:5ebc917ebd09 | 31 | if (cstr) copy(cstr, strlen(cstr)); |
itead | 0:5ebc917ebd09 | 32 | } |
itead | 0:5ebc917ebd09 | 33 | |
itead | 0:5ebc917ebd09 | 34 | String::String(const String &value) |
itead | 0:5ebc917ebd09 | 35 | { |
itead | 0:5ebc917ebd09 | 36 | init(); |
itead | 0:5ebc917ebd09 | 37 | *this = value; |
itead | 0:5ebc917ebd09 | 38 | } |
itead | 0:5ebc917ebd09 | 39 | |
itead | 0:5ebc917ebd09 | 40 | #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
itead | 0:5ebc917ebd09 | 41 | String::String(String &&rval) |
itead | 0:5ebc917ebd09 | 42 | { |
itead | 0:5ebc917ebd09 | 43 | init(); |
itead | 0:5ebc917ebd09 | 44 | move(rval); |
itead | 0:5ebc917ebd09 | 45 | } |
itead | 0:5ebc917ebd09 | 46 | String::String(StringSumHelper &&rval) |
itead | 0:5ebc917ebd09 | 47 | { |
itead | 0:5ebc917ebd09 | 48 | init(); |
itead | 0:5ebc917ebd09 | 49 | move(rval); |
itead | 0:5ebc917ebd09 | 50 | } |
itead | 0:5ebc917ebd09 | 51 | #endif |
itead | 0:5ebc917ebd09 | 52 | |
itead | 0:5ebc917ebd09 | 53 | String::String(char c) |
itead | 0:5ebc917ebd09 | 54 | { |
itead | 0:5ebc917ebd09 | 55 | init(); |
itead | 0:5ebc917ebd09 | 56 | char buf[2]; |
itead | 0:5ebc917ebd09 | 57 | buf[0] = c; |
itead | 0:5ebc917ebd09 | 58 | buf[1] = 0; |
itead | 0:5ebc917ebd09 | 59 | *this = buf; |
itead | 0:5ebc917ebd09 | 60 | } |
itead | 0:5ebc917ebd09 | 61 | |
itead | 0:5ebc917ebd09 | 62 | String::String(unsigned char value, unsigned char base) |
itead | 0:5ebc917ebd09 | 63 | { |
itead | 0:5ebc917ebd09 | 64 | init(); |
itead | 0:5ebc917ebd09 | 65 | char buf[9]; |
itead | 0:5ebc917ebd09 | 66 | utoa(value, buf, base); |
itead | 0:5ebc917ebd09 | 67 | *this = buf; |
itead | 0:5ebc917ebd09 | 68 | } |
itead | 0:5ebc917ebd09 | 69 | |
itead | 0:5ebc917ebd09 | 70 | String::String(int value, unsigned char base) |
itead | 0:5ebc917ebd09 | 71 | { |
itead | 0:5ebc917ebd09 | 72 | init(); |
itead | 0:5ebc917ebd09 | 73 | char buf[18]; |
itead | 0:5ebc917ebd09 | 74 | itoa(value, buf, base); |
itead | 0:5ebc917ebd09 | 75 | *this = buf; |
itead | 0:5ebc917ebd09 | 76 | } |
itead | 0:5ebc917ebd09 | 77 | |
itead | 0:5ebc917ebd09 | 78 | String::String(unsigned int value, unsigned char base) |
itead | 0:5ebc917ebd09 | 79 | { |
itead | 0:5ebc917ebd09 | 80 | init(); |
itead | 0:5ebc917ebd09 | 81 | char buf[17]; |
itead | 0:5ebc917ebd09 | 82 | utoa(value, buf, base); |
itead | 0:5ebc917ebd09 | 83 | *this = buf; |
itead | 0:5ebc917ebd09 | 84 | } |
itead | 0:5ebc917ebd09 | 85 | |
itead | 0:5ebc917ebd09 | 86 | String::String(long value, unsigned char base) |
itead | 0:5ebc917ebd09 | 87 | { |
itead | 0:5ebc917ebd09 | 88 | init(); |
itead | 0:5ebc917ebd09 | 89 | char buf[34]; |
itead | 0:5ebc917ebd09 | 90 | ltoa(value, buf, base); |
itead | 0:5ebc917ebd09 | 91 | *this = buf; |
itead | 0:5ebc917ebd09 | 92 | } |
itead | 0:5ebc917ebd09 | 93 | |
itead | 0:5ebc917ebd09 | 94 | String::String(unsigned long value, unsigned char base) |
itead | 0:5ebc917ebd09 | 95 | { |
itead | 0:5ebc917ebd09 | 96 | init(); |
itead | 0:5ebc917ebd09 | 97 | char buf[33]; |
itead | 0:5ebc917ebd09 | 98 | ultoa(value, buf, base); |
itead | 0:5ebc917ebd09 | 99 | *this = buf; |
itead | 0:5ebc917ebd09 | 100 | } |
itead | 0:5ebc917ebd09 | 101 | |
itead | 0:5ebc917ebd09 | 102 | String::~String() |
itead | 0:5ebc917ebd09 | 103 | { |
itead | 0:5ebc917ebd09 | 104 | free(buffer); |
itead | 0:5ebc917ebd09 | 105 | } |
itead | 0:5ebc917ebd09 | 106 | |
itead | 0:5ebc917ebd09 | 107 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 108 | /* Memory Management */ |
itead | 0:5ebc917ebd09 | 109 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 110 | |
itead | 0:5ebc917ebd09 | 111 | inline void String::init(void) |
itead | 0:5ebc917ebd09 | 112 | { |
itead | 0:5ebc917ebd09 | 113 | buffer = NULL; |
itead | 0:5ebc917ebd09 | 114 | capacity = 0; |
itead | 0:5ebc917ebd09 | 115 | len = 0; |
itead | 0:5ebc917ebd09 | 116 | flags = 0; |
itead | 0:5ebc917ebd09 | 117 | } |
itead | 0:5ebc917ebd09 | 118 | |
itead | 0:5ebc917ebd09 | 119 | void String::invalidate(void) |
itead | 0:5ebc917ebd09 | 120 | { |
itead | 0:5ebc917ebd09 | 121 | if (buffer) free(buffer); |
itead | 0:5ebc917ebd09 | 122 | buffer = NULL; |
itead | 0:5ebc917ebd09 | 123 | capacity = len = 0; |
itead | 0:5ebc917ebd09 | 124 | } |
itead | 0:5ebc917ebd09 | 125 | |
itead | 0:5ebc917ebd09 | 126 | unsigned char String::reserve(unsigned int size) |
itead | 0:5ebc917ebd09 | 127 | { |
itead | 0:5ebc917ebd09 | 128 | if (buffer && capacity >= size) return 1; |
itead | 0:5ebc917ebd09 | 129 | if (changeBuffer(size)) { |
itead | 0:5ebc917ebd09 | 130 | if (len == 0) buffer[0] = 0; |
itead | 0:5ebc917ebd09 | 131 | return 1; |
itead | 0:5ebc917ebd09 | 132 | } |
itead | 0:5ebc917ebd09 | 133 | return 0; |
itead | 0:5ebc917ebd09 | 134 | } |
itead | 0:5ebc917ebd09 | 135 | |
JojoS | 5:8072d40c7f3c | 136 | #define CHUNK_SIZE 16U |
JojoS | 5:8072d40c7f3c | 137 | |
itead | 0:5ebc917ebd09 | 138 | unsigned char String::changeBuffer(unsigned int maxStrLen) |
itead | 0:5ebc917ebd09 | 139 | { |
JojoS | 5:8072d40c7f3c | 140 | // testPin(); |
JojoS | 5:8072d40c7f3c | 141 | |
JojoS | 6:926a4df8c0fb | 142 | maxStrLen = ((maxStrLen / CHUNK_SIZE) + 1) * CHUNK_SIZE; |
itead | 0:5ebc917ebd09 | 143 | char *newbuffer = (char *)realloc(buffer, maxStrLen + 1); |
itead | 0:5ebc917ebd09 | 144 | if (newbuffer) { |
itead | 0:5ebc917ebd09 | 145 | buffer = newbuffer; |
itead | 0:5ebc917ebd09 | 146 | capacity = maxStrLen; |
itead | 0:5ebc917ebd09 | 147 | return 1; |
itead | 0:5ebc917ebd09 | 148 | } |
itead | 0:5ebc917ebd09 | 149 | return 0; |
itead | 0:5ebc917ebd09 | 150 | } |
itead | 0:5ebc917ebd09 | 151 | |
itead | 0:5ebc917ebd09 | 152 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 153 | /* Copy and Move */ |
itead | 0:5ebc917ebd09 | 154 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 155 | |
itead | 0:5ebc917ebd09 | 156 | String & String::copy(const char *cstr, unsigned int length) |
itead | 0:5ebc917ebd09 | 157 | { |
itead | 0:5ebc917ebd09 | 158 | if (!reserve(length)) { |
itead | 0:5ebc917ebd09 | 159 | invalidate(); |
itead | 0:5ebc917ebd09 | 160 | return *this; |
itead | 0:5ebc917ebd09 | 161 | } |
itead | 0:5ebc917ebd09 | 162 | len = length; |
itead | 0:5ebc917ebd09 | 163 | strcpy(buffer, cstr); |
itead | 0:5ebc917ebd09 | 164 | return *this; |
itead | 0:5ebc917ebd09 | 165 | } |
itead | 0:5ebc917ebd09 | 166 | |
itead | 0:5ebc917ebd09 | 167 | #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
itead | 0:5ebc917ebd09 | 168 | void String::move(String &rhs) |
itead | 0:5ebc917ebd09 | 169 | { |
itead | 0:5ebc917ebd09 | 170 | if (buffer) { |
itead | 0:5ebc917ebd09 | 171 | if (capacity >= rhs.len) { |
itead | 0:5ebc917ebd09 | 172 | strcpy(buffer, rhs.buffer); |
itead | 0:5ebc917ebd09 | 173 | len = rhs.len; |
itead | 0:5ebc917ebd09 | 174 | rhs.len = 0; |
itead | 0:5ebc917ebd09 | 175 | return; |
itead | 0:5ebc917ebd09 | 176 | } else { |
itead | 0:5ebc917ebd09 | 177 | free(buffer); |
itead | 0:5ebc917ebd09 | 178 | } |
itead | 0:5ebc917ebd09 | 179 | } |
itead | 0:5ebc917ebd09 | 180 | buffer = rhs.buffer; |
itead | 0:5ebc917ebd09 | 181 | capacity = rhs.capacity; |
itead | 0:5ebc917ebd09 | 182 | len = rhs.len; |
itead | 0:5ebc917ebd09 | 183 | rhs.buffer = NULL; |
itead | 0:5ebc917ebd09 | 184 | rhs.capacity = 0; |
itead | 0:5ebc917ebd09 | 185 | rhs.len = 0; |
itead | 0:5ebc917ebd09 | 186 | } |
itead | 0:5ebc917ebd09 | 187 | #endif |
itead | 0:5ebc917ebd09 | 188 | |
itead | 0:5ebc917ebd09 | 189 | String & String::operator = (const String &rhs) |
itead | 0:5ebc917ebd09 | 190 | { |
itead | 0:5ebc917ebd09 | 191 | if (this == &rhs) return *this; |
itead | 0:5ebc917ebd09 | 192 | |
itead | 0:5ebc917ebd09 | 193 | if (rhs.buffer) copy(rhs.buffer, rhs.len); |
itead | 0:5ebc917ebd09 | 194 | else invalidate(); |
itead | 0:5ebc917ebd09 | 195 | |
itead | 0:5ebc917ebd09 | 196 | return *this; |
itead | 0:5ebc917ebd09 | 197 | } |
itead | 0:5ebc917ebd09 | 198 | |
itead | 0:5ebc917ebd09 | 199 | #ifdef __GXX_EXPERIMENTAL_CXX0X__ |
itead | 0:5ebc917ebd09 | 200 | String & String::operator = (String &&rval) |
itead | 0:5ebc917ebd09 | 201 | { |
itead | 0:5ebc917ebd09 | 202 | if (this != &rval) move(rval); |
itead | 0:5ebc917ebd09 | 203 | return *this; |
itead | 0:5ebc917ebd09 | 204 | } |
itead | 0:5ebc917ebd09 | 205 | |
itead | 0:5ebc917ebd09 | 206 | String & String::operator = (StringSumHelper &&rval) |
itead | 0:5ebc917ebd09 | 207 | { |
itead | 0:5ebc917ebd09 | 208 | if (this != &rval) move(rval); |
itead | 0:5ebc917ebd09 | 209 | return *this; |
itead | 0:5ebc917ebd09 | 210 | } |
itead | 0:5ebc917ebd09 | 211 | #endif |
itead | 0:5ebc917ebd09 | 212 | |
itead | 0:5ebc917ebd09 | 213 | String & String::operator = (const char *cstr) |
itead | 0:5ebc917ebd09 | 214 | { |
itead | 0:5ebc917ebd09 | 215 | if (cstr) copy(cstr, strlen(cstr)); |
itead | 0:5ebc917ebd09 | 216 | else invalidate(); |
itead | 0:5ebc917ebd09 | 217 | |
itead | 0:5ebc917ebd09 | 218 | return *this; |
itead | 0:5ebc917ebd09 | 219 | } |
itead | 0:5ebc917ebd09 | 220 | |
itead | 0:5ebc917ebd09 | 221 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 222 | /* concat */ |
itead | 0:5ebc917ebd09 | 223 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 224 | |
itead | 0:5ebc917ebd09 | 225 | unsigned char String::concat(const String &s) |
itead | 0:5ebc917ebd09 | 226 | { |
itead | 0:5ebc917ebd09 | 227 | return concat(s.buffer, s.len); |
itead | 0:5ebc917ebd09 | 228 | } |
itead | 0:5ebc917ebd09 | 229 | |
itead | 0:5ebc917ebd09 | 230 | unsigned char String::concat(const char *cstr, unsigned int length) |
itead | 0:5ebc917ebd09 | 231 | { |
itead | 0:5ebc917ebd09 | 232 | unsigned int newlen = len + length; |
itead | 0:5ebc917ebd09 | 233 | if (!cstr) return 0; |
itead | 0:5ebc917ebd09 | 234 | if (length == 0) return 1; |
itead | 0:5ebc917ebd09 | 235 | if (!reserve(newlen)) return 0; |
itead | 0:5ebc917ebd09 | 236 | strcpy(buffer + len, cstr); |
itead | 0:5ebc917ebd09 | 237 | len = newlen; |
itead | 0:5ebc917ebd09 | 238 | return 1; |
itead | 0:5ebc917ebd09 | 239 | } |
itead | 0:5ebc917ebd09 | 240 | |
itead | 0:5ebc917ebd09 | 241 | unsigned char String::concat(const char *cstr) |
itead | 0:5ebc917ebd09 | 242 | { |
itead | 0:5ebc917ebd09 | 243 | if (!cstr) return 0; |
itead | 0:5ebc917ebd09 | 244 | return concat(cstr, strlen(cstr)); |
itead | 0:5ebc917ebd09 | 245 | } |
itead | 0:5ebc917ebd09 | 246 | |
itead | 0:5ebc917ebd09 | 247 | unsigned char String::concat(char c) |
itead | 0:5ebc917ebd09 | 248 | { |
itead | 0:5ebc917ebd09 | 249 | char buf[2]; |
itead | 0:5ebc917ebd09 | 250 | buf[0] = c; |
itead | 0:5ebc917ebd09 | 251 | buf[1] = 0; |
itead | 0:5ebc917ebd09 | 252 | return concat(buf, 1); |
itead | 0:5ebc917ebd09 | 253 | } |
itead | 0:5ebc917ebd09 | 254 | |
itead | 0:5ebc917ebd09 | 255 | unsigned char String::concat(unsigned char num) |
itead | 0:5ebc917ebd09 | 256 | { |
itead | 0:5ebc917ebd09 | 257 | char buf[4]; |
itead | 0:5ebc917ebd09 | 258 | itoa(num, buf, 10); |
itead | 0:5ebc917ebd09 | 259 | return concat(buf, strlen(buf)); |
itead | 0:5ebc917ebd09 | 260 | } |
itead | 0:5ebc917ebd09 | 261 | |
itead | 0:5ebc917ebd09 | 262 | unsigned char String::concat(int num) |
itead | 0:5ebc917ebd09 | 263 | { |
itead | 0:5ebc917ebd09 | 264 | char buf[7]; |
itead | 0:5ebc917ebd09 | 265 | itoa(num, buf, 10); |
itead | 0:5ebc917ebd09 | 266 | return concat(buf, strlen(buf)); |
itead | 0:5ebc917ebd09 | 267 | } |
itead | 0:5ebc917ebd09 | 268 | |
itead | 0:5ebc917ebd09 | 269 | unsigned char String::concat(unsigned int num) |
itead | 0:5ebc917ebd09 | 270 | { |
itead | 0:5ebc917ebd09 | 271 | char buf[6]; |
itead | 0:5ebc917ebd09 | 272 | utoa(num, buf, 10); |
itead | 0:5ebc917ebd09 | 273 | return concat(buf, strlen(buf)); |
itead | 0:5ebc917ebd09 | 274 | } |
itead | 0:5ebc917ebd09 | 275 | |
itead | 0:5ebc917ebd09 | 276 | unsigned char String::concat(long num) |
itead | 0:5ebc917ebd09 | 277 | { |
itead | 0:5ebc917ebd09 | 278 | char buf[12]; |
itead | 0:5ebc917ebd09 | 279 | ltoa(num, buf, 10); |
itead | 0:5ebc917ebd09 | 280 | return concat(buf, strlen(buf)); |
itead | 0:5ebc917ebd09 | 281 | } |
itead | 0:5ebc917ebd09 | 282 | |
itead | 0:5ebc917ebd09 | 283 | unsigned char String::concat(unsigned long num) |
itead | 0:5ebc917ebd09 | 284 | { |
itead | 0:5ebc917ebd09 | 285 | char buf[11]; |
itead | 0:5ebc917ebd09 | 286 | ultoa(num, buf, 10); |
itead | 0:5ebc917ebd09 | 287 | return concat(buf, strlen(buf)); |
itead | 0:5ebc917ebd09 | 288 | } |
itead | 0:5ebc917ebd09 | 289 | |
itead | 0:5ebc917ebd09 | 290 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 291 | /* Concatenate */ |
itead | 0:5ebc917ebd09 | 292 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 293 | |
itead | 0:5ebc917ebd09 | 294 | StringSumHelper & operator + (const StringSumHelper &lhs, const String &rhs) |
itead | 0:5ebc917ebd09 | 295 | { |
itead | 0:5ebc917ebd09 | 296 | StringSumHelper &a = const_cast<StringSumHelper&>(lhs); |
itead | 0:5ebc917ebd09 | 297 | if (!a.concat(rhs.buffer, rhs.len)) a.invalidate(); |
itead | 0:5ebc917ebd09 | 298 | return a; |
itead | 0:5ebc917ebd09 | 299 | } |
itead | 0:5ebc917ebd09 | 300 | |
itead | 0:5ebc917ebd09 | 301 | StringSumHelper & operator + (const StringSumHelper &lhs, const char *cstr) |
itead | 0:5ebc917ebd09 | 302 | { |
itead | 0:5ebc917ebd09 | 303 | StringSumHelper &a = const_cast<StringSumHelper&>(lhs); |
itead | 0:5ebc917ebd09 | 304 | if (!cstr || !a.concat(cstr, strlen(cstr))) a.invalidate(); |
itead | 0:5ebc917ebd09 | 305 | return a; |
itead | 0:5ebc917ebd09 | 306 | } |
itead | 0:5ebc917ebd09 | 307 | |
itead | 0:5ebc917ebd09 | 308 | StringSumHelper & operator + (const StringSumHelper &lhs, char c) |
itead | 0:5ebc917ebd09 | 309 | { |
itead | 0:5ebc917ebd09 | 310 | StringSumHelper &a = const_cast<StringSumHelper&>(lhs); |
itead | 0:5ebc917ebd09 | 311 | if (!a.concat(c)) a.invalidate(); |
itead | 0:5ebc917ebd09 | 312 | return a; |
itead | 0:5ebc917ebd09 | 313 | } |
itead | 0:5ebc917ebd09 | 314 | |
itead | 0:5ebc917ebd09 | 315 | StringSumHelper & operator + (const StringSumHelper &lhs, unsigned char num) |
itead | 0:5ebc917ebd09 | 316 | { |
itead | 0:5ebc917ebd09 | 317 | StringSumHelper &a = const_cast<StringSumHelper&>(lhs); |
itead | 0:5ebc917ebd09 | 318 | if (!a.concat(num)) a.invalidate(); |
itead | 0:5ebc917ebd09 | 319 | return a; |
itead | 0:5ebc917ebd09 | 320 | } |
itead | 0:5ebc917ebd09 | 321 | |
itead | 0:5ebc917ebd09 | 322 | StringSumHelper & operator + (const StringSumHelper &lhs, int num) |
itead | 0:5ebc917ebd09 | 323 | { |
itead | 0:5ebc917ebd09 | 324 | StringSumHelper &a = const_cast<StringSumHelper&>(lhs); |
itead | 0:5ebc917ebd09 | 325 | if (!a.concat(num)) a.invalidate(); |
itead | 0:5ebc917ebd09 | 326 | return a; |
itead | 0:5ebc917ebd09 | 327 | } |
itead | 0:5ebc917ebd09 | 328 | |
itead | 0:5ebc917ebd09 | 329 | StringSumHelper & operator + (const StringSumHelper &lhs, unsigned int num) |
itead | 0:5ebc917ebd09 | 330 | { |
itead | 0:5ebc917ebd09 | 331 | StringSumHelper &a = const_cast<StringSumHelper&>(lhs); |
itead | 0:5ebc917ebd09 | 332 | if (!a.concat(num)) a.invalidate(); |
itead | 0:5ebc917ebd09 | 333 | return a; |
itead | 0:5ebc917ebd09 | 334 | } |
itead | 0:5ebc917ebd09 | 335 | |
itead | 0:5ebc917ebd09 | 336 | StringSumHelper & operator + (const StringSumHelper &lhs, long num) |
itead | 0:5ebc917ebd09 | 337 | { |
itead | 0:5ebc917ebd09 | 338 | StringSumHelper &a = const_cast<StringSumHelper&>(lhs); |
itead | 0:5ebc917ebd09 | 339 | if (!a.concat(num)) a.invalidate(); |
itead | 0:5ebc917ebd09 | 340 | return a; |
itead | 0:5ebc917ebd09 | 341 | } |
itead | 0:5ebc917ebd09 | 342 | |
itead | 0:5ebc917ebd09 | 343 | StringSumHelper & operator + (const StringSumHelper &lhs, unsigned long num) |
itead | 0:5ebc917ebd09 | 344 | { |
itead | 0:5ebc917ebd09 | 345 | StringSumHelper &a = const_cast<StringSumHelper&>(lhs); |
itead | 0:5ebc917ebd09 | 346 | if (!a.concat(num)) a.invalidate(); |
itead | 0:5ebc917ebd09 | 347 | return a; |
itead | 0:5ebc917ebd09 | 348 | } |
itead | 0:5ebc917ebd09 | 349 | |
itead | 0:5ebc917ebd09 | 350 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 351 | /* Comparison */ |
itead | 0:5ebc917ebd09 | 352 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 353 | |
itead | 0:5ebc917ebd09 | 354 | int String::compareTo(const String &s) const |
itead | 0:5ebc917ebd09 | 355 | { |
itead | 0:5ebc917ebd09 | 356 | if (!buffer || !s.buffer) { |
itead | 0:5ebc917ebd09 | 357 | if (s.buffer && s.len > 0) return 0 - *(unsigned char *)s.buffer; |
itead | 0:5ebc917ebd09 | 358 | if (buffer && len > 0) return *(unsigned char *)buffer; |
itead | 0:5ebc917ebd09 | 359 | return 0; |
itead | 0:5ebc917ebd09 | 360 | } |
itead | 0:5ebc917ebd09 | 361 | return strcmp(buffer, s.buffer); |
itead | 0:5ebc917ebd09 | 362 | } |
itead | 0:5ebc917ebd09 | 363 | |
itead | 0:5ebc917ebd09 | 364 | unsigned char String::equals(const String &s2) const |
itead | 0:5ebc917ebd09 | 365 | { |
itead | 0:5ebc917ebd09 | 366 | return (len == s2.len && compareTo(s2) == 0); |
itead | 0:5ebc917ebd09 | 367 | } |
itead | 0:5ebc917ebd09 | 368 | |
itead | 0:5ebc917ebd09 | 369 | unsigned char String::equals(const char *cstr) const |
itead | 0:5ebc917ebd09 | 370 | { |
itead | 0:5ebc917ebd09 | 371 | if (len == 0) return (cstr == NULL || *cstr == 0); |
itead | 0:5ebc917ebd09 | 372 | if (cstr == NULL) return buffer[0] == 0; |
itead | 0:5ebc917ebd09 | 373 | return strcmp(buffer, cstr) == 0; |
itead | 0:5ebc917ebd09 | 374 | } |
itead | 0:5ebc917ebd09 | 375 | |
itead | 0:5ebc917ebd09 | 376 | unsigned char String::operator<(const String &rhs) const |
itead | 0:5ebc917ebd09 | 377 | { |
itead | 0:5ebc917ebd09 | 378 | return compareTo(rhs) < 0; |
itead | 0:5ebc917ebd09 | 379 | } |
itead | 0:5ebc917ebd09 | 380 | |
itead | 0:5ebc917ebd09 | 381 | unsigned char String::operator>(const String &rhs) const |
itead | 0:5ebc917ebd09 | 382 | { |
itead | 0:5ebc917ebd09 | 383 | return compareTo(rhs) > 0; |
itead | 0:5ebc917ebd09 | 384 | } |
itead | 0:5ebc917ebd09 | 385 | |
itead | 0:5ebc917ebd09 | 386 | unsigned char String::operator<=(const String &rhs) const |
itead | 0:5ebc917ebd09 | 387 | { |
itead | 0:5ebc917ebd09 | 388 | return compareTo(rhs) <= 0; |
itead | 0:5ebc917ebd09 | 389 | } |
itead | 0:5ebc917ebd09 | 390 | |
itead | 0:5ebc917ebd09 | 391 | unsigned char String::operator>=(const String &rhs) const |
itead | 0:5ebc917ebd09 | 392 | { |
itead | 0:5ebc917ebd09 | 393 | return compareTo(rhs) >= 0; |
itead | 0:5ebc917ebd09 | 394 | } |
itead | 0:5ebc917ebd09 | 395 | |
itead | 0:5ebc917ebd09 | 396 | unsigned char String::equalsIgnoreCase( const String &s2 ) const |
itead | 0:5ebc917ebd09 | 397 | { |
itead | 0:5ebc917ebd09 | 398 | if (this == &s2) return 1; |
itead | 0:5ebc917ebd09 | 399 | if (len != s2.len) return 0; |
itead | 0:5ebc917ebd09 | 400 | if (len == 0) return 1; |
itead | 0:5ebc917ebd09 | 401 | const char *p1 = buffer; |
itead | 0:5ebc917ebd09 | 402 | const char *p2 = s2.buffer; |
itead | 0:5ebc917ebd09 | 403 | while (*p1) { |
itead | 0:5ebc917ebd09 | 404 | if (tolower(*p1++) != tolower(*p2++)) return 0; |
itead | 0:5ebc917ebd09 | 405 | } |
itead | 0:5ebc917ebd09 | 406 | return 1; |
itead | 0:5ebc917ebd09 | 407 | } |
itead | 0:5ebc917ebd09 | 408 | |
itead | 0:5ebc917ebd09 | 409 | unsigned char String::startsWith( const String &s2 ) const |
itead | 0:5ebc917ebd09 | 410 | { |
itead | 0:5ebc917ebd09 | 411 | if (len < s2.len) return 0; |
itead | 0:5ebc917ebd09 | 412 | return startsWith(s2, 0); |
itead | 0:5ebc917ebd09 | 413 | } |
itead | 0:5ebc917ebd09 | 414 | |
itead | 0:5ebc917ebd09 | 415 | unsigned char String::startsWith( const String &s2, unsigned int offset ) const |
itead | 0:5ebc917ebd09 | 416 | { |
itead | 0:5ebc917ebd09 | 417 | if (offset > len - s2.len || !buffer || !s2.buffer) return 0; |
itead | 0:5ebc917ebd09 | 418 | return strncmp( &buffer[offset], s2.buffer, s2.len ) == 0; |
itead | 0:5ebc917ebd09 | 419 | } |
itead | 0:5ebc917ebd09 | 420 | |
itead | 0:5ebc917ebd09 | 421 | unsigned char String::endsWith( const String &s2 ) const |
itead | 0:5ebc917ebd09 | 422 | { |
itead | 0:5ebc917ebd09 | 423 | if ( len < s2.len || !buffer || !s2.buffer) return 0; |
itead | 0:5ebc917ebd09 | 424 | return strcmp(&buffer[len - s2.len], s2.buffer) == 0; |
itead | 0:5ebc917ebd09 | 425 | } |
itead | 0:5ebc917ebd09 | 426 | |
itead | 0:5ebc917ebd09 | 427 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 428 | /* Character Access */ |
itead | 0:5ebc917ebd09 | 429 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 430 | |
itead | 0:5ebc917ebd09 | 431 | char String::charAt(unsigned int loc) const |
itead | 0:5ebc917ebd09 | 432 | { |
itead | 0:5ebc917ebd09 | 433 | return operator[](loc); |
itead | 0:5ebc917ebd09 | 434 | } |
itead | 0:5ebc917ebd09 | 435 | |
itead | 0:5ebc917ebd09 | 436 | void String::setCharAt(unsigned int loc, char c) |
itead | 0:5ebc917ebd09 | 437 | { |
itead | 0:5ebc917ebd09 | 438 | if (loc < len) buffer[loc] = c; |
itead | 0:5ebc917ebd09 | 439 | } |
itead | 0:5ebc917ebd09 | 440 | |
itead | 0:5ebc917ebd09 | 441 | char & String::operator[](unsigned int index) |
itead | 0:5ebc917ebd09 | 442 | { |
itead | 0:5ebc917ebd09 | 443 | static char dummy_writable_char; |
itead | 0:5ebc917ebd09 | 444 | if (index >= len || !buffer) { |
itead | 0:5ebc917ebd09 | 445 | dummy_writable_char = 0; |
itead | 0:5ebc917ebd09 | 446 | return dummy_writable_char; |
itead | 0:5ebc917ebd09 | 447 | } |
itead | 0:5ebc917ebd09 | 448 | return buffer[index]; |
itead | 0:5ebc917ebd09 | 449 | } |
itead | 0:5ebc917ebd09 | 450 | |
itead | 0:5ebc917ebd09 | 451 | char String::operator[]( unsigned int index ) const |
itead | 0:5ebc917ebd09 | 452 | { |
itead | 0:5ebc917ebd09 | 453 | if (index >= len || !buffer) return 0; |
itead | 0:5ebc917ebd09 | 454 | return buffer[index]; |
itead | 0:5ebc917ebd09 | 455 | } |
itead | 0:5ebc917ebd09 | 456 | |
itead | 0:5ebc917ebd09 | 457 | void String::getBytes(unsigned char *buf, unsigned int bufsize, unsigned int index) const |
itead | 0:5ebc917ebd09 | 458 | { |
itead | 0:5ebc917ebd09 | 459 | if (!bufsize || !buf) return; |
itead | 0:5ebc917ebd09 | 460 | if (index >= len) { |
itead | 0:5ebc917ebd09 | 461 | buf[0] = 0; |
itead | 0:5ebc917ebd09 | 462 | return; |
itead | 0:5ebc917ebd09 | 463 | } |
itead | 0:5ebc917ebd09 | 464 | unsigned int n = bufsize - 1; |
itead | 0:5ebc917ebd09 | 465 | if (n > len - index) n = len - index; |
itead | 0:5ebc917ebd09 | 466 | strncpy((char *)buf, buffer + index, n); |
itead | 0:5ebc917ebd09 | 467 | buf[n] = 0; |
itead | 0:5ebc917ebd09 | 468 | } |
itead | 0:5ebc917ebd09 | 469 | |
itead | 0:5ebc917ebd09 | 470 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 471 | /* Search */ |
itead | 0:5ebc917ebd09 | 472 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 473 | |
itead | 0:5ebc917ebd09 | 474 | int String::indexOf(char c) const |
itead | 0:5ebc917ebd09 | 475 | { |
itead | 0:5ebc917ebd09 | 476 | return indexOf(c, 0); |
itead | 0:5ebc917ebd09 | 477 | } |
itead | 0:5ebc917ebd09 | 478 | |
itead | 0:5ebc917ebd09 | 479 | int String::indexOf( char ch, unsigned int fromIndex ) const |
itead | 0:5ebc917ebd09 | 480 | { |
itead | 0:5ebc917ebd09 | 481 | if (fromIndex >= len) return -1; |
itead | 0:5ebc917ebd09 | 482 | const char* temp = strchr(buffer + fromIndex, ch); |
itead | 0:5ebc917ebd09 | 483 | if (temp == NULL) return -1; |
itead | 0:5ebc917ebd09 | 484 | return temp - buffer; |
itead | 0:5ebc917ebd09 | 485 | } |
itead | 0:5ebc917ebd09 | 486 | |
itead | 0:5ebc917ebd09 | 487 | int String::indexOf(const String &s2) const |
itead | 0:5ebc917ebd09 | 488 | { |
itead | 0:5ebc917ebd09 | 489 | return indexOf(s2, 0); |
itead | 0:5ebc917ebd09 | 490 | } |
itead | 0:5ebc917ebd09 | 491 | |
itead | 0:5ebc917ebd09 | 492 | int String::indexOf(const String &s2, unsigned int fromIndex) const |
itead | 0:5ebc917ebd09 | 493 | { |
itead | 0:5ebc917ebd09 | 494 | if (fromIndex >= len) return -1; |
itead | 0:5ebc917ebd09 | 495 | const char *found = strstr(buffer + fromIndex, s2.buffer); |
itead | 0:5ebc917ebd09 | 496 | if (found == NULL) return -1; |
itead | 0:5ebc917ebd09 | 497 | return found - buffer; |
itead | 0:5ebc917ebd09 | 498 | } |
itead | 0:5ebc917ebd09 | 499 | |
itead | 0:5ebc917ebd09 | 500 | int String::lastIndexOf( char theChar ) const |
itead | 0:5ebc917ebd09 | 501 | { |
itead | 0:5ebc917ebd09 | 502 | return lastIndexOf(theChar, len - 1); |
itead | 0:5ebc917ebd09 | 503 | } |
itead | 0:5ebc917ebd09 | 504 | |
itead | 0:5ebc917ebd09 | 505 | int String::lastIndexOf(char ch, unsigned int fromIndex) const |
itead | 0:5ebc917ebd09 | 506 | { |
itead | 0:5ebc917ebd09 | 507 | if (fromIndex >= len) return -1; |
itead | 0:5ebc917ebd09 | 508 | char tempchar = buffer[fromIndex + 1]; |
itead | 0:5ebc917ebd09 | 509 | buffer[fromIndex + 1] = '\0'; |
itead | 0:5ebc917ebd09 | 510 | char* temp = strrchr( buffer, ch ); |
itead | 0:5ebc917ebd09 | 511 | buffer[fromIndex + 1] = tempchar; |
itead | 0:5ebc917ebd09 | 512 | if (temp == NULL) return -1; |
itead | 0:5ebc917ebd09 | 513 | return temp - buffer; |
itead | 0:5ebc917ebd09 | 514 | } |
itead | 0:5ebc917ebd09 | 515 | |
itead | 0:5ebc917ebd09 | 516 | int String::lastIndexOf(const String &s2) const |
itead | 0:5ebc917ebd09 | 517 | { |
itead | 0:5ebc917ebd09 | 518 | return lastIndexOf(s2, len - s2.len); |
itead | 0:5ebc917ebd09 | 519 | } |
itead | 0:5ebc917ebd09 | 520 | |
itead | 0:5ebc917ebd09 | 521 | int String::lastIndexOf(const String &s2, unsigned int fromIndex) const |
itead | 0:5ebc917ebd09 | 522 | { |
itead | 0:5ebc917ebd09 | 523 | if (s2.len == 0 || len == 0 || s2.len > len) return -1; |
itead | 0:5ebc917ebd09 | 524 | if (fromIndex >= len) fromIndex = len - 1; |
itead | 0:5ebc917ebd09 | 525 | int found = -1; |
itead | 0:5ebc917ebd09 | 526 | for (char *p = buffer; p <= buffer + fromIndex; p++) { |
itead | 0:5ebc917ebd09 | 527 | p = strstr(p, s2.buffer); |
itead | 0:5ebc917ebd09 | 528 | if (!p) break; |
itead | 0:5ebc917ebd09 | 529 | if ((unsigned int)(p - buffer) <= fromIndex) found = p - buffer; |
itead | 0:5ebc917ebd09 | 530 | } |
itead | 0:5ebc917ebd09 | 531 | return found; |
itead | 0:5ebc917ebd09 | 532 | } |
itead | 0:5ebc917ebd09 | 533 | |
itead | 0:5ebc917ebd09 | 534 | String String::substring( unsigned int left ) const |
itead | 0:5ebc917ebd09 | 535 | { |
itead | 0:5ebc917ebd09 | 536 | return substring(left, len); |
itead | 0:5ebc917ebd09 | 537 | } |
itead | 0:5ebc917ebd09 | 538 | |
itead | 0:5ebc917ebd09 | 539 | String String::substring(unsigned int left, unsigned int right) const |
itead | 0:5ebc917ebd09 | 540 | { |
itead | 0:5ebc917ebd09 | 541 | if (left > right) { |
itead | 0:5ebc917ebd09 | 542 | unsigned int temp = right; |
itead | 0:5ebc917ebd09 | 543 | right = left; |
itead | 0:5ebc917ebd09 | 544 | left = temp; |
itead | 0:5ebc917ebd09 | 545 | } |
itead | 0:5ebc917ebd09 | 546 | String out; |
itead | 0:5ebc917ebd09 | 547 | if (left > len) return out; |
itead | 0:5ebc917ebd09 | 548 | if (right > len) right = len; |
itead | 0:5ebc917ebd09 | 549 | char temp = buffer[right]; // save the replaced character |
itead | 0:5ebc917ebd09 | 550 | buffer[right] = '\0'; |
itead | 0:5ebc917ebd09 | 551 | out = buffer + left; // pointer arithmetic |
itead | 0:5ebc917ebd09 | 552 | buffer[right] = temp; //restore character |
itead | 0:5ebc917ebd09 | 553 | return out; |
itead | 0:5ebc917ebd09 | 554 | } |
itead | 0:5ebc917ebd09 | 555 | |
itead | 0:5ebc917ebd09 | 556 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 557 | /* Modification */ |
itead | 0:5ebc917ebd09 | 558 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 559 | |
itead | 0:5ebc917ebd09 | 560 | void String::replace(char find, char replace) |
itead | 0:5ebc917ebd09 | 561 | { |
itead | 0:5ebc917ebd09 | 562 | if (!buffer) return; |
itead | 0:5ebc917ebd09 | 563 | for (char *p = buffer; *p; p++) { |
itead | 0:5ebc917ebd09 | 564 | if (*p == find) *p = replace; |
itead | 0:5ebc917ebd09 | 565 | } |
itead | 0:5ebc917ebd09 | 566 | } |
itead | 0:5ebc917ebd09 | 567 | |
itead | 0:5ebc917ebd09 | 568 | void String::replace(const String& find, const String& replace) |
itead | 0:5ebc917ebd09 | 569 | { |
itead | 0:5ebc917ebd09 | 570 | if (len == 0 || find.len == 0) return; |
itead | 0:5ebc917ebd09 | 571 | int diff = replace.len - find.len; |
itead | 0:5ebc917ebd09 | 572 | char *readFrom = buffer; |
itead | 0:5ebc917ebd09 | 573 | char *foundAt; |
itead | 0:5ebc917ebd09 | 574 | if (diff == 0) { |
itead | 0:5ebc917ebd09 | 575 | while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { |
itead | 0:5ebc917ebd09 | 576 | memcpy(foundAt, replace.buffer, replace.len); |
itead | 0:5ebc917ebd09 | 577 | readFrom = foundAt + replace.len; |
itead | 0:5ebc917ebd09 | 578 | } |
itead | 0:5ebc917ebd09 | 579 | } else if (diff < 0) { |
itead | 0:5ebc917ebd09 | 580 | char *writeTo = buffer; |
itead | 0:5ebc917ebd09 | 581 | while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { |
itead | 0:5ebc917ebd09 | 582 | unsigned int n = foundAt - readFrom; |
itead | 0:5ebc917ebd09 | 583 | memcpy(writeTo, readFrom, n); |
itead | 0:5ebc917ebd09 | 584 | writeTo += n; |
itead | 0:5ebc917ebd09 | 585 | memcpy(writeTo, replace.buffer, replace.len); |
itead | 0:5ebc917ebd09 | 586 | writeTo += replace.len; |
itead | 0:5ebc917ebd09 | 587 | readFrom = foundAt + find.len; |
itead | 0:5ebc917ebd09 | 588 | len += diff; |
itead | 0:5ebc917ebd09 | 589 | } |
itead | 0:5ebc917ebd09 | 590 | strcpy(writeTo, readFrom); |
itead | 0:5ebc917ebd09 | 591 | } else { |
itead | 0:5ebc917ebd09 | 592 | unsigned int size = len; // compute size needed for result |
itead | 0:5ebc917ebd09 | 593 | while ((foundAt = strstr(readFrom, find.buffer)) != NULL) { |
itead | 0:5ebc917ebd09 | 594 | readFrom = foundAt + find.len; |
itead | 0:5ebc917ebd09 | 595 | size += diff; |
itead | 0:5ebc917ebd09 | 596 | } |
itead | 0:5ebc917ebd09 | 597 | if (size == len) return; |
itead | 0:5ebc917ebd09 | 598 | if (size > capacity && !changeBuffer(size)) return; // XXX: tell user! |
itead | 0:5ebc917ebd09 | 599 | int index = len - 1; |
itead | 0:5ebc917ebd09 | 600 | while (index >= 0 && (index = lastIndexOf(find, index)) >= 0) { |
itead | 0:5ebc917ebd09 | 601 | readFrom = buffer + index + find.len; |
itead | 0:5ebc917ebd09 | 602 | memmove(readFrom + diff, readFrom, len - (readFrom - buffer)); |
itead | 0:5ebc917ebd09 | 603 | len += diff; |
itead | 0:5ebc917ebd09 | 604 | buffer[len] = 0; |
itead | 0:5ebc917ebd09 | 605 | memcpy(buffer + index, replace.buffer, replace.len); |
itead | 0:5ebc917ebd09 | 606 | index--; |
itead | 0:5ebc917ebd09 | 607 | } |
itead | 0:5ebc917ebd09 | 608 | } |
itead | 0:5ebc917ebd09 | 609 | } |
itead | 0:5ebc917ebd09 | 610 | |
itead | 0:5ebc917ebd09 | 611 | void String::toLowerCase(void) |
itead | 0:5ebc917ebd09 | 612 | { |
itead | 0:5ebc917ebd09 | 613 | if (!buffer) return; |
itead | 0:5ebc917ebd09 | 614 | for (char *p = buffer; *p; p++) { |
itead | 0:5ebc917ebd09 | 615 | *p = tolower(*p); |
itead | 0:5ebc917ebd09 | 616 | } |
itead | 0:5ebc917ebd09 | 617 | } |
itead | 0:5ebc917ebd09 | 618 | |
itead | 0:5ebc917ebd09 | 619 | void String::toUpperCase(void) |
itead | 0:5ebc917ebd09 | 620 | { |
itead | 0:5ebc917ebd09 | 621 | if (!buffer) return; |
itead | 0:5ebc917ebd09 | 622 | for (char *p = buffer; *p; p++) { |
itead | 0:5ebc917ebd09 | 623 | *p = toupper(*p); |
itead | 0:5ebc917ebd09 | 624 | } |
itead | 0:5ebc917ebd09 | 625 | } |
itead | 0:5ebc917ebd09 | 626 | |
itead | 0:5ebc917ebd09 | 627 | void String::trim(void) |
itead | 0:5ebc917ebd09 | 628 | { |
itead | 0:5ebc917ebd09 | 629 | if (!buffer || len == 0) return; |
itead | 0:5ebc917ebd09 | 630 | char *begin = buffer; |
itead | 0:5ebc917ebd09 | 631 | while (isspace(*begin)) begin++; |
itead | 0:5ebc917ebd09 | 632 | char *end = buffer + len - 1; |
itead | 0:5ebc917ebd09 | 633 | while (isspace(*end) && end >= begin) end--; |
itead | 0:5ebc917ebd09 | 634 | len = end + 1 - begin; |
itead | 0:5ebc917ebd09 | 635 | if (begin > buffer) memcpy(buffer, begin, len); |
itead | 0:5ebc917ebd09 | 636 | buffer[len] = 0; |
itead | 0:5ebc917ebd09 | 637 | } |
itead | 0:5ebc917ebd09 | 638 | |
itead | 0:5ebc917ebd09 | 639 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 640 | /* Parsing / Conversion */ |
itead | 0:5ebc917ebd09 | 641 | /*********************************************/ |
itead | 0:5ebc917ebd09 | 642 | |
itead | 0:5ebc917ebd09 | 643 | long String::toInt(void) const |
itead | 0:5ebc917ebd09 | 644 | { |
itead | 0:5ebc917ebd09 | 645 | if (buffer) return atol(buffer); |
itead | 0:5ebc917ebd09 | 646 | return 0; |
itead | 0:5ebc917ebd09 | 647 | } |
itead | 0:5ebc917ebd09 | 648 |