Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: MbedSmartRestMain MbedSmartRestMain
ParsedValue.cpp
- Committer:
- Cumulocity
- Date:
- 2014-10-22
- Revision:
- 7:8159a2d12e4e
- Parent:
- 0:099f76422485
- Child:
- 11:e1bee9a77652
File content as of revision 7:8159a2d12e4e:
/*
* ParsedValue.cpp
*
* Created on: Nov 1, 2013
* * Authors: Vincent Wochnik <v.wochnik@gmail.com>
*
* Copyright (c) 2013 Cumulocity GmbH
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "ParsedValue.h"
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
ParsedValue::ParsedValue(const char *str, bool copy) :
_value(str, copy),
_float(0.0),
_integer(0l)
{
if (_value.valueType() != VALUE_NULL) {
_type = VALUE_CHARACTER;
extractValue();
} else {
_type = VALUE_NULL;
}
}
uint8_t ParsedValue::valueType() const
{
return _type;
}
long ParsedValue::integerValue() const
{
return _integer;
}
double ParsedValue::floatValue() const
{
return _float;
}
const char * ParsedValue::characterValue() const
{
if (_type != VALUE_CHARACTER)
return NULL;
return _value.characterValue();
}
size_t ParsedValue::write(AbstractDataSink& sink) const
{
return _value.write(sink);
}
size_t ParsedValue::length() const
{
return _value.length();
}
Value* ParsedValue::copy() const
{
return new ParsedValue(_value.characterValue(), true);
}
void ParsedValue::extractValue()
{
const char *str; char *ptr;
str = _value.characterValue();
if ((*str == '\0') || (isspace(*str)))
return;
errno = 0;
if ((((_integer = strtol(str, &ptr, 10)) != 0) || (errno == 0)) &&
(*ptr == '\0')) {
_type = VALUE_INTEGER;
return;
}
errno = 0;
if ((((_float = strtod(str, &ptr)) != 0.0) || (errno == 0)) &&
(*ptr == '\0')) {
_type = VALUE_FLOAT;
return;
}
}

Cumulocity