Own fork of MbedSmartRest
Dependents: MbedSmartRestMain MbedSmartRestMain
Fork of MbedSmartRest by
Diff: ParsedRecord.cpp
- Revision:
- 4:059b8b90e0d9
- Parent:
- 0:099f76422485
- Child:
- 5:2b74510900da
--- a/ParsedRecord.cpp Mon Jul 07 17:12:59 2014 +0200 +++ b/ParsedRecord.cpp Wed Jul 09 15:37:19 2014 +0200 @@ -33,12 +33,14 @@ #include <stdlib.h> #include <string.h> -ParsedRecord::ParsedRecord() +ParsedRecord::ParsedRecord(bool copy) : + _copy(copy) { _count = 0; #ifdef SMARTREST_PARSED_DYNAMIC_ALLOC _values = NULL; #endif + _buffer = NULL; } ParsedRecord::~ParsedRecord() @@ -63,11 +65,10 @@ return *_values[index]; } -DataGenerator* ParsedRecord::copy() const +ParsedRecord* ParsedRecord::copy() const { - ComposedRecord *copy = new ComposedRecord(true); - for (size_t n = 0; n < _count; n++) - copy->add(*_values[n]); + ParsedRecord *copy = new ParsedRecord(true); + copy->set(_buffer, _count); return copy; } @@ -84,32 +85,48 @@ return ptr; } -void ParsedRecord::set(const char *buffer, size_t count) +bool ParsedRecord::set(const char *buffer, size_t count) { clear(); - + #ifdef SMARTREST_PARSED_DYNAMIC_ALLOC const Value **values = (const Value**)realloc(_values, count*sizeof(Value*)); if (values == NULL) - return; + return false; _values = values; #else if (count > SMARTREST_PARSED_FIXED_SIZE) count = SMARTREST_PARSED_FIXED_SIZE; #endif - const char *ptr = buffer; + if (_copy) { + const char *ptr = buffer; + for (size_t n = 0; n < count; n++) + ptr += strlen(ptr) + 1; + _buffer = (const char*)malloc(ptr-buffer); + if (_buffer == NULL) + return false; + memcpy((char*)_buffer, buffer, ptr-buffer); + } else { + _buffer = buffer; + } + _count = count; + + const char *ptr = _buffer; for (size_t n = 0; n < count; n++) { _values[n] = new ParsedValue(ptr, false); ptr += strlen(ptr) + 1; } - _count = count; - _buffer = buffer; + return true; } void ParsedRecord::clear() { for (size_t n = 0; n < _count; n++) delete _values[n]; + if ((_copy) && (_buffer != NULL)) + free((char*)_buffer); + _buffer = NULL; + _count = 0; }