Own fork of MbedSmartRest

Dependents:   MbedSmartRestMain MbedSmartRestMain

Fork of MbedSmartRest by Cumulocity Official

Revision:
11:e1bee9a77652
Parent:
6:cd7ba1ddb664
Child:
20:505d29d5bdfc
--- a/Parser.cpp	Thu Oct 23 14:41:58 2014 +0200
+++ b/Parser.cpp	Sat Nov 15 11:21:01 2014 +0100
@@ -27,6 +27,7 @@
  */
 
 #include "Parser.h"
+#include <assert.h>
 
 #define STATE_BLANK 0
 #define STATE_STRUCTURE 1
@@ -36,152 +37,172 @@
 #define STATE_COMPLETE 5
 #define STATE_ERROR 6
 
+
+/*-------------------------------------------------------------------------*/
 Parser::Parser()
 {
-    reset();
+	reset();
 }
-
+/*-------------------------------------------------------------------------*/
 uint8_t Parser::readFrom(AbstractDataSource& source, ParsedRecord& record)
 {
-    uint8_t status; char read;
+	int status = -1;
+	char read;
 
-    reset();
-    record.clear();
+	reset();
+	record.clear();
 
-    while ((_state < STATE_COMPLETE) &&
-           (((read = source.read()) > 0) ||
-            ((status = source.status()) == DS_STATUS_OK)))
-        parse(read);
+	while ((_state < STATE_COMPLETE) &&
+			(((read = source.read()) > 0) ||
+			 ((status = source.status()) == DS_STATUS_OK)))
+		parse(read);
 
-    // successfully read record
-    if (_state == STATE_COMPLETE) {
-        if (!record.set(_buffer, _count))
-            return PARSER_INTERNAL_ERROR;
-        return PARSER_SUCCESS;
-    }
+	// successfully read record
+	if (_state == STATE_COMPLETE)
+	{
+		if (!record.set(_buffer, _count))
+			return PARSER_INTERNAL_ERROR;
+		return PARSER_SUCCESS;
+	}
 
-    if (_state == STATE_BLANK) {
-        if (status == DS_STATUS_CLOSED)
-            return PARSER_END_OF_RESPONSE;
-        else if (status == DS_STATUS_TIMEOUT)
-            return PARSER_TIMEOUT_ERROR;
-        else
-            return PARSER_INTERNAL_ERROR;
-    }
+	if (_state == STATE_BLANK)
+	{
+		assert(status >= 0);
+		if (status == DS_STATUS_CLOSED)
+			return PARSER_END_OF_RESPONSE;
+		else if (status == DS_STATUS_TIMEOUT)
+			return PARSER_TIMEOUT_ERROR;
+		else
+			return PARSER_INTERNAL_ERROR;
+	}
 
-    if (status == DS_STATUS_TIMEOUT)
-        return PARSER_TIMEOUT_ERROR;
-    else if (status == DS_STATUS_ERROR)
-        return PARSER_INTERNAL_ERROR;
-    else
-        return PARSER_PARSE_ERROR;
+	assert(status >= 0);
+	if (status == DS_STATUS_TIMEOUT)
+		return PARSER_TIMEOUT_ERROR;
+	else if (status == DS_STATUS_ERROR)
+		return PARSER_INTERNAL_ERROR;
+	else
+		return PARSER_PARSE_ERROR;
 }
