Compare commits

..

15 Commits

Author SHA1 Message Date
0df2a365f5 Set version to 5.5.1 2016-06-06 22:12:48 +02:00
c7d6d33e6c Fixed compilation error with Intel Galileo (issue #299) 2016-06-06 22:10:28 +02:00
c705f3cfeb Disabled build on Clang 3.5, 3.6, 3.7 and 3.8 because llvm.org/apt is down 2016-06-06 22:09:34 +02:00
7fecb36aee Added Kestutis Liaugminas to the list of donators 2016-06-03 20:16:47 +02:00
657a2ea8d9 Added Jon Williams to the list of donators 2016-05-23 11:02:19 +02:00
dd064f4c96 Added Arduino 1.6.9 to the continuous integration 2016-05-22 22:24:31 +02:00
3bc05b97ea Set version to 5.5.0 2016-05-22 15:00:09 +02:00
bbd515f6f6 Added Nick Koumaris to the list of donators 2016-05-22 14:58:48 +02:00
9b3e3a3d9c Renamed JsonVariant::invalid<T>() to JsonVariant::defaultValue<T>() 2016-05-18 09:17:45 +02:00
a3a2ca4796 Added JsonVariant::success() (issue #279) 2016-05-18 09:15:49 +02:00
eab13dc565 Added Martijn van den Burg to the list of donators 2016-05-16 20:35:26 +02:00
bebd1c400c Added OSX build on Travis 2016-05-15 09:41:53 +02:00
36d1bb2f52 Added Charles-Henri Hallard to the list of donator 2016-05-08 20:59:59 +02:00
ae32695c3e Set version to 5.4.0 2016-05-06 08:46:13 +02:00
c5d19a4dbd Changed ::String to ArduinoJson::String (issue #275) 2016-05-06 08:44:31 +02:00
29 changed files with 214 additions and 77 deletions

View File

@ -46,24 +46,24 @@ matrix:
env: SCRIPT=cmake CMAKE_CXX_COMPILER=g++-5
- compiler: clang
env: SCRIPT=cmake CMAKE_CXX_COMPILER=clang++
- compiler: clang
addons:
apt:
sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.5']
packages: ['clang-3.5']
env: SCRIPT=cmake CMAKE_CXX_COMPILER=clang++-3.5
- compiler: clang
addons:
apt:
sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.6']
packages: ['clang-3.6']
env: SCRIPT=cmake CMAKE_CXX_COMPILER=clang++-3.6
- compiler: clang
addons:
apt:
sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.7']
packages: ['clang-3.7']
env: SCRIPT=cmake CMAKE_CXX_COMPILER=clang++-3.7
# - compiler: clang
# addons:
# apt:
# sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.5']
# packages: ['clang-3.5']
# env: SCRIPT=cmake CMAKE_CXX_COMPILER=clang++-3.5
# - compiler: clang
# addons:
# apt:
# sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.6']
# packages: ['clang-3.6']
# env: SCRIPT=cmake CMAKE_CXX_COMPILER=clang++-3.6
# - compiler: clang
# addons:
# apt:
# sources: ['ubuntu-toolchain-r-test','llvm-toolchain-precise-3.7']
# packages: ['clang-3.7']
# env: SCRIPT=cmake CMAKE_CXX_COMPILER=clang++-3.7
# - compiler: clang
# addons:
# apt:
@ -72,9 +72,42 @@ matrix:
# env: SCRIPT=cmake CMAKE_CXX_COMPILER=clang++-3.8
- compiler: gcc
env: SCRIPT=coverage
- os: osx
osx_image: beta-xcode6.1
compiler: clang
env: SCRIPT=cmake-osx
- os: osx
osx_image: beta-xcode6.2
compiler: clang
env: SCRIPT=cmake-osx
- os: osx
osx_image: beta-xcode6.3
compiler: clang
env: SCRIPT=cmake-osx
- os: osx
osx_image: xcode6.4
compiler: clang
env: SCRIPT=cmake-osx
- os: osx
osx_image: xcode7
compiler: clang
env: SCRIPT=cmake-osx
- os: osx
osx_image: xcode7.1
compiler: clang
env: SCRIPT=cmake-osx
- os: osx
osx_image: xcode7.2
compiler: clang
env: SCRIPT=cmake-osx
- os: osx
osx_image: xcode7.3
compiler: clang
env: SCRIPT=cmake-osx
- env: SCRIPT=arduino VERSION=1.5.8 BOARD=arduino:avr:uno
- env: SCRIPT=arduino VERSION=1.6.7 BOARD=arduino:avr:uno
- env: SCRIPT=arduino VERSION=1.6.8 BOARD=arduino:avr:uno
- env: SCRIPT=arduino VERSION=1.6.9 BOARD=arduino:avr:uno
- env: SCRIPT=platformio BOARD=uno
- env: SCRIPT=platformio BOARD=due
- env: SCRIPT=platformio BOARD=esp01

View File

@ -1,6 +1,23 @@
ArduinoJson: change log
=======================
v5.5.1
------
* Fixed compilation error with Intel Galileo (issue #299)
v5.5.0
------
* Added `JsonVariant::success()` (issue #279)
* Renamed `JsonVariant::invalid<T>()` to `JsonVariant::defaultValue<T>()`
v5.4.0
------
* Changed `::String` to `ArduinoJson::String` (issue #275)
* Changed `::Print` to `ArduinoJson::Print` too
v5.3.0
------

View File

@ -28,7 +28,7 @@ Works on
* All Arduino boards (Uno, Due, Mini, Micro, Yun...)
* ESP8266
* Teensy
* Intel Edison
* Intel Edison and Galileo
* PlatformIO
* Energia
* RedBearLab boards (BLE Nano...)
@ -110,14 +110,19 @@ Donators
Special thanks to the following persons and companies who made generous donations to the library author:
* Robert Murphy
* Surge Communications
* Alex Scott
* Firepick Services LLC
* A B Doodkorte
* Scott Smith
* Johann Stieger
* Gustavo Donizeti Gini
* Robert Murphy <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Surge Communications <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Alex Scott <img alt='United Kingdom' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1ec-1f1e7.svg' width='18' height='18'>
* Firepick Services LLC <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* A B Doodkorte <img alt='Netherlands' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1f1.svg' width='18' height='18'>
* Scott Smith <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Johann Stieger <img alt='Austria' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1e6-1f1f9.svg' width='18' height='18'>
* Gustavo Donizeti Gini <img alt='Brazil' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1e7-1f1f7.svg' width='18' height='18'>
* Charles-Henri Hallard <img alt='France' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1eb-1f1f7.svg' width='18' height='18'>
* Martijn van den Burg <img alt='Netherlands' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f3-1f1f1.svg' width='18' height='18'>
* Nick Koumaris <img alt='Greece' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1ec-1f1f7.svg' width='18' height='18'>
* Jon Williams <img alt='USA' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1fa-1f1f8.svg' width='18' height='18'>
* Kestutis Liaugminas <img alt='Lithuania' src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.1.4/assets/svg/1f1f1-1f1f9.svg' width='18' height='18'>
---

View File

@ -1,4 +1,4 @@
version: 5.3.0.{build}
version: 5.5.1.{build}
environment:
matrix:
- CMAKE_GENERATOR: Visual Studio 14 2015

View File

@ -22,6 +22,11 @@
#define ARDUINOJSON_USE_INT64 0
#endif
// arduino has its own implementation of String to replace std::string
#ifndef ARDUINOJSON_USE_ARDUINO_STRING
#define ARDUINOJSON_USE_ARDUINO_STRING 1
#endif
// arduino doesn't support STL stream
#ifndef ARDUINOJSON_ENABLE_STD_STREAM
#define ARDUINOJSON_ENABLE_STD_STREAM 0
@ -62,6 +67,11 @@
#endif
#endif
// on a computer, we can use std::string
#ifndef ARDUINOJSON_USE_ARDUINO_STRING
#define ARDUINOJSON_USE_ARDUINO_STRING 0
#endif
// on a computer, we can assume that the STL is there
#ifndef ARDUINOJSON_ENABLE_STD_STREAM
#define ARDUINOJSON_ENABLE_STD_STREAM 1

View File

@ -7,7 +7,7 @@
#pragma once
#include "../Arduino/Print.hpp"
#include "../Print.hpp"
namespace ArduinoJson {
namespace Internals {

View File

@ -7,8 +7,8 @@
#pragma once
#include "../Arduino/Print.hpp"
#include "../Arduino/String.hpp"
#include "../Print.hpp"
#include "../String.hpp"
namespace ArduinoJson {
namespace Internals {

View File

@ -7,7 +7,7 @@
#pragma once
#include "../Arduino/Print.hpp"
#include "../Print.hpp"
namespace ArduinoJson {
namespace Internals {

View File

@ -7,7 +7,7 @@
#pragma once
#include "../Arduino/Print.hpp"
#include "../Print.hpp"
namespace ArduinoJson {
namespace Internals {

View File

@ -7,10 +7,10 @@
#pragma once
#include "../Arduino/Print.hpp"
#include "../Polyfills/isNaN.hpp"
#include "../Polyfills/isInfinity.hpp"
#include "../Polyfills/isNaN.hpp"
#include "../Polyfills/normalize.hpp"
#include "../Print.hpp"
#include "Encoding.hpp"
#include "ForceInline.hpp"
#include "JsonFloat.hpp"

View File

@ -7,7 +7,7 @@
#pragma once
#include "../Arduino/Print.hpp"
#include "../Print.hpp"
namespace ArduinoJson {
namespace Internals {

View File

@ -11,7 +11,7 @@
#if ARDUINOJSON_ENABLE_STD_STREAM
#include "../Arduino/Print.hpp"
#include "../Print.hpp"
#include <ostream>

View File

@ -55,7 +55,7 @@ inline JsonVariant JsonArray::get(size_t index) const {
template <typename T>
inline T JsonArray::get(size_t index) const {
node_type *node = getNodeAt(index);
return node ? node->content.as<T>() : JsonVariant::invalid<T>();
return node ? node->content.as<T>() : JsonVariant::defaultValue<T>();
}
template <typename T>
@ -71,12 +71,12 @@ inline const JsonArraySubscript JsonVariantBase<TImplem>::operator[](
}
template <>
inline JsonArray &JsonVariant::invalid<JsonArray &>() {
inline JsonArray &JsonVariant::defaultValue<JsonArray &>() {
return JsonArray::invalid();
}
template <>
inline JsonArray const &JsonVariant::invalid<JsonArray const &>() {
inline JsonArray const &JsonVariant::defaultValue<JsonArray const &>() {
return JsonArray::invalid();
}

View File

@ -11,12 +11,16 @@
#include <stdint.h> // for uint8_t
#include <string.h>
#include "Arduino/String.hpp"
#include "JsonVariant.hpp"
#include "String.hpp"
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnon-virtual-dtor"
#elif defined(__GNUC__)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#pragma GCC diagnostic push
#endif
#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
#endif
@ -149,3 +153,11 @@ class JsonBuffer {
static const uint8_t DEFAULT_LIMIT = 10;
};
}
#if defined(__clang__)
#pragma clang diagnostic pop
#elif defined(__GNUC__)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#pragma GCC diagnostic pop
#endif
#endif

View File

@ -7,7 +7,7 @@
#pragma once
#include "Arduino/String.hpp"
#include "String.hpp"
#include "Internals/JsonBufferAllocated.hpp"
#include "Internals/JsonPrintable.hpp"
#include "Internals/List.hpp"

View File

@ -21,7 +21,7 @@ inline JsonVariant JsonObject::get(JsonObjectKey key) const {
template <typename T>
inline T JsonObject::get(JsonObjectKey key) const {
node_type *node = getNodeAt(key.c_str());
return node ? node->content.value.as<T>() : JsonVariant::invalid<T>();
return node ? node->content.value.as<T>() : JsonVariant::defaultValue<T>();
}
template <typename T>
@ -57,8 +57,7 @@ inline bool JsonObject::setNodeAt(JsonObjectKey key, T value) {
node_type *node = getNodeAt(key.c_str());
if (!node) {
node = addNewNode();
if (!node || !setNodeKey(node, key))
return false;
if (!node || !setNodeKey(node, key)) return false;
}
return setNodeValue<T>(node, value);
}
@ -104,12 +103,12 @@ operator[](const String &key) const {
}
template <>
inline JsonObject const &JsonVariant::invalid<JsonObject const &>() {
inline JsonObject const &JsonVariant::defaultValue<JsonObject const &>() {
return JsonObject::invalid();
}
template <>
inline JsonObject &JsonVariant::invalid<JsonObject &>() {
inline JsonObject &JsonVariant::defaultValue<JsonObject &>() {
return JsonObject::invalid();
}

View File

@ -7,7 +7,7 @@
#pragma once
#include "Arduino/String.hpp"
#include "String.hpp"
namespace ArduinoJson {

View File

@ -256,12 +256,17 @@ class JsonVariant : public JsonVariantBase<JsonVariant> {
return isObject();
}
// Returns true if the variant has a value
bool success() const { return _type != Internals::JSON_UNDEFINED; }
// Serialize the variant to a JsonWriter
void writeTo(Internals::JsonWriter &writer) const;
// TODO: rename
// Value returned if the variant has an incompatible type
template <typename T>
static T invalid();
static T defaultValue() {
return T();
}
const char *asString() const;
JsonArray &asArray() const;

View File

@ -41,11 +41,6 @@ inline JsonVariant::JsonVariant(JsonObject &object) {
_content.asObject = &object;
}
template <typename T>
inline T JsonVariant::invalid() {
return T();
}
inline Internals::JsonInteger JsonVariant::asInteger() const {
using namespace Internals;
switch (_type) {

View File

@ -14,6 +14,18 @@
#include <math.h>
#endif
// GCC warning: "conversion to 'float' from 'double' may alter its value"
#ifdef __GNUC__
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#pragma GCC diagnostic push
#endif
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)
#pragma GCC diagnostic ignored "-Wfloat-conversion"
#else
#pragma GCC diagnostic ignored "-Wconversion"
#endif
#endif
namespace ArduinoJson {
namespace Polyfills {
@ -29,12 +41,14 @@ bool isInfinity(T x) {
return isinf(x);
}
#ifdef __GLIBC__
#if defined(_GLIBCXX_HAVE_ISINFL) && _GLIBCXX_HAVE_ISINFL
template <>
inline bool isInfinity<double>(double x) {
return isinfl(x);
}
#endif
#if defined(_GLIBCXX_HAVE_ISINFF) && _GLIBCXX_HAVE_ISINFF
template <>
inline bool isInfinity<float>(float x) {
return isinff(x);
@ -43,3 +57,9 @@ inline bool isInfinity<float>(float x) {
#endif
}
}
#if defined(__GNUC__)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#pragma GCC diagnostic pop
#endif
#endif

View File

@ -14,33 +14,41 @@
#include <math.h>
#endif
// GCC warning: "conversion to 'float' from 'double' may alter its value"
#ifdef __GNUC__
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#pragma GCC diagnostic push
#endif
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 9)
#pragma GCC diagnostic ignored "-Wfloat-conversion"
#else
#pragma GCC diagnostic ignored "-Wconversion"
#endif
#endif
namespace ArduinoJson {
namespace Polyfills {
// If Visual Studo <= 2012
#if defined(_MSC_VER) && _MSC_VER <= 1700
template <typename T>
bool isNaN(T x) {
return _isnan(x) != 0;
}
#else
template <typename T>
bool isNaN(T x) {
return isnan(x);
}
#ifdef __GLIBC__
template <>
inline bool isNaN<double>(double x) {
return isnanl(x);
}
template <>
inline bool isNaN<float>(float x) {
return isnanf(x);
}
#endif
#endif
}
}
#if defined(__GNUC__)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
#pragma GCC diagnostic pop
#endif
#endif

View File

@ -12,6 +12,7 @@
#include <stddef.h>
#include <stdint.h>
namespace ArduinoJson {
// This class reproduces Arduino's Print class
class Print {
public:
@ -29,6 +30,7 @@ class Print {
size_t println() { return write('\r') + write('\n'); }
};
}
#else

View File

@ -7,13 +7,18 @@
#pragma once
#ifndef ARDUINO
#include "Configuration.hpp"
#include <string>
typedef std::string String;
#else
#if ARDUINOJSON_USE_ARDUINO_STRING
#include <WString.h>
#else
#include <string>
namespace ArduinoJson {
typedef std::string String;
}
#endif

View File

@ -6,7 +6,7 @@
"type": "git",
"url": "https://github.com/bblanchon/ArduinoJson.git"
},
"version": "5.3.0",
"version": "5.5.1",
"authors": {
"name": "Benoit Blanchon",
"url": "http://blog.benoitblanchon.fr"

View File

@ -1,5 +1,5 @@
name=ArduinoJson
version=5.3.0
version=5.5.1
author=Benoit Blanchon <blog.benoitblanchon.fr>
maintainer=Benoit Blanchon <blog.benoitblanchon.fr>
sentence=An efficient and elegant JSON library for Arduino.

9
scripts/travis/cmake-osx.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/sh -eux
URL=https://cmake.org/files/v3.4/cmake-3.4.3-Darwin-x86_64.tar.gz
curl -sS $URL | tar xz -C /tmp --strip 1
/tmp/CMake.app/Contents/bin/cmake .
make
make test

View File

@ -1,6 +1,8 @@
#!/bin/sh -eux
curl -sS https://cmake.org/files/v3.4/cmake-3.4.0-Linux-x86_64.tar.gz | tar xz -C /tmp --strip 1
URL=https://cmake.org/files/v3.4/cmake-3.4.3-Linux-x86_64.tar.gz
curl -sS $URL | tar xz -C /tmp --strip 1
/tmp/bin/cmake -DCMAKE_CXX_COMPILER=$CMAKE_CXX_COMPILER .
make

View File

@ -29,6 +29,9 @@ class JsonParser_Variant_Test : public testing::Test {
EXPECT_TRUE(_result.is<T>());
}
void resultMustBeInvalid() { EXPECT_FALSE(_result.success()); }
void resultMustBeValid() { EXPECT_TRUE(_result.success()); }
private:
DynamicJsonBuffer _jsonBuffer;
JsonVariant _result;
@ -37,40 +40,52 @@ class JsonParser_Variant_Test : public testing::Test {
TEST_F(JsonParser_Variant_Test, EmptyObject) {
whenInputIs("{}");
resultMustBeValid();
resultTypeMustBe<JsonObject>();
}
TEST_F(JsonParser_Variant_Test, EmptyArray) {
whenInputIs("[]");
resultMustBeValid();
resultTypeMustBe<JsonArray>();
}
TEST_F(JsonParser_Variant_Test, Integer) {
whenInputIs("42");
resultMustBeValid();
resultTypeMustBe<int>();
resultMustEqual(42);
}
TEST_F(JsonParser_Variant_Test, Double) {
whenInputIs("3.14");
resultMustBeValid();
resultTypeMustBe<double>();
resultMustEqual(3.14);
}
TEST_F(JsonParser_Variant_Test, String) {
whenInputIs("\"hello world\"");
resultMustBeValid();
resultTypeMustBe<char*>();
resultMustEqual("hello world");
}
TEST_F(JsonParser_Variant_Test, True) {
whenInputIs("true");
resultMustBeValid();
resultTypeMustBe<bool>();
resultMustEqual(true);
}
TEST_F(JsonParser_Variant_Test, False) {
whenInputIs("false");
resultMustBeValid();
resultTypeMustBe<bool>();
resultMustEqual(false);
}
TEST_F(JsonParser_Variant_Test, Invalid) {
whenInputIs("{");
resultMustBeInvalid();
}

View File

@ -5,8 +5,8 @@
// https://github.com/bblanchon/ArduinoJson
// If you like this project, please add a star!
#include <ArduinoJson.h>
#include <gtest/gtest.h>
#include <ArduinoJson/Internals/StaticStringBuilder.hpp>
using namespace ArduinoJson::Internals;