Modifying String from new/delete to malloc()/free(). Also #include'ing WString.h from WProgram.h.

This commit is contained in:
David A. Mellis 2010-07-04 16:36:52 +00:00
parent 0c09741c72
commit 50bfce889e
3 changed files with 9 additions and 8 deletions

View File

@ -10,6 +10,7 @@
#include "wiring.h" #include "wiring.h"
#ifdef __cplusplus #ifdef __cplusplus
#include "WString.h"
#include "HardwareSerial.h" #include "HardwareSerial.h"
uint16_t makeWord(uint16_t w); uint16_t makeWord(uint16_t w);

View File

@ -113,7 +113,7 @@ const String & String::operator=( const String &rhs )
if ( rhs._length > _length ) if ( rhs._length > _length )
{ {
delete [] _buffer; free(_buffer);
getBuffer( rhs._length ); getBuffer( rhs._length );
} }
_length = rhs._length; _length = rhs._length;
@ -139,7 +139,7 @@ const String & String::operator+=( const String &other )
char *temp = _buffer; char *temp = _buffer;
getBuffer( _length ); getBuffer( _length );
strcpy( _buffer, temp ); strcpy( _buffer, temp );
delete [] temp; free(temp);
} }
strcat( _buffer, other._buffer ); strcat( _buffer, other._buffer );
return *this; return *this;

View File

@ -36,7 +36,7 @@ class String
explicit String( const unsigned int, const int base=10 ); explicit String( const unsigned int, const int base=10 );
explicit String( const long, const int base=10 ); explicit String( const long, const int base=10 );
explicit String( const unsigned long, const int base=10 ); explicit String( const unsigned long, const int base=10 );
virtual ~String() { delete [] _buffer; } ~String() { free(_buffer); }
// operators // operators
const String & operator = ( const String &rhs ); const String & operator = ( const String &rhs );
@ -50,7 +50,7 @@ class String
int operator >=( const String &rhs ) const; int operator >=( const String &rhs ) const;
char operator []( unsigned int index ) const; char operator []( unsigned int index ) const;
char& operator []( unsigned int index ); char& operator []( unsigned int index );
// operator const char *() const { return _buffer; } //operator const char *() const { return _buffer; }
// general methods // general methods
char charAt( unsigned int index ) const; char charAt( unsigned int index ) const;
@ -84,8 +84,8 @@ class String
protected: protected:
char *_buffer; // the actual char array char *_buffer; // the actual char array
unsigned int _capacity; // the array length unsigned int _capacity; // the array length minus one (for the '\0')
unsigned int _length; // the String length unsigned int _length; // the String length (not counting the '\0')
void getBuffer(unsigned int maxStrLen); void getBuffer(unsigned int maxStrLen);
void doubleBuffer( ); void doubleBuffer( );
@ -98,7 +98,7 @@ class String
inline void String::getBuffer(unsigned int maxStrLen) inline void String::getBuffer(unsigned int maxStrLen)
{ {
_capacity = maxStrLen; _capacity = maxStrLen;
_buffer = new char[_capacity + 1]; _buffer = (char *) malloc(_capacity + 1);
} }
// double the buffer size // double the buffer size
@ -107,7 +107,7 @@ inline void String::doubleBuffer( )
char *temp = _buffer; char *temp = _buffer;
getBuffer( ++_capacity * 2 ); getBuffer( ++_capacity * 2 );
strcpy( _buffer, temp ); strcpy( _buffer, temp );
delete [] temp; free(temp);
} }
inline String operator+( String lhs, const String &rhs ) inline String operator+( String lhs, const String &rhs )