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