diff options
author | David A. Mellis <d.mellis@arduino.cc> | 2010-07-27 14:20:56 +0000 |
---|---|---|
committer | David A. Mellis <d.mellis@arduino.cc> | 2010-07-27 14:20:56 +0000 |
commit | e871ae523634b7e2bdb5664a7950ec83615c040b (patch) | |
tree | 7f56f509ae59839008731f4ccff08b65535dbe15 /cores/arduino/WString.h | |
parent | 8eea4576c433db9f6499081ab7fc789886d32025 (diff) |
Reverting changes to String class and modifying to allow + and += to work on more types.
Diffstat (limited to 'cores/arduino/WString.h')
-rw-r--r-- | cores/arduino/WString.h | 150 |
1 files changed, 66 insertions, 84 deletions
diff --git a/cores/arduino/WString.h b/cores/arduino/WString.h index dd2245e..5693e11 100644 --- a/cores/arduino/WString.h +++ b/cores/arduino/WString.h @@ -1,23 +1,21 @@ /* - WString.h - String library for Wiring & Arduino - Copyright (c) 2009-10 Hernando Barragan. All right reserved. - Changes for version 1.0 by Xiaoyang Feng - - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ + WString.h - String library for Wiring & Arduino + Copyright (c) 2009-10 Hernando Barragan. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ #ifndef String_h #define String_h @@ -29,110 +27,94 @@ class String { -public: + public: // constructors - String( const char* value = "" ); + String( const char *value = "" ); String( const String &value ); - explicit String( const char ); - explicit String( const unsigned char ); - explicit String( const int, const int base=10); - explicit String( const unsigned int, const int base=10 );//negative sign only works on decimal - explicit String( const long, const int base=10 ); - explicit String( const unsigned long, const int base=10 );//need add function to detect if number is bigger than the limit - ~String() { free(_buffer); _length = _capacity = 0;} //added _length = _capacity = 0; - + String( const char ); + String( const unsigned char ); + String( const int, const int base=10); + String( const unsigned int, const int base=10 ); + String( const long, const int base=10 ); + String( const unsigned long, const int base=10 ); + ~String() { free(_buffer); } + // operators const String & operator = ( const String &rhs ); const String & operator +=( const String &rhs ); - const String & operator +=( const char ); - int operator ==( const String &rhs ) const; + //const String & operator +=( const char ); + int operator ==( const String &rhs ) const; int operator !=( const String &rhs ) const; - //is this useful? int operator < ( const String &rhs ) const; int operator > ( const String &rhs ) const; int operator <=( const String &rhs ) const; int operator >=( const String &rhs ) const; - - friend String operator + ( String lhs, const String &rhs ); - char operator []( unsigned int index ) const; char& operator []( unsigned int index ); - + //operator const char *() const { return _buffer; } + // general methods char charAt( unsigned int index ) const; - void setCharAt(unsigned int index, const char ch); - boolean startsWith( const String &prefix ) const; - boolean startsWith( const String &prefix, unsigned int toffset ) const; + int compareTo( const String &anotherString ) const; boolean endsWith( const String &suffix ) const; - boolean contains( const String &str ) const; //added - boolean equals( const String &str ) const; - boolean equalsIgnoreCase( const String &str ) const; - - String trim( ) const; - String toLowerCase( ) const; - String toUpperCase( ) const; - String replace( char oldChar, char newChar ); - String replace( const String& match, const String& replace ); - String substring( unsigned int beginIndex ) const; - String substring( unsigned int beginIndex, unsigned int endIndex ) const; - - int compareTo( const String &str ) const; - int compareTo( const char* str ) const; //added - + boolean equals( const String &anObject ) const; + boolean equalsIgnoreCase( const String &anotherString ) const; int indexOf( char ch ) const; int indexOf( char ch, unsigned int fromIndex ) const; int indexOf( const String &str ) const; int indexOf( const String &str, unsigned int fromIndex ) const; int lastIndexOf( char ch ) const; - int lastIndexOf( char ch, unsigned int fromIndex ) const; //from right to left? + int lastIndexOf( char ch, unsigned int fromIndex ) const; int lastIndexOf( const String &str ) const; int lastIndexOf( const String &str, unsigned int fromIndex ) const; - const unsigned int length( ) const { return _length; } + void setCharAt(unsigned int index, const char ch); + boolean startsWith( const String &prefix ) const; + boolean startsWith( const String &prefix, unsigned int toffset ) const; + String substring( unsigned int beginIndex ) const; + String substring( unsigned int beginIndex, unsigned int endIndex ) const; + String toLowerCase( ) const; + String toUpperCase( ) const; + String trim( ) const; const byte *getBytes() const { return (byte*)_buffer; } const char* toCharArray() const { return _buffer; } - - //version checking - String version(void); // the version number - -protected: + const String& concat( const String &str ); + String replace( char oldChar, char newChar ); + String replace( const String& match, const String& replace ); + friend String operator + ( String lhs, const String &rhs ); + + protected: char *_buffer; // the actual char array unsigned int _capacity; // the array length minus one (for the '\0') unsigned int _length; // the String length (not counting the '\0') - + void getBuffer(unsigned int maxStrLen); - //void doubleBuffer( ); - -private: - + void doubleBuffer( ); + + private: + }; // allocate buffer space inline void String::getBuffer(unsigned int maxStrLen) { - _capacity = maxStrLen; - _buffer = (char *) malloc(_capacity + 1); - if(_buffer == NULL){ //added for memory alloc error - _length = _capacity = 0; - } + _capacity = maxStrLen; + _buffer = (char *) malloc(_capacity + 1); } -/* used only once, really not effcient - // double the buffer size - inline void String::doubleBuffer( ) - { - char *temp = _buffer; - getBuffer( ++_capacity * 2 ); - strcpy( _buffer, temp ); - free(temp); - } - */ - +// double the buffer size +inline void String::doubleBuffer( ) +{ + char *temp = _buffer; + getBuffer( ++_capacity * 2 ); + strcpy( _buffer, temp ); + free(temp); +} inline String operator+( String lhs, const String &rhs ) { - return lhs += rhs; + return lhs += rhs; } -#endif
\ No newline at end of file +#endif |