-
+/*-------------------------------------------------------------------------*/
 void Parser::parse(char c)
 {
-    if (_ptr-_buffer >= SMARTREST_PARSER_BUFFER_SIZE) {
-        _state = STATE_ERROR;
-        return;
-    }
+	if (_ptr-_buffer >= SMARTREST_PARSER_BUFFER_SIZE)
+	{
+		_state = STATE_ERROR;
+		return;
+	}
 
-    switch (_state) {
-    case STATE_BLANK:
-        _state = STATE_STRUCTURE;
-    case STATE_STRUCTURE:
-        switch (c) {
-        case ' ':
-        case '\t':
-        case '\r':
-            break;
-        case '"':
-            _state = STATE_INQUOTES;
-            break;
-        case ',':
-            close();
-            break;
-        case '\0':
-        case '\n':
-            if ((_count == 0) && (_length == 0)) {
-                _state = STATE_BLANK;
-            } else {
-                close();
-                _state = STATE_COMPLETE;
-            }
-            break;
-        default:
-            if (_length > 0) {
-                _state = STATE_ERROR;
-            } else {
-                _state = STATE_VALUE;
-                parse(c);
-            }
-            break;
-        }
-        break;
-    case STATE_VALUE:
-        switch (c) {
-        case ',':
-        case '\n':
-            _state = STATE_STRUCTURE;
-            parse(c);
-            break;
-        case '"':
-            _state = STATE_ERROR;
-            break;
-        default:
-            if ((c == ' ') || (c == '\t') || (c == '\r'))
-                _trailing++;
-            else
-                _trailing = 0;
-            append(c);
-            break;
-        }
-        break;
-    case STATE_INQUOTES:
-        switch (c) {
-        case '"':
-            _state = STATE_AFTERQUOTE;
-            break;
-        default:
-            append(c);
-            break;
-        }
-        break;
-    case STATE_AFTERQUOTE:
-        switch (c) {
-        case '"':
-            append(c);
-            _state = STATE_INQUOTES;
-            break;
-        default:
-            _state = STATE_STRUCTURE;
-            parse(c);
-            break;
-        }
-        break;
-    }
+	switch (_state)
+	{
+		case STATE_BLANK:
+			_state = STATE_STRUCTURE;
+		case STATE_STRUCTURE:
+			switch (c)
+			{
+				case ' ':
+				case '\t':
+				case '\r':
+					break;
+				case '"':
+					_state = STATE_INQUOTES;
+					break;
+				case ',':
+					close();
+					break;
+				case '\0':
+				case '\n':
+					if ((_count == 0) && (_length == 0))
+					{
+						_state = STATE_BLANK;
+					}
+					else
+					{
+						close();
+						_state = STATE_COMPLETE;
+					}
+					break;
+				default:
+					if (_length > 0)
+					{
+						_state = STATE_ERROR;
+					}
+					else
+					{
+						_state = STATE_VALUE;
+						parse(c);
+					}
+					break;
+			}
+			break;
+		case STATE_VALUE:
+			switch (c)
+			{
+				case ',':
+				case '\n':
+					_state = STATE_STRUCTURE;
+					parse(c);
+					break;
+				case '"':
+					_state = STATE_ERROR;
+					break;
+				default:
+					if ((c == ' ') || (c == '\t') || (c == '\r'))
+						_trailing++;
+					else
+						_trailing = 0;
+					append(c);
+					break;
+			}
+			break;
+		case STATE_INQUOTES:
+			switch (c)
+			{
+				case '"':
+					_state = STATE_AFTERQUOTE;
+					break;
+				default:
+					append(c);
+					break;
+			}
+			break;
+		case STATE_AFTERQUOTE:
+			switch (c)
+			{
+				case '"':
+					append(c);
+					_state = STATE_INQUOTES;
+					break;
+				default:
+					_state = STATE_STRUCTURE;
+					parse(c);
+					break;
+			}
+			break;
+	}
 }
-
+/*-------------------------------------------------------------------------*/
 void Parser::append(char c)
 {
-    *_ptr++ = c;
-    _length++;
+	*_ptr++ = c;
+	_length++;
 }
-
+/*-------------------------------------------------------------------------*/
 void Parser::close()
 {
-    _ptr -= _trailing;
-    *_ptr++ = 0;
-    _trailing = 0;
-    _length = 0;
-    _count++;
+	_ptr -= _trailing;
+	*_ptr++ = 0;
+	_trailing = 0;
+	_length = 0;
+	_count++;
 }
-
+/*-------------------------------------------------------------------------*/
 void Parser::reset()
 {
-    _state = STATE_BLANK;
-    _ptr = _buffer;
-    _count = 0;
-    _trailing = 0;
-    _length = 0;
+	_state = STATE_BLANK;
+	_ptr = _buffer;
+	_count = 0;
+	_trailing = 0;
+	_length = 0;
 }
+/*-------------------------------------------------------------------------*/