From 373aaf5ade81c95e1be5f233122d619bbddf3985 Mon Sep 17 00:00:00 2001 From: Johan Euphrosine Date: Tue, 4 Oct 2016 17:54:28 -0700 Subject: [PATCH] bump arduino-json to 5.6.7 force arduino string in ArduinoJson --- .travis.yml | 2 +- src/Firebase.h | 6 +- src/FirebaseCloudMessaging.h | 3 +- src/FirebaseObject.h | 3 +- .../ArduinoJson/Internals/Prettyfier.hpp | 47 ----- .../include/ArduinoJson/JsonArray.ipp | 101 --------- .../include/ArduinoJson/JsonObject.ipp | 134 ------------ .../include/ArduinoJson/JsonVariant.ipp | 94 --------- .../ArduinoJson/Polyfills/isInfinity.hpp | 45 ---- .../include/ArduinoJson/Polyfills/isNaN.hpp | 46 ----- .../arduino-json-5.3/src/ArduinoJson.h | 14 -- .../src/Internals/Encoding.cpp | 14 -- .../src/Internals/IndentedPrint.cpp | 30 --- .../arduino-json-5.3/src/Internals/List.cpp | 50 ----- .../src/Internals/Prettyfier.cpp | 87 -------- .../src/Internals/StaticStringBuilder.cpp | 18 -- .../arduino-json-5.3/src/JsonArray.cpp | 40 ---- .../arduino-json-5.3/src/JsonBuffer.cpp | 47 ----- .../arduino-json-5.3/src/JsonObject.cpp | 44 ---- .../ArduinoJson.h} | 8 +- .../CHANGELOG.md | 72 ++++++- .../LICENSE.md | 0 .../README.md | 28 +-- .../IndentedPrintExample.ino | 35 ++++ .../JsonGeneratorExample.ino | 70 +++++++ .../JsonHttpClient/JsonHttpClient.ino | 195 ++++++++++++++++++ .../JsonParserExample/JsonParserExample.ino | 67 ++++++ .../examples/JsonServer/JsonServer.ino | 74 +++++++ .../examples/JsonUdpBeacon/JsonUdpBeacon.ino | 55 +++++ .../arduino-json-5.6.7/include/ArduinoJson.h | 9 + .../include/ArduinoJson.hpp} | 9 + .../include/ArduinoJson/Configuration.hpp | 10 + .../include/ArduinoJson/DynamicJsonBuffer.hpp | 0 .../ArduinoJson/Internals/BlockJsonBuffer.hpp | 27 ++- .../ArduinoJson/Internals/Comments.hpp} | 12 +- .../ArduinoJson/Internals/DummyPrint.hpp | 2 +- .../Internals/DynamicStringBuilder.hpp | 4 +- .../ArduinoJson/Internals/Encoding.hpp | 10 +- .../ArduinoJson/Internals/IndentedPrint.hpp | 16 +- .../Internals/JsonBufferAllocated.hpp | 0 .../ArduinoJson/Internals/JsonFloat.hpp | 0 .../ArduinoJson/Internals/JsonInteger.hpp | 0 .../ArduinoJson/Internals/JsonParser.hpp | 13 ++ .../ArduinoJson/Internals/JsonParser.ipp} | 48 ++--- .../ArduinoJson/Internals/JsonPrintable.hpp | 9 +- .../ArduinoJson/Internals/JsonSerializer.hpp | 33 +++ .../ArduinoJson/Internals/JsonSerializer.ipp | 101 +++++++++ .../ArduinoJson/Internals/JsonVariantAs.hpp | 45 ++++ .../Internals/JsonVariantContent.hpp | 0 .../ArduinoJson/Internals/JsonVariantType.hpp | 0 .../ArduinoJson/Internals/JsonWriter.hpp | 94 ++++++--- .../include/ArduinoJson/Internals/List.hpp | 51 ++++- .../Internals/ListConstIterator.hpp | 0 .../ArduinoJson/Internals/ListIterator.hpp | 0 .../ArduinoJson/Internals/ListNode.hpp | 0 .../include/ArduinoJson/Internals/Parse.hpp | 0 .../ArduinoJson/Internals/Prettyfier.hpp | 130 ++++++++++++ .../ArduinoJson/Internals/ReferenceType.hpp | 0 .../Internals/StaticStringBuilder.hpp | 10 +- .../Internals/StreamPrintAdapter.hpp | 2 +- .../include/ArduinoJson/JsonArray.hpp | 87 ++++---- .../include/ArduinoJson/JsonArray.ipp | 80 +++++++ .../ArduinoJson/JsonArraySubscript.hpp | 24 ++- .../include/ArduinoJson/JsonBuffer.hpp | 14 +- .../include/ArduinoJson/JsonBuffer.ipp | 46 +++++ .../include/ArduinoJson/JsonObject.hpp | 100 +++++---- .../include/ArduinoJson/JsonObject.ipp | 68 ++++++ .../include/ArduinoJson/JsonObjectKey.hpp | 2 +- .../ArduinoJson/JsonObjectSubscript.hpp | 38 +++- .../include/ArduinoJson/JsonPair.hpp | 0 .../include/ArduinoJson/JsonVariant.hpp | 132 ++++++++---- .../include/ArduinoJson/JsonVariant.ipp} | 111 +++++----- .../include/ArduinoJson/JsonVariantBase.hpp | 41 ++-- .../ArduinoJson/Polyfills/attributes.hpp} | 2 + .../include/ArduinoJson/Polyfills/math.hpp | 111 ++++++++++ .../ArduinoJson/Polyfills/normalize.hpp | 0 .../include/ArduinoJson}/Print.hpp | 11 +- .../include/ArduinoJson/RawJson.hpp | 0 .../include/ArduinoJson/StaticJsonBuffer.hpp | 26 ++- .../include/ArduinoJson}/String.hpp | 16 +- .../ArduinoJson/TypeTraits/EnableIf.hpp | 0 .../TypeTraits/IsFloatingPoint.hpp | 0 .../ArduinoJson/TypeTraits/IsIntegral.hpp | 0 .../ArduinoJson/TypeTraits/IsReference.hpp | 0 .../include/ArduinoJson/TypeTraits/IsSame.hpp | 0 .../TypeTraits/IsSignedIntegral.hpp | 0 .../TypeTraits/IsUnsignedIntegral.hpp | 0 .../ArduinoJson/TypeTraits/RemoveConst.hpp | 0 .../TypeTraits/RemoveReference.hpp | 0 .../keywords.txt | 0 .../library.properties | 2 +- .../arduino-json-string-override.patch | 16 -- test/Makefile | 18 +- test/WString.h | 3 + test/modem/Makefile | 55 +---- 95 files changed, 1860 insertions(+), 1207 deletions(-) delete mode 100644 src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Prettyfier.hpp delete mode 100644 src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArray.ipp delete mode 100644 src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObject.ipp delete mode 100644 src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariant.ipp delete mode 100644 src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/isInfinity.hpp delete mode 100644 src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/isNaN.hpp delete mode 100644 src/third-party/arduino-json-5.3/src/ArduinoJson.h delete mode 100644 src/third-party/arduino-json-5.3/src/Internals/Encoding.cpp delete mode 100644 src/third-party/arduino-json-5.3/src/Internals/IndentedPrint.cpp delete mode 100644 src/third-party/arduino-json-5.3/src/Internals/List.cpp delete mode 100644 src/third-party/arduino-json-5.3/src/Internals/Prettyfier.cpp delete mode 100644 src/third-party/arduino-json-5.3/src/Internals/StaticStringBuilder.cpp delete mode 100644 src/third-party/arduino-json-5.3/src/JsonArray.cpp delete mode 100644 src/third-party/arduino-json-5.3/src/JsonBuffer.cpp delete mode 100644 src/third-party/arduino-json-5.3/src/JsonObject.cpp rename src/third-party/{arduino-json-5.3/include/ArduinoJson/Internals/Comments.hpp => arduino-json-5.6.7/ArduinoJson.h} (57%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/CHANGELOG.md (79%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/LICENSE.md (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/README.md (67%) create mode 100644 src/third-party/arduino-json-5.6.7/examples/IndentedPrintExample/IndentedPrintExample.ino create mode 100644 src/third-party/arduino-json-5.6.7/examples/JsonGeneratorExample/JsonGeneratorExample.ino create mode 100644 src/third-party/arduino-json-5.6.7/examples/JsonHttpClient/JsonHttpClient.ino create mode 100644 src/third-party/arduino-json-5.6.7/examples/JsonParserExample/JsonParserExample.ino create mode 100644 src/third-party/arduino-json-5.6.7/examples/JsonServer/JsonServer.ino create mode 100644 src/third-party/arduino-json-5.6.7/examples/JsonUdpBeacon/JsonUdpBeacon.ino create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson.h rename src/third-party/{arduino-json-5.3/include/ArduinoJson.h => arduino-json-5.6.7/include/ArduinoJson.hpp} (56%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Configuration.hpp (84%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/DynamicJsonBuffer.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/BlockJsonBuffer.hpp (74%) rename src/third-party/{arduino-json-5.3/src/Internals/Comments.cpp => arduino-json-5.6.7/include/ArduinoJson/Internals/Comments.hpp} (73%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/DummyPrint.hpp (88%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/DynamicStringBuilder.hpp (87%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/Encoding.hpp (69%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/IndentedPrint.hpp (75%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/JsonBufferAllocated.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/JsonFloat.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/JsonInteger.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/JsonParser.hpp (75%) rename src/third-party/{arduino-json-5.3/src/Internals/JsonParser.cpp => arduino-json-5.6.7/include/ArduinoJson/Internals/JsonParser.ipp} (71%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/JsonPrintable.hpp (89%) create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonSerializer.hpp create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonSerializer.ipp create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonVariantAs.hpp rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/JsonVariantContent.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/JsonVariantType.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/JsonWriter.hpp (58%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/List.hpp (53%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/ListConstIterator.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/ListIterator.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/ListNode.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/Parse.hpp (100%) create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Prettyfier.hpp rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/ReferenceType.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/StaticStringBuilder.hpp (72%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Internals/StreamPrintAdapter.hpp (90%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonArray.hpp (74%) create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArray.ipp rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonArraySubscript.hpp (74%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonBuffer.hpp (90%) create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonBuffer.ipp rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonObject.hpp (61%) create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObject.ipp rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonObjectKey.hpp (91%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonObjectSubscript.hpp (66%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonPair.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonVariant.hpp (71%) rename src/third-party/{arduino-json-5.3/src/JsonVariant.cpp => arduino-json-5.6.7/include/ArduinoJson/JsonVariant.ipp} (50%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/JsonVariantBase.hpp (79%) rename src/third-party/{arduino-json-5.3/include/ArduinoJson/Internals/ForceInline.hpp => arduino-json-5.6.7/include/ArduinoJson/Polyfills/attributes.hpp} (75%) create mode 100644 src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/math.hpp rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/Polyfills/normalize.hpp (100%) rename src/third-party/{arduino-json-5.3/include/ArduinoJson/Arduino => arduino-json-5.6.7/include/ArduinoJson}/Print.hpp (70%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/RawJson.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/StaticJsonBuffer.hpp (54%) rename src/third-party/{arduino-json-5.3/include/ArduinoJson/Arduino => arduino-json-5.6.7/include/ArduinoJson}/String.hpp (70%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/EnableIf.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/IsFloatingPoint.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/IsIntegral.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/IsReference.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/IsSame.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/IsSignedIntegral.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/IsUnsignedIntegral.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/RemoveConst.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/include/ArduinoJson/TypeTraits/RemoveReference.hpp (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/keywords.txt (100%) rename src/third-party/{arduino-json-5.3 => arduino-json-5.6.7}/library.properties (93%) delete mode 100644 src/third-party/arduino-json-string-override.patch create mode 100644 test/WString.h diff --git a/.travis.yml b/.travis.yml index 335c5317..30058eca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,7 @@ install: - ( cd ${ARDUINO_ESP8266_ROOT}/tools && python get.py ) before_script: - mkdir -p ${ARDUINO_HOME}/libraries -- ( cd ${ARDUINO_HOME}/libraries && ln -s ${TRAVIS_BUILD_DIR} firebase-arduino && ln -s ${TRAVIS_BUILD_DIR}/src/third-party/arduino-json-5.3 ArduinoJson && ln -s ${HOME}/SoftwareSerial ./ && ln -s ${HOME}/Adafruit_NeoPixel ./ && ln -s ${HOME}/Adafruit-GFX-Library ./ && ln -s ${HOME}/Adafruit_SSD1306 ./) +- ( cd ${ARDUINO_HOME}/libraries && ln -s ${TRAVIS_BUILD_DIR} firebase-arduino && ln -s ${TRAVIS_BUILD_DIR}/src/third-party/arduino-json-5.6.7 ArduinoJson && ln -s ${HOME}/SoftwareSerial ./ && ln -s ${HOME}/Adafruit_NeoPixel ./ && ln -s ${HOME}/Adafruit-GFX-Library ./ && ln -s ${HOME}/Adafruit_SSD1306 ./) script: - ${ARDUINO_ROOT}/arduino-builder -verbose -hardware ${ARDUINO_ROOT}/hardware/ -tools ${ARDUINO_ESP8266_ROOT}/tools/ -tools ${ARDUINO_ROOT}/tools-builder/ -fqbn esp8266com:esp8266:nodemcuv2 -libraries ${ARDUINO_HOME}/libraries/ -prefs build.flash_ld=${ARDUINO_ESP8266_ROOT}/tools/sdk/ld/eagle.flash.4m.ld -prefs build.flash_freq=40 -prefs build.flash_size=4M examples/FirebaseDemo_ESP8266/FirebaseDemo_ESP8266.ino - ${ARDUINO_ROOT}/arduino-builder -verbose -hardware ${ARDUINO_ROOT}/hardware/ -tools ${ARDUINO_ESP8266_ROOT}/tools/ -tools ${ARDUINO_ROOT}/tools-builder/ -fqbn esp8266com:esp8266:nodemcuv2 -libraries ${ARDUINO_HOME}/libraries/ -prefs build.flash_ld=${ARDUINO_ESP8266_ROOT}/tools/sdk/ld/eagle.flash.4m.ld -prefs build.flash_freq=40 -prefs build.flash_size=4M examples/FirebaseSerialHost_ESP8266/FirebaseSerialHost_ESP8266.ino diff --git a/src/Firebase.h b/src/Firebase.h index 4d46c425..dcf0ff1f 100644 --- a/src/Firebase.h +++ b/src/Firebase.h @@ -24,10 +24,8 @@ #include #include "FirebaseHttpClient.h" #include "FirebaseError.h" -// TODO(edcoyne): move this into our mock_arduino fork where we actually do the -// override. -#define ARDUINO_STRING_OVERRIDE -#include "third-party/arduino-json-5.3/include/ArduinoJson.h" +#define ARDUINOJSON_USE_ARDUINO_STRING 1 +#include "third-party/arduino-json-5.6.7/include/ArduinoJson.h" class FirebaseGet; class FirebaseSet; diff --git a/src/FirebaseCloudMessaging.h b/src/FirebaseCloudMessaging.h index b5b7d62d..7f716b2f 100644 --- a/src/FirebaseCloudMessaging.h +++ b/src/FirebaseCloudMessaging.h @@ -26,7 +26,8 @@ #include #include "FirebaseHttpClient.h" #include "FirebaseError.h" -#include "third-party/arduino-json-5.3/include/ArduinoJson.h" +#define ARDUINOJSON_USE_ARDUINO_STRING 1 +#include "third-party/arduino-json-5.6.7/include/ArduinoJson.h" // Defines the actual message to the client, for more detail on // options and settings see: diff --git a/src/FirebaseObject.h b/src/FirebaseObject.h index 8755914f..3f23db7c 100644 --- a/src/FirebaseObject.h +++ b/src/FirebaseObject.h @@ -17,7 +17,8 @@ #ifndef FIREBASE_OBJECT_H #define FIREBASE_OBJECT_H -#include "third-party/arduino-json-5.3/include/ArduinoJson.h" +#define ARDUINOJSON_USE_ARDUINO_STRING 1 +#include "third-party/arduino-json-5.6.7/include/ArduinoJson.h" #ifndef FIREBASE_JSONBUFFER_SIZE #define FIREBASE_JSONBUFFER_SIZE JSON_OBJECT_SIZE(32) diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Prettyfier.hpp b/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Prettyfier.hpp deleted file mode 100644 index 8f320d91..00000000 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Prettyfier.hpp +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#pragma once - -#include "IndentedPrint.hpp" - -namespace ArduinoJson { -namespace Internals { - -// Converts a compact JSON string into an indented one. -class Prettyfier : public Print { - public: - explicit Prettyfier(IndentedPrint& p) : _sink(p) { - _previousChar = 0; - _inString = false; - } - - virtual size_t write(uint8_t); - - private: - Prettyfier& operator=(const Prettyfier&); // cannot be assigned - - bool inEmptyBlock() { return _previousChar == '{' || _previousChar == '['; } - - size_t handleStringChar(uint8_t); - size_t handleMarkupChar(uint8_t); - - size_t handleBlockClose(uint8_t); - size_t handleBlockOpen(uint8_t); - size_t handleColon(); - size_t handleComma(); - size_t handleQuoteOpen(); - size_t handleNormalChar(uint8_t); - size_t indentIfNeeded(); - size_t unindentIfNeeded(); - - uint8_t _previousChar; - IndentedPrint& _sink; - bool _inString; -}; -} -} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArray.ipp b/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArray.ipp deleted file mode 100644 index 2881ed25..00000000 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArray.ipp +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#pragma once - -#include "JsonArray.hpp" -#include "JsonObject.hpp" -#include "JsonArraySubscript.hpp" - -namespace ArduinoJson { - -inline JsonArraySubscript JsonArray::operator[](size_t index) { - return JsonArraySubscript(*this, index); -} - -inline JsonVariant JsonArray::operator[](size_t index) const { - return get(index); -} - -template -inline bool JsonArray::addNode(TValue value) { - node_type *node = addNewNode(); - return node != NULL && setNodeValue(node, value); -} - -template -inline bool JsonArray::setNodeAt(size_t index, TValue value) { - node_type *node = getNodeAt(index); - return node != NULL && setNodeValue(node, value); -} - -template -inline bool JsonArray::setNodeValue(node_type *node, TValue value) { - node->content = value; - return true; -} - -template <> -inline bool JsonArray::setNodeValue(node_type *node, String &value) { - const char *copy = _buffer->strdup(value); - if (!copy) return false; - node->content = copy; - return true; -} - -inline JsonVariant JsonArray::get(size_t index) const { - node_type *node = getNodeAt(index); - return node ? node->content : JsonVariant(); -} - -template -inline T JsonArray::get(size_t index) const { - node_type *node = getNodeAt(index); - return node ? node->content.as() : JsonVariant::invalid(); -} - -template -inline bool JsonArray::is(size_t index) const { - node_type *node = getNodeAt(index); - return node ? node->content.is() : false; -} - -template -inline const JsonArraySubscript JsonVariantBase::operator[]( - int index) const { - return asArray()[index]; -} - -template <> -inline JsonArray &JsonVariant::invalid() { - return JsonArray::invalid(); -} - -template <> -inline JsonArray const &JsonVariant::invalid() { - return JsonArray::invalid(); -} - -inline JsonArray &JsonVariant::asArray() const { - if (_type == Internals::JSON_ARRAY) return *_content.asArray; - return JsonArray::invalid(); -} - -inline JsonArray &JsonArray::createNestedArray() { - if (!_buffer) return JsonArray::invalid(); - JsonArray &array = _buffer->createArray(); - add(array); - return array; -} - -inline JsonArray &JsonObject::createNestedArray(JsonObjectKey key) { - if (!_buffer) return JsonArray::invalid(); - JsonArray &array = _buffer->createArray(); - setNodeAt(key, array); - return array; -} -} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObject.ipp b/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObject.ipp deleted file mode 100644 index b8fc87ff..00000000 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObject.ipp +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#pragma once - -#include "JsonArray.hpp" -#include "JsonObject.hpp" -#include "JsonObjectSubscript.hpp" - -namespace ArduinoJson { - -inline JsonVariant JsonObject::get(JsonObjectKey key) const { - node_type *node = getNodeAt(key.c_str()); - return node ? node->content.value : JsonVariant(); -} - -template -inline T JsonObject::get(JsonObjectKey key) const { - node_type *node = getNodeAt(key.c_str()); - return node ? node->content.value.as() : JsonVariant::invalid(); -} - -template -inline bool JsonObject::is(JsonObjectKey key) const { - node_type *node = getNodeAt(key.c_str()); - return node ? node->content.value.is() : false; -} - -inline JsonObjectSubscript JsonObject::operator[]( - const char *key) { - return JsonObjectSubscript(*this, key); -} - -inline JsonObjectSubscript JsonObject::operator[]( - const String &key) { - return JsonObjectSubscript(*this, key); -} - -inline JsonVariant JsonObject::operator[](JsonObjectKey key) const { - return get(key); -} - -inline bool JsonObject::containsKey(JsonObjectKey key) const { - return getNodeAt(key.c_str()) != NULL; -} - -inline void JsonObject::remove(JsonObjectKey key) { - removeNode(getNodeAt(key.c_str())); -} - -template -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; - } - return setNodeValue(node, value); -} - -inline bool JsonObject::setNodeKey(node_type *node, JsonObjectKey key) { - if (key.needs_copy()) { - node->content.key = _buffer->strdup(key.c_str()); - if (node->content.key == NULL) return false; - } else { - node->content.key = key.c_str(); - } - return true; -} - -template -inline bool JsonObject::setNodeValue(node_type *node, TValue value) { - node->content.value = value; - return true; -} - -template <> -inline bool JsonObject::setNodeValue(node_type *node, String &value) { - node->content.value = _buffer->strdup(value); - return node->content.value; -} - -template <> -inline bool JsonObject::setNodeValue(node_type *node, const String &value) { - node->content.value = _buffer->strdup(value); - return node->content.value; -} - -template -inline const JsonObjectSubscript JsonVariantBase:: -operator[](const char *key) const { - return asObject()[key]; -} - -template -inline const JsonObjectSubscript JsonVariantBase:: -operator[](const String &key) const { - return asObject()[key]; -} - -template <> -inline JsonObject const &JsonVariant::invalid() { - return JsonObject::invalid(); -} - -template <> -inline JsonObject &JsonVariant::invalid() { - return JsonObject::invalid(); -} - -inline JsonObject &JsonVariant::asObject() const { - if (_type == Internals::JSON_OBJECT) return *_content.asObject; - return JsonObject::invalid(); -} - -inline JsonObject &JsonObject::createNestedObject(JsonObjectKey key) { - if (!_buffer) return JsonObject::invalid(); - JsonObject &array = _buffer->createObject(); - setNodeAt(key, array); - return array; -} - -inline JsonObject &JsonArray::createNestedObject() { - if (!_buffer) return JsonObject::invalid(); - JsonObject &object = _buffer->createObject(); - add(object); - return object; -} -} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariant.ipp b/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariant.ipp deleted file mode 100644 index 9decbda4..00000000 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariant.ipp +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#pragma once - -#include "Configuration.hpp" -#include "JsonVariant.hpp" -#include "Internals/Parse.hpp" - -#include - -namespace ArduinoJson { - -inline JsonVariant::JsonVariant(bool value) { - using namespace Internals; - _type = JSON_BOOLEAN; - _content.asInteger = static_cast(value); -} - -inline JsonVariant::JsonVariant(const char *value) { - _type = Internals::JSON_STRING; - _content.asString = value; -} - -inline JsonVariant::JsonVariant(RawJson value) { - _type = Internals::JSON_UNPARSED; - _content.asString = value; -} - -inline JsonVariant::JsonVariant(JsonArray &array) { - _type = Internals::JSON_ARRAY; - _content.asArray = &array; -} - -inline JsonVariant::JsonVariant(JsonObject &object) { - _type = Internals::JSON_OBJECT; - _content.asObject = &object; -} - -template -inline T JsonVariant::invalid() { - return T(); -} - -inline Internals::JsonInteger JsonVariant::asInteger() const { - using namespace Internals; - switch (_type) { - case JSON_UNDEFINED: - return 0; - case JSON_POSITIVE_INTEGER: - case JSON_BOOLEAN: - return _content.asInteger; - case JSON_NEGATIVE_INTEGER: - return -static_cast(_content.asInteger); - case JSON_STRING: - case JSON_UNPARSED: - if (!_content.asString) return 0; - if (!strcmp("true", _content.asString)) return 1; - return parse(_content.asString); - default: - return static_cast(_content.asFloat); - } -} - -inline Internals::JsonUInt JsonVariant::asUnsignedInteger() const { - using namespace Internals; - switch (_type) { - case JSON_UNDEFINED: - return 0; - case JSON_POSITIVE_INTEGER: - case JSON_BOOLEAN: - case JSON_NEGATIVE_INTEGER: - return _content.asInteger; - case JSON_STRING: - case JSON_UNPARSED: - if (!_content.asString) return 0; - if (!strcmp("true", _content.asString)) return 1; - return parse(_content.asString); - default: - return static_cast(_content.asFloat); - } -} - -#if ARDUINOJSON_ENABLE_STD_STREAM -inline std::ostream &operator<<(std::ostream &os, const JsonVariant &source) { - return source.printTo(os); -} -#endif - -} // namespace ArduinoJson diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/isInfinity.hpp b/src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/isInfinity.hpp deleted file mode 100644 index cd7fd10a..00000000 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/isInfinity.hpp +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#pragma once - -// If Visual Studo <= 2012 -#if defined(_MSC_VER) && _MSC_VER <= 1700 -#include -#else -#include -#endif - -namespace ArduinoJson { -namespace Polyfills { - -// If Visual Studo <= 2012 -#if defined(_MSC_VER) && _MSC_VER <= 1700 -template -bool isInfinity(T x) { - return !_finite(x); -} -#else -template -bool isInfinity(T x) { - return isinf(x); -} - -#ifdef __GLIBC__ -template <> -inline bool isInfinity(double x) { - return isinfl(x); -} - -template <> -inline bool isInfinity(float x) { - return isinff(x); -} -#endif -#endif -} -} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/isNaN.hpp b/src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/isNaN.hpp deleted file mode 100644 index 573a6e0a..00000000 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/isNaN.hpp +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#pragma once - -// If Visual Studo <= 2012 -#if defined(_MSC_VER) && _MSC_VER <= 1700 -#include -#else -#include -#endif - -namespace ArduinoJson { -namespace Polyfills { - -// If Visual Studo <= 2012 -#if defined(_MSC_VER) && _MSC_VER <= 1700 -template -bool isNaN(T x) { - return _isnan(x) != 0; -} -#else -template -bool isNaN(T x) { - return isnan(x); -} - -#ifdef __GLIBC__ -template <> -inline bool isNaN(double x) { - return isnanl(x); -} - -template <> -inline bool isNaN(float x) { - return isnanf(x); -} -#endif - -#endif -} -} diff --git a/src/third-party/arduino-json-5.3/src/ArduinoJson.h b/src/third-party/arduino-json-5.3/src/ArduinoJson.h deleted file mode 100644 index d884cadc..00000000 --- a/src/third-party/arduino-json-5.3/src/ArduinoJson.h +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -// About this file -// --------------- -// This file is here to please the Arduino IDE. It must be present in the src/ -// for the IDE to find it. Feel free to ignore this file if your working in -// another environment - -#include "../include/ArduinoJson.h" diff --git a/src/third-party/arduino-json-5.3/src/Internals/Encoding.cpp b/src/third-party/arduino-json-5.3/src/Internals/Encoding.cpp deleted file mode 100644 index d9d070d6..00000000 --- a/src/third-party/arduino-json-5.3/src/Internals/Encoding.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#include "../../include/ArduinoJson/Internals/Encoding.hpp" - -// How to escape special chars: -// _escapeTable[2*i+1] => the special char -// _escapeTable[2*i] => the char to use instead -const char ArduinoJson::Internals::Encoding::_escapeTable[] = - "\"\"\\\\b\bf\fn\nr\rt\t"; diff --git a/src/third-party/arduino-json-5.3/src/Internals/IndentedPrint.cpp b/src/third-party/arduino-json-5.3/src/Internals/IndentedPrint.cpp deleted file mode 100644 index f59fb5a2..00000000 --- a/src/third-party/arduino-json-5.3/src/Internals/IndentedPrint.cpp +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#include "../../include/ArduinoJson/Internals/IndentedPrint.hpp" - -using namespace ArduinoJson::Internals; - -size_t IndentedPrint::write(uint8_t c) { - size_t n = 0; - - if (isNewLine) n += writeTabs(); - - n += sink->write(c); - - isNewLine = c == '\n'; - - return n; -} - -inline size_t IndentedPrint::writeTabs() { - size_t n = 0; - - for (int i = 0; i < level * tabSize; i++) n += sink->write(' '); - - return n; -} diff --git a/src/third-party/arduino-json-5.3/src/Internals/List.cpp b/src/third-party/arduino-json-5.3/src/Internals/List.cpp deleted file mode 100644 index c31a859f..00000000 --- a/src/third-party/arduino-json-5.3/src/Internals/List.cpp +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#include "../../include/ArduinoJson/Internals/List.hpp" - -#include "../../include/ArduinoJson/JsonPair.hpp" -#include "../../include/ArduinoJson/JsonVariant.hpp" - -using namespace ArduinoJson; -using namespace ArduinoJson::Internals; - -template -size_t List::size() const { - size_t nodeCount = 0; - for (node_type *node = _firstNode; node; node = node->next) nodeCount++; - return nodeCount; -} - -template -typename List::node_type *List::addNewNode() { - node_type *newNode = new (_buffer) node_type(); - - if (_firstNode) { - node_type *lastNode = _firstNode; - while (lastNode->next) lastNode = lastNode->next; - lastNode->next = newNode; - } else { - _firstNode = newNode; - } - - return newNode; -} - -template -void List::removeNode(node_type *nodeToRemove) { - if (!nodeToRemove) return; - if (nodeToRemove == _firstNode) { - _firstNode = nodeToRemove->next; - } else { - for (node_type *node = _firstNode; node; node = node->next) - if (node->next == nodeToRemove) node->next = nodeToRemove->next; - } -} - -template class ArduinoJson::Internals::List; -template class ArduinoJson::Internals::List; diff --git a/src/third-party/arduino-json-5.3/src/Internals/Prettyfier.cpp b/src/third-party/arduino-json-5.3/src/Internals/Prettyfier.cpp deleted file mode 100644 index 79bfe763..00000000 --- a/src/third-party/arduino-json-5.3/src/Internals/Prettyfier.cpp +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#include "../../include/ArduinoJson/Internals/Prettyfier.hpp" - -using namespace ArduinoJson::Internals; - -size_t Prettyfier::write(uint8_t c) { - size_t n = _inString ? handleStringChar(c) : handleMarkupChar(c); - _previousChar = c; - return n; -} - -inline size_t Prettyfier::handleStringChar(uint8_t c) { - bool isQuote = c == '"' && _previousChar != '\\'; - - if (isQuote) _inString = false; - - return _sink.write(c); -} - -inline size_t Prettyfier::handleMarkupChar(uint8_t c) { - switch (c) { - case '{': - case '[': - return handleBlockOpen(c); - - case '}': - case ']': - return handleBlockClose(c); - - case ':': - return handleColon(); - - case ',': - return handleComma(); - - case '"': - return handleQuoteOpen(); - - default: - return handleNormalChar(c); - } -} - -inline size_t Prettyfier::handleBlockOpen(uint8_t c) { - return indentIfNeeded() + _sink.write(c); -} - -inline size_t Prettyfier::handleBlockClose(uint8_t c) { - return unindentIfNeeded() + _sink.write(c); -} - -inline size_t Prettyfier::handleColon() { - return _sink.write(':') + _sink.write(' '); -} - -inline size_t Prettyfier::handleComma() { - return _sink.write(',') + _sink.println(); -} - -inline size_t Prettyfier::handleQuoteOpen() { - _inString = true; - return indentIfNeeded() + _sink.write('"'); -} - -inline size_t Prettyfier::handleNormalChar(uint8_t c) { - return indentIfNeeded() + _sink.write(c); -} - -size_t Prettyfier::indentIfNeeded() { - if (!inEmptyBlock()) return 0; - - _sink.indent(); - return _sink.println(); -} - -size_t Prettyfier::unindentIfNeeded() { - if (inEmptyBlock()) return 0; - - _sink.unindent(); - return _sink.println(); -} diff --git a/src/third-party/arduino-json-5.3/src/Internals/StaticStringBuilder.cpp b/src/third-party/arduino-json-5.3/src/Internals/StaticStringBuilder.cpp deleted file mode 100644 index 4ac5d3f3..00000000 --- a/src/third-party/arduino-json-5.3/src/Internals/StaticStringBuilder.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#include "../../include/ArduinoJson/Internals/StaticStringBuilder.hpp" - -using namespace ArduinoJson::Internals; - -size_t StaticStringBuilder::write(uint8_t c) { - if (length >= capacity) return 0; - - buffer[length++] = c; - buffer[length] = '\0'; - return 1; -} diff --git a/src/third-party/arduino-json-5.3/src/JsonArray.cpp b/src/third-party/arduino-json-5.3/src/JsonArray.cpp deleted file mode 100644 index 7d39ced0..00000000 --- a/src/third-party/arduino-json-5.3/src/JsonArray.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#include "../include/ArduinoJson/JsonArray.hpp" - -#include "../include/ArduinoJson/JsonBuffer.hpp" -#include "../include/ArduinoJson/JsonObject.hpp" - -using namespace ArduinoJson; -using namespace ArduinoJson::Internals; - -JsonArray JsonArray::_invalid(NULL); - -JsonArray::node_type *JsonArray::getNodeAt(size_t index) const { - node_type *node = _firstNode; - while (node && index--) node = node->next; - return node; -} - -void JsonArray::removeAt(size_t index) { removeNode(getNodeAt(index)); } - -void JsonArray::writeTo(JsonWriter &writer) const { - writer.beginArray(); - - const node_type *child = _firstNode; - while (child) { - child->content.writeTo(writer); - - child = child->next; - if (!child) break; - - writer.writeComma(); - } - - writer.endArray(); -} diff --git a/src/third-party/arduino-json-5.3/src/JsonBuffer.cpp b/src/third-party/arduino-json-5.3/src/JsonBuffer.cpp deleted file mode 100644 index 0dac24dd..00000000 --- a/src/third-party/arduino-json-5.3/src/JsonBuffer.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#include "../include/ArduinoJson/JsonBuffer.hpp" - -#include "../include/ArduinoJson/Internals/JsonParser.hpp" -#include "../include/ArduinoJson/JsonArray.hpp" -#include "../include/ArduinoJson/JsonObject.hpp" - -using namespace ArduinoJson; -using namespace ArduinoJson::Internals; - -JsonArray &JsonBuffer::createArray() { - JsonArray *ptr = new (this) JsonArray(this); - return ptr ? *ptr : JsonArray::invalid(); -} - -JsonObject &JsonBuffer::createObject() { - JsonObject *ptr = new (this) JsonObject(this); - return ptr ? *ptr : JsonObject::invalid(); -} - -JsonArray &JsonBuffer::parseArray(char *json, uint8_t nestingLimit) { - JsonParser parser(this, json, nestingLimit); - return parser.parseArray(); -} - -JsonObject &JsonBuffer::parseObject(char *json, uint8_t nestingLimit) { - JsonParser parser(this, json, nestingLimit); - return parser.parseObject(); -} - -JsonVariant JsonBuffer::parse(char *json, uint8_t nestingLimit) { - JsonParser parser(this, json, nestingLimit); - return parser.parseVariant(); -} - -char *JsonBuffer::strdup(const char *source, size_t length) { - size_t size = length + 1; - char *dest = static_cast(alloc(size)); - if (dest != NULL) memcpy(dest, source, size); - return dest; -} diff --git a/src/third-party/arduino-json-5.3/src/JsonObject.cpp b/src/third-party/arduino-json-5.3/src/JsonObject.cpp deleted file mode 100644 index a81772ca..00000000 --- a/src/third-party/arduino-json-5.3/src/JsonObject.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright Benoit Blanchon 2014-2016 -// MIT License -// -// Arduino JSON library -// https://github.com/bblanchon/ArduinoJson -// If you like this project, please add a star! - -#include "../include/ArduinoJson/JsonObject.hpp" - -#include // for strcmp - -#include "../include/ArduinoJson/Internals/StaticStringBuilder.hpp" -#include "../include/ArduinoJson/JsonArray.hpp" -#include "../include/ArduinoJson/JsonBuffer.hpp" - -using namespace ArduinoJson; -using namespace ArduinoJson::Internals; - -JsonObject JsonObject::_invalid(NULL); - -JsonObject::node_type *JsonObject::getNodeAt(const char *key) const { - for (node_type *node = _firstNode; node; node = node->next) { - if (!strcmp(node->content.key, key)) return node; - } - return NULL; -} - -void JsonObject::writeTo(JsonWriter &writer) const { - writer.beginObject(); - - const node_type *node = _firstNode; - while (node) { - writer.writeString(node->content.key); - writer.writeColon(); - node->content.value.writeTo(writer); - - node = node->next; - if (!node) break; - - writer.writeComma(); - } - - writer.endObject(); -} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Comments.hpp b/src/third-party/arduino-json-5.6.7/ArduinoJson.h similarity index 57% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Comments.hpp rename to src/third-party/arduino-json-5.6.7/ArduinoJson.h index 21763cc3..e18b432e 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Comments.hpp +++ b/src/third-party/arduino-json-5.6.7/ArduinoJson.h @@ -5,10 +5,4 @@ // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! -#pragma once - -namespace ArduinoJson { -namespace Internals { -const char *skipSpacesAndComments(const char *ptr); -} -} +#include "include/ArduinoJson.h" diff --git a/src/third-party/arduino-json-5.3/CHANGELOG.md b/src/third-party/arduino-json-5.6.7/CHANGELOG.md similarity index 79% rename from src/third-party/arduino-json-5.3/CHANGELOG.md rename to src/third-party/arduino-json-5.6.7/CHANGELOG.md index 76a46589..070cdcf5 100644 --- a/src/third-party/arduino-json-5.3/CHANGELOG.md +++ b/src/third-party/arduino-json-5.6.7/CHANGELOG.md @@ -1,6 +1,70 @@ ArduinoJson: change log ======================= +v5.6.7 +------ + +* Fixed `array[idx].as()` and `object[key].as()` +* Fixed return value of `JsonObject::set()` (issue #350) +* Fixed undefined behavior in `Prettyfier` and `Print` (issue #354) +* Fixed parser that incorrectly rejected floats containing a `+` (issue #349) + +v5.6.6 +------ + +* Fixed `-Wparentheses` warning introduced in v5.6.5 (PR #335 by @nuket) +* Added `.mbedignore` for ARM mbdeb (PR #334 by @nuket) +* Fixed `JsonVariant::success()` which didn't propagate `JsonArray::success()` nor `JsonObject::success()` (issue #342). + +v5.6.5 +------ + +* `as()` now returns `true` when input is `null` (issue #330) + +v5.6.4 +------ + +* Fixed error in float serialization (issue #324) + +v5.6.3 +------ + +* Improved speed of float serialization (about twice faster) +* Added `as()` as a synonym for `as()`... (issue #291) +* Fixed `call of overloaded isinf(double&) is ambiguous` (issue #284) + +v5.6.2 +------ + +* Fixed build when another lib does `#undef isnan` (issue #284) + +v5.6.1 +------ + +* Added missing `#pragma once` (issue #310) + +v5.6.0 +------ + +* ArduinoJson is now a header-only library (issue #199) + +v5.5.1 +------ + +* Fixed compilation error with Intel Galileo (issue #299) + +v5.5.0 +------ + +* Added `JsonVariant::success()` (issue #279) +* Renamed `JsonVariant::invalid()` to `JsonVariant::defaultValue()` + +v5.4.0 +------ + +* Changed `::String` to `ArduinoJson::String` (issue #275) +* Changed `::Print` to `ArduinoJson::Print` too + v5.3.0 ------ @@ -73,7 +137,7 @@ v5.0.3 v5.0.2 ------ -* Fixed segmentation fault in `parseObject(String)` and `parseArray(String)`, when the +* Fixed segmentation fault in `parseObject(String)` and `parseArray(String)`, when the `StaticJsonBuffer` is too small to hold a copy of the string * Fixed Clang warning "register specifier is deprecated" (issue #102) * Fixed GCC warning "declaration shadows a member" (issue #103) @@ -189,14 +253,14 @@ v3.1 Old generator API: - JsonObject<3> root; + JsonObject<3> root; root.add("sensor", "gps"); root.add("time", 1351824120); root.add("data", array); New generator API: - JsonObject<3> root; + JsonObject<3> root; root["sensor"] = "gps"; root["time"] = 1351824120; root["data"] = array; @@ -253,7 +317,7 @@ v1.1 * Example: changed `char* json` into `char[] json` so that the bytes are not write protected * Fixed parsing bug when the JSON contains multi-dimensional arrays -v1.0 +v1.0 ---- Initial release diff --git a/src/third-party/arduino-json-5.3/LICENSE.md b/src/third-party/arduino-json-5.6.7/LICENSE.md similarity index 100% rename from src/third-party/arduino-json-5.3/LICENSE.md rename to src/third-party/arduino-json-5.6.7/LICENSE.md diff --git a/src/third-party/arduino-json-5.3/README.md b/src/third-party/arduino-json-5.6.7/README.md similarity index 67% rename from src/third-party/arduino-json-5.3/README.md rename to src/third-party/arduino-json-5.6.7/README.md index ae1d7c4a..f578c008 100644 --- a/src/third-party/arduino-json-5.3/README.md +++ b/src/third-party/arduino-json-5.6.7/README.md @@ -20,6 +20,7 @@ Features * Portable (written in C++98) * Self-contained (no external dependency) * Small footprint +* Header-only library * MIT License Works on @@ -28,7 +29,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...) @@ -85,9 +86,6 @@ From Arduino's Forum user `jflaplante`: > I tried aJson json-arduino before trying your library. I always ran into memory problem after a while. > I have no such problem so far with your library. It is working perfectly with my web services. -From Arduino's Forum user `gbathree`: -> Thanks so much - this is an awesome library! If you want to see what we're doing with it - the project is located at www.photosynq.org. - From StackOverflow user `thegreendroid`: > It has a really elegant, simple API and it works like a charm on embedded and Windows/Linux platforms. We recently started using this on an embedded project and I can vouch for its quality. @@ -110,14 +108,20 @@ 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 USA +* Surge Communications USA +* Alex Scott United Kingdom +* Firepick Services LLC USA +* A B Doodkorte Netherlands +* Scott Smith USA +* Johann Stieger Austria +* Gustavo Donizeti Gini Brazil +* Charles-Henri Hallard France +* Martijn van den Burg Netherlands +* Nick Koumaris Greece +* Jon Williams USA +* Kestutis Liaugminas Lithuania +* Darlington Adibe Nigeria --- diff --git a/src/third-party/arduino-json-5.6.7/examples/IndentedPrintExample/IndentedPrintExample.ino b/src/third-party/arduino-json-5.6.7/examples/IndentedPrintExample/IndentedPrintExample.ino new file mode 100644 index 00000000..9e86f0f5 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/examples/IndentedPrintExample/IndentedPrintExample.ino @@ -0,0 +1,35 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#include + +using namespace ArduinoJson::Internals; + +void setup() { + Serial.begin(9600); + while (!Serial) { + // wait serial port initialization + } + + IndentedPrint serial(Serial); + serial.setTabSize(4); + + serial.println("This is at indentation 0"); + serial.indent(); + serial.println("This is at indentation 1"); + serial.println("This is also at indentation 1"); + serial.indent(); + serial.println("This is at indentation 2"); + + serial.unindent(); + serial.unindent(); + serial.println("This is back at indentation 0"); +} + +void loop() { + // not used in this example +} diff --git a/src/third-party/arduino-json-5.6.7/examples/JsonGeneratorExample/JsonGeneratorExample.ino b/src/third-party/arduino-json-5.6.7/examples/JsonGeneratorExample/JsonGeneratorExample.ino new file mode 100644 index 00000000..717a2276 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/examples/JsonGeneratorExample/JsonGeneratorExample.ino @@ -0,0 +1,70 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#include + +void setup() { + Serial.begin(9600); + while (!Serial) { + // wait serial port initialization + } + + // Memory pool for JSON object tree. + // + // Inside the brackets, 200 is the size of the pool in bytes. + // If the JSON object is more complex, you need to increase that value. + StaticJsonBuffer<200> jsonBuffer; + + // StaticJsonBuffer allocates memory on the stack, it can be + // replaced by DynamicJsonBuffer which allocates in the heap. + // It's simpler but less efficient. + // + // DynamicJsonBuffer jsonBuffer; + + // Create the root of the object tree. + // + // It's a reference to the JsonObject, the actual bytes are inside the + // JsonBuffer with all the other nodes of the object tree. + // Memory is freed when jsonBuffer goes out of scope. + JsonObject& root = jsonBuffer.createObject(); + + // Add values in the object + // + // Most of the time, you can rely on the implicit casts. + // In other case, you can do root.set("time", 1351824120); + root["sensor"] = "gps"; + root["time"] = 1351824120; + + // Add a nested array. + // + // It's also possible to create the array separately and add it to the + // JsonObject but it's less efficient. + JsonArray& data = root.createNestedArray("data"); + data.add(double_with_n_digits(48.756080, 6)); + data.add(double_with_n_digits(2.302038, 6)); + + root.printTo(Serial); + // This prints: + // {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]} + + Serial.println(); + + root.prettyPrintTo(Serial); + // This prints: + // { + // "sensor": "gps", + // "time": 1351824120, + // "data": [ + // 48.756080, + // 2.302038 + // ] + // } +} + +void loop() { + // not used in this example +} diff --git a/src/third-party/arduino-json-5.6.7/examples/JsonHttpClient/JsonHttpClient.ino b/src/third-party/arduino-json-5.6.7/examples/JsonHttpClient/JsonHttpClient.ino new file mode 100644 index 00000000..6bb3175d --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/examples/JsonHttpClient/JsonHttpClient.ino @@ -0,0 +1,195 @@ +// Sample Arduino Json Web Client +// Downloads and parse http://jsonplaceholder.typicode.com/users/1 +// +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#include +#include +#include + +EthernetClient client; + +const char* server = "jsonplaceholder.typicode.com"; // server's address +const char* resource = "/users/1"; // http resource +const unsigned long BAUD_RATE = 9600; // serial connection speed +const unsigned long HTTP_TIMEOUT = 10000; // max respone time from server +const size_t MAX_CONTENT_SIZE = 512; // max size of the HTTP response + +// The type of data that we want to extract from the page +struct UserData { + char name[32]; + char company[32]; +}; + +// ARDUINO entry point #1: runs once when you press reset or power the board +void setup() { + initSerial(); + initEthernet(); +} + +// ARDUINO entry point #2: runs over and over again forever +void loop() { + if (connect(server)) { + if (sendRequest(server, resource) && skipResponseHeaders()) { + char response[MAX_CONTENT_SIZE]; + readReponseContent(response, sizeof(response)); + + UserData userData; + if (parseUserData(response, &userData)) { + printUserData(&userData); + } + } + disconnect(); + } + wait(); +} + +// Initialize Serial port +void initSerial() { + Serial.begin(BAUD_RATE); + while (!Serial) { + ; // wait for serial port to initialize + } + Serial.println("Serial ready"); +} + +// Initialize Ethernet library +void initEthernet() { + byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; + if (!Ethernet.begin(mac)) { + Serial.println("Failed to configure Ethernet"); + return; + } + Serial.println("Ethernet ready"); + delay(1000); +} + +// Open connection to the HTTP server +bool connect(const char* hostName) { + Serial.print("Connect to "); + Serial.println(hostName); + + bool ok = client.connect(hostName, 80); + + Serial.println(ok ? "Connected" : "Connection Failed!"); + return ok; +} + +// Send the HTTP GET request to the server +bool sendRequest(const char* host, const char* resource) { + Serial.print("GET "); + Serial.println(resource); + + client.print("GET "); + client.print(resource); + client.println(" HTTP/1.1"); + client.print("Host: "); + client.println(server); + client.println("Connection: close"); + client.println(); + + return true; +} + +// Skip HTTP headers so that we are at the beginning of the response's body +bool skipResponseHeaders() { + // HTTP headers end with an empty line + char endOfHeaders[] = "\r\n\r\n"; + + client.setTimeout(HTTP_TIMEOUT); + bool ok = client.find(endOfHeaders); + + if (!ok) { + Serial.println("No response or invalid response!"); + } + + return ok; +} + +// Read the body of the response from the HTTP server +void readReponseContent(char* content, size_t maxSize) { + size_t length = client.readBytes(content, maxSize); + content[length] = 0; + Serial.println(content); +} + +// Parse the JSON from the input string and extract the interesting values +// Here is the JSON we need to parse +// { +// "id": 1, +// "name": "Leanne Graham", +// "username": "Bret", +// "email": "Sincere@april.biz", +// "address": { +// "street": "Kulas Light", +// "suite": "Apt. 556", +// "city": "Gwenborough", +// "zipcode": "92998-3874", +// "geo": { +// "lat": "-37.3159", +// "lng": "81.1496" +// } +// }, +// "phone": "1-770-736-8031 x56442", +// "website": "hildegard.org", +// "company": { +// "name": "Romaguera-Crona", +// "catchPhrase": "Multi-layered client-server neural-net", +// "bs": "harness real-time e-markets" +// } +// } +bool parseUserData(char* content, struct UserData* userData) { + // Compute optimal size of the JSON buffer according to what we need to parse. + // This is only required if you use StaticJsonBuffer. + const size_t BUFFER_SIZE = + JSON_OBJECT_SIZE(8) // the root object has 8 elements + + JSON_OBJECT_SIZE(5) // the "address" object has 5 elements + + JSON_OBJECT_SIZE(2) // the "geo" object has 2 elements + + JSON_OBJECT_SIZE(3); // the "company" object has 3 elements + + // Allocate a temporary memory pool on the stack + StaticJsonBuffer jsonBuffer; + // If the memory pool is too big for the stack, use this instead: + // DynamicJsonBuffer jsonBuffer; + + JsonObject& root = jsonBuffer.parseObject(content); + + if (!root.success()) { + Serial.println("JSON parsing failed!"); + return false; + } + + // Here were copy the strings we're interested in + strcpy(userData->name, root["name"]); + strcpy(userData->company, root["company"]["name"]); + // It's not mandatory to make a copy, you could just use the pointers + // Since, they are pointing inside the "content" buffer, so you need to make + // sure it's still in memory when you read the string + + return true; +} + +// Print the data extracted from the JSON +void printUserData(const struct UserData* userData) { + Serial.print("Name = "); + Serial.println(userData->name); + Serial.print("Company = "); + Serial.println(userData->company); +} + +// Close the connection with the HTTP server +void disconnect() { + Serial.println("Disconnect"); + client.stop(); +} + +// Pause for a 1 minute +void wait() { + Serial.println("Wait 60 seconds"); + delay(60000); +} diff --git a/src/third-party/arduino-json-5.6.7/examples/JsonParserExample/JsonParserExample.ino b/src/third-party/arduino-json-5.6.7/examples/JsonParserExample/JsonParserExample.ino new file mode 100644 index 00000000..13536019 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/examples/JsonParserExample/JsonParserExample.ino @@ -0,0 +1,67 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#include + +void setup() { + Serial.begin(9600); + while (!Serial) { + // wait serial port initialization + } + + // Memory pool for JSON object tree. + // + // Inside the brackets, 200 is the size of the pool in bytes, + // If the JSON object is more complex, you need to increase that value. + StaticJsonBuffer<200> jsonBuffer; + + // StaticJsonBuffer allocates memory on the stack, it can be + // replaced by DynamicJsonBuffer which allocates in the heap. + // It's simpler but less efficient. + // + // DynamicJsonBuffer jsonBuffer; + + // JSON input string. + // + // It's better to use a char[] as shown here. + // If you use a const char* or a String, ArduinoJson will + // have to make a copy of the input in the JsonBuffer. + char json[] = + "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; + + // Root of the object tree. + // + // It's a reference to the JsonObject, the actual bytes are inside the + // JsonBuffer with all the other nodes of the object tree. + // Memory is freed when jsonBuffer goes out of scope. + JsonObject& root = jsonBuffer.parseObject(json); + + // Test if parsing succeeds. + if (!root.success()) { + Serial.println("parseObject() failed"); + return; + } + + // Fetch values. + // + // Most of the time, you can rely on the implicit casts. + // In other case, you can do root["time"].as(); + const char* sensor = root["sensor"]; + long time = root["time"]; + double latitude = root["data"][0]; + double longitude = root["data"][1]; + + // Print values. + Serial.println(sensor); + Serial.println(time); + Serial.println(latitude, 6); + Serial.println(longitude, 6); +} + +void loop() { + // not used in this example +} diff --git a/src/third-party/arduino-json-5.6.7/examples/JsonServer/JsonServer.ino b/src/third-party/arduino-json-5.6.7/examples/JsonServer/JsonServer.ino new file mode 100644 index 00000000..895b6729 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/examples/JsonServer/JsonServer.ino @@ -0,0 +1,74 @@ +// Sample Arduino Json Web Server +// Created by Benoit Blanchon. +// Heavily inspired by "Web Server" from David A. Mellis and Tom Igoe + +#include +#include +#include + +byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; +IPAddress ip(192, 168, 0, 177); +EthernetServer server(80); + +bool readRequest(EthernetClient& client) { + bool currentLineIsBlank = true; + while (client.connected()) { + if (client.available()) { + char c = client.read(); + if (c == '\n' && currentLineIsBlank) { + return true; + } else if (c == '\n') { + currentLineIsBlank = true; + } else if (c != '\r') { + currentLineIsBlank = false; + } + } + } + return false; +} + +JsonObject& prepareResponse(JsonBuffer& jsonBuffer) { + JsonObject& root = jsonBuffer.createObject(); + + JsonArray& analogValues = root.createNestedArray("analog"); + for (int pin = 0; pin < 6; pin++) { + int value = analogRead(pin); + analogValues.add(value); + } + + JsonArray& digitalValues = root.createNestedArray("digital"); + for (int pin = 0; pin < 14; pin++) { + int value = digitalRead(pin); + digitalValues.add(value); + } + + return root; +} + +void writeResponse(EthernetClient& client, JsonObject& json) { + client.println("HTTP/1.1 200 OK"); + client.println("Content-Type: application/json"); + client.println("Connection: close"); + client.println(); + + json.prettyPrintTo(client); +} + +void setup() { + Ethernet.begin(mac, ip); + server.begin(); +} + +void loop() { + EthernetClient client = server.available(); + if (client) { + bool success = readRequest(client); + if (success) { + StaticJsonBuffer<500> jsonBuffer; + JsonObject& json = prepareResponse(jsonBuffer); + writeResponse(client, json); + } + delay(1); + client.stop(); + } +} diff --git a/src/third-party/arduino-json-5.6.7/examples/JsonUdpBeacon/JsonUdpBeacon.ino b/src/third-party/arduino-json-5.6.7/examples/JsonUdpBeacon/JsonUdpBeacon.ino new file mode 100644 index 00000000..7d0fa38a --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/examples/JsonUdpBeacon/JsonUdpBeacon.ino @@ -0,0 +1,55 @@ +// Send a JSON object on UDP at regular interval +// +// You can easily test this program with netcat: +// $ nc -ulp 8888 +// +// by Benoit Blanchon, MIT License 2015-2016 + +#include +#include +#include + +byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; +IPAddress localIp(192, 168, 0, 177); +IPAddress remoteIp(192, 168, 0, 109); +unsigned int remotePort = 8888; +unsigned localPort = 8888; +EthernetUDP udp; + +JsonObject& buildJson(JsonBuffer& jsonBuffer) { + JsonObject& root = jsonBuffer.createObject(); + + JsonArray& analogValues = root.createNestedArray("analog"); + for (int pin = 0; pin < 6; pin++) { + int value = analogRead(pin); + analogValues.add(value); + } + + JsonArray& digitalValues = root.createNestedArray("digital"); + for (int pin = 0; pin < 14; pin++) { + int value = digitalRead(pin); + digitalValues.add(value); + } + + return root; +} + +void sendJson(JsonObject& json) { + udp.beginPacket(remoteIp, remotePort); + json.printTo(udp); + udp.println(); + udp.endPacket(); +} + +void setup() { + Ethernet.begin(mac, localIp); + udp.begin(localPort); +} + +void loop() { + delay(1000); + + StaticJsonBuffer<300> jsonBuffer; + JsonObject& json = buildJson(jsonBuffer); + sendJson(json); +} diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson.h b/src/third-party/arduino-json-5.6.7/include/ArduinoJson.h new file mode 100644 index 00000000..6bed176a --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson.h @@ -0,0 +1,9 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#include "ArduinoJson.hpp" +using namespace ArduinoJson; diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson.h b/src/third-party/arduino-json-5.6.7/include/ArduinoJson.hpp similarity index 56% rename from src/third-party/arduino-json-5.3/include/ArduinoJson.h rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson.hpp index 0a3f49a9..8ade581d 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson.h +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson.hpp @@ -5,9 +5,18 @@ // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! +#pragma once + #include "ArduinoJson/DynamicJsonBuffer.hpp" #include "ArduinoJson/JsonArray.hpp" #include "ArduinoJson/JsonObject.hpp" #include "ArduinoJson/StaticJsonBuffer.hpp" +#include "ArduinoJson/Internals/JsonParser.ipp" +#include "ArduinoJson/Internals/JsonSerializer.ipp" +#include "ArduinoJson/JsonArray.ipp" +#include "ArduinoJson/JsonBuffer.ipp" +#include "ArduinoJson/JsonObject.ipp" +#include "ArduinoJson/JsonVariant.ipp" + using namespace ArduinoJson; diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Configuration.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Configuration.hpp similarity index 84% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Configuration.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Configuration.hpp index 9b37548e..599b85f1 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Configuration.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Configuration.hpp @@ -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 diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/DynamicJsonBuffer.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/DynamicJsonBuffer.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/DynamicJsonBuffer.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/DynamicJsonBuffer.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/BlockJsonBuffer.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/BlockJsonBuffer.hpp similarity index 74% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/BlockJsonBuffer.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/BlockJsonBuffer.hpp index 4fa5a26f..33873608 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/BlockJsonBuffer.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/BlockJsonBuffer.hpp @@ -11,12 +11,26 @@ #include +#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 + namespace ArduinoJson { namespace Internals { class DefaultAllocator { public: - void* allocate(size_t size) { return malloc(size); } - void deallocate(void* pointer) { free(pointer); } + void* allocate(size_t size) { + return malloc(size); + } + void deallocate(void* pointer) { + free(pointer); + } }; template @@ -51,7 +65,6 @@ class BlockJsonBuffer : public JsonBuffer { return total; } - protected: virtual void* alloc(size_t bytes) { return canAllocInHead(bytes) ? allocInHead(bytes) : allocInNewBlock(bytes); } @@ -92,3 +105,11 @@ class BlockJsonBuffer : public JsonBuffer { }; } } + +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(__GNUC__) +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) +#pragma GCC diagnostic pop +#endif +#endif diff --git a/src/third-party/arduino-json-5.3/src/Internals/Comments.cpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Comments.hpp similarity index 73% rename from src/third-party/arduino-json-5.3/src/Internals/Comments.cpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Comments.hpp index 88e9ea80..968625ff 100644 --- a/src/third-party/arduino-json-5.3/src/Internals/Comments.cpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Comments.hpp @@ -5,9 +5,11 @@ // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! -#include "../../include/ArduinoJson/Internals/Comments.hpp" +#pragma once -inline static const char *skipCStyleComment(const char *ptr) { +namespace ArduinoJson { +namespace Internals { +inline const char *skipCStyleComment(const char *ptr) { ptr += 2; for (;;) { if (ptr[0] == '\0') return ptr; @@ -16,7 +18,7 @@ inline static const char *skipCStyleComment(const char *ptr) { } } -inline static const char *skipCppStyleComment(const char *ptr) { +inline const char *skipCppStyleComment(const char *ptr) { ptr += 2; for (;;) { if (ptr[0] == '\0' || ptr[0] == '\n') return ptr; @@ -24,7 +26,7 @@ inline static const char *skipCppStyleComment(const char *ptr) { } } -const char *ArduinoJson::Internals::skipSpacesAndComments(const char *ptr) { +inline const char *skipSpacesAndComments(const char *ptr) { for (;;) { switch (ptr[0]) { case ' ': @@ -50,3 +52,5 @@ const char *ArduinoJson::Internals::skipSpacesAndComments(const char *ptr) { } } } +} +} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/DummyPrint.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/DummyPrint.hpp similarity index 88% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/DummyPrint.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/DummyPrint.hpp index 7ab82b6b..dfd5a327 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/DummyPrint.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/DummyPrint.hpp @@ -7,7 +7,7 @@ #pragma once -#include "../Arduino/Print.hpp" +#include "../Print.hpp" namespace ArduinoJson { namespace Internals { diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/DynamicStringBuilder.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/DynamicStringBuilder.hpp similarity index 87% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/DynamicStringBuilder.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/DynamicStringBuilder.hpp index 6225ad94..07536f2e 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/DynamicStringBuilder.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/DynamicStringBuilder.hpp @@ -7,8 +7,8 @@ #pragma once -#include "../Arduino/Print.hpp" -#include "../Arduino/String.hpp" +#include "../Print.hpp" +#include "../String.hpp" namespace ArduinoJson { namespace Internals { diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Encoding.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Encoding.hpp similarity index 69% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Encoding.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Encoding.hpp index b31f7e43..8dd7a44e 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Encoding.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Encoding.hpp @@ -7,7 +7,7 @@ #pragma once -#include "../Arduino/Print.hpp" +#include "../Print.hpp" namespace ArduinoJson { namespace Internals { @@ -16,7 +16,7 @@ class Encoding { public: // Optimized for code size on a 8-bit AVR static char escapeChar(char c) { - const char *p = _escapeTable; + const char *p = escapeTable(false); while (p[0] && p[1] != c) { p += 2; } @@ -25,7 +25,7 @@ class Encoding { // Optimized for code size on a 8-bit AVR static char unescapeChar(char c) { - const char *p = _escapeTable + 4; + const char *p = escapeTable(true); for (;;) { if (p[0] == '\0') return c; if (p[0] == c) return p[1]; @@ -34,7 +34,9 @@ class Encoding { } private: - static const char _escapeTable[]; + static const char *escapeTable(bool excludeIdenticals) { + return &"\"\"\\\\b\bf\fn\nr\rt\t"[excludeIdenticals ? 4 : 0]; + } }; } } diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/IndentedPrint.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/IndentedPrint.hpp similarity index 75% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/IndentedPrint.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/IndentedPrint.hpp index f0a9c1e8..94dd6f33 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/IndentedPrint.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/IndentedPrint.hpp @@ -7,7 +7,7 @@ #pragma once -#include "../Arduino/Print.hpp" +#include "../Print.hpp" namespace ArduinoJson { namespace Internals { @@ -23,7 +23,13 @@ class IndentedPrint : public Print { isNewLine = true; } - virtual size_t write(uint8_t); + virtual size_t write(uint8_t c) { + size_t n = 0; + if (isNewLine) n += writeTabs(); + n += sink->write(c); + isNewLine = c == '\n'; + return n; + } // Adds one level of indentation void indent() { @@ -46,7 +52,11 @@ class IndentedPrint : public Print { uint8_t tabSize : 3; bool isNewLine : 1; - size_t writeTabs(); + size_t writeTabs() { + size_t n = 0; + for (int i = 0; i < level * tabSize; i++) n += sink->write(' '); + return n; + } static const int MAX_LEVEL = 15; // because it's only 4 bits static const int MAX_TAB_SIZE = 7; // because it's only 3 bits diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonBufferAllocated.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonBufferAllocated.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonBufferAllocated.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonBufferAllocated.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonFloat.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonFloat.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonFloat.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonFloat.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonInteger.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonInteger.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonInteger.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonInteger.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonParser.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonParser.hpp similarity index 75% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonParser.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonParser.hpp index 46308f2f..3bd0f937 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonParser.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonParser.hpp @@ -44,6 +44,19 @@ class JsonParser { inline bool parseObjectTo(JsonVariant *destination); inline bool parseStringTo(JsonVariant *destination); + static inline bool isInRange(char c, char min, char max) { + return min <= c && c <= max; + } + + static inline bool isLetterOrNumber(char c) { + return isInRange(c, '0', '9') || isInRange(c, 'a', 'z') || + isInRange(c, 'A', 'Z') || c == '+' || c == '-' || c == '.'; + } + + static inline bool isQuote(char c) { + return c == '\'' || c == '\"'; + } + JsonBuffer *_buffer; const char *_readPtr; char *_writePtr; diff --git a/src/third-party/arduino-json-5.3/src/Internals/JsonParser.cpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonParser.ipp similarity index 71% rename from src/third-party/arduino-json-5.3/src/Internals/JsonParser.cpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonParser.ipp index ebea9aa9..6a4e1b85 100644 --- a/src/third-party/arduino-json-5.3/src/Internals/JsonParser.cpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonParser.ipp @@ -5,18 +5,12 @@ // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! -#include "../../include/ArduinoJson/Internals/JsonParser.hpp" +#pragma once -#include "../../include/ArduinoJson/Internals/Comments.hpp" -#include "../../include/ArduinoJson/Internals/Encoding.hpp" -#include "../../include/ArduinoJson/JsonArray.hpp" -#include "../../include/ArduinoJson/JsonBuffer.hpp" -#include "../../include/ArduinoJson/JsonObject.hpp" +#include "Comments.hpp" +#include "JsonParser.hpp" -using namespace ArduinoJson; -using namespace ArduinoJson::Internals; - -bool JsonParser::skip(char charToSkip) { +inline bool ArduinoJson::Internals::JsonParser::skip(char charToSkip) { const char *ptr = skipSpacesAndComments(_readPtr); if (*ptr != charToSkip) return false; ptr++; @@ -24,7 +18,8 @@ bool JsonParser::skip(char charToSkip) { return true; } -bool JsonParser::parseAnythingTo(JsonVariant *destination) { +inline bool ArduinoJson::Internals::JsonParser::parseAnythingTo( + JsonVariant *destination) { if (_nestingLimit == 0) return false; _nestingLimit--; bool success = parseAnythingToUnsafe(destination); @@ -32,7 +27,8 @@ bool JsonParser::parseAnythingTo(JsonVariant *destination) { return success; } -inline bool JsonParser::parseAnythingToUnsafe(JsonVariant *destination) { +inline bool ArduinoJson::Internals::JsonParser::parseAnythingToUnsafe( + JsonVariant *destination) { _readPtr = skipSpacesAndComments(_readPtr); switch (*_readPtr) { @@ -47,7 +43,8 @@ inline bool JsonParser::parseAnythingToUnsafe(JsonVariant *destination) { } } -JsonArray &JsonParser::parseArray() { +inline ArduinoJson::JsonArray & +ArduinoJson::Internals::JsonParser::parseArray() { // Create an empty array JsonArray &array = _buffer->createArray(); @@ -78,7 +75,8 @@ JsonArray &JsonParser::parseArray() { return JsonArray::invalid(); } -bool JsonParser::parseArrayTo(JsonVariant *destination) { +inline bool ArduinoJson::Internals::JsonParser::parseArrayTo( + JsonVariant *destination) { JsonArray &array = parseArray(); if (!array.success()) return false; @@ -86,7 +84,8 @@ bool JsonParser::parseArrayTo(JsonVariant *destination) { return true; } -JsonObject &JsonParser::parseObject() { +inline ArduinoJson::JsonObject & +ArduinoJson::Internals::JsonParser::parseObject() { // Create an empty object JsonObject &object = _buffer->createObject(); @@ -124,7 +123,8 @@ JsonObject &JsonParser::parseObject() { return JsonObject::invalid(); } -bool JsonParser::parseObjectTo(JsonVariant *destination) { +inline bool ArduinoJson::Internals::JsonParser::parseObjectTo( + JsonVariant *destination) { JsonObject &object = parseObject(); if (!object.success()) return false; @@ -132,18 +132,7 @@ bool JsonParser::parseObjectTo(JsonVariant *destination) { return true; } -static inline bool isInRange(char c, char min, char max) { - return min <= c && c <= max; -} - -static inline bool isLetterOrNumber(char c) { - return isInRange(c, '0', '9') || isInRange(c, 'a', 'z') || - isInRange(c, 'A', 'Z') || c == '-' || c == '.'; -} - -static inline bool isQuote(char c) { return c == '\'' || c == '\"'; } - -const char *JsonParser::parseString() { +inline const char *ArduinoJson::Internals::JsonParser::parseString() { const char *readPtr = _readPtr; char *writePtr = _writePtr; @@ -188,7 +177,8 @@ const char *JsonParser::parseString() { return startPtr; } -bool JsonParser::parseStringTo(JsonVariant *destination) { +inline bool ArduinoJson::Internals::JsonParser::parseStringTo( + JsonVariant *destination) { bool hasQuotes = isQuote(_readPtr[0]); const char *value = parseString(); if (value == NULL) return false; diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonPrintable.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonPrintable.hpp similarity index 89% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonPrintable.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonPrintable.hpp index 95e6201b..45b6a942 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonPrintable.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonPrintable.hpp @@ -9,11 +9,12 @@ #include "../Configuration.hpp" #include "DummyPrint.hpp" +#include "DynamicStringBuilder.hpp" #include "IndentedPrint.hpp" +#include "JsonSerializer.hpp" #include "JsonWriter.hpp" #include "Prettyfier.hpp" #include "StaticStringBuilder.hpp" -#include "DynamicStringBuilder.hpp" #if ARDUINOJSON_ENABLE_STD_STREAM #include "StreamPrintAdapter.hpp" @@ -31,7 +32,7 @@ class JsonPrintable { public: size_t printTo(Print &print) const { JsonWriter writer(print); - downcast().writeTo(writer); + JsonSerializer::serialize(downcast(), writer); return writer.bytesWritten(); } @@ -84,7 +85,9 @@ class JsonPrintable { } private: - const T &downcast() const { return *static_cast(this); } + const T &downcast() const { + return *static_cast(this); + } }; #if ARDUINOJSON_ENABLE_STD_STREAM diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonSerializer.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonSerializer.hpp new file mode 100644 index 00000000..1b00c654 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonSerializer.hpp @@ -0,0 +1,33 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#pragma once + +#include "JsonWriter.hpp" + +namespace ArduinoJson { + +class JsonArray; +class JsonArraySubscript; +class JsonObject; +template +class JsonObjectSubscript; +class JsonVariant; + +namespace Internals { + +class JsonSerializer { + public: + static void serialize(const JsonArray &, JsonWriter &); + static void serialize(const JsonArraySubscript &, JsonWriter &); + static void serialize(const JsonObject &, JsonWriter &); + template + static void serialize(const JsonObjectSubscript &, JsonWriter &); + static void serialize(const JsonVariant &, JsonWriter &); +}; +} +} diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonSerializer.ipp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonSerializer.ipp new file mode 100644 index 00000000..5b8343b0 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonSerializer.ipp @@ -0,0 +1,101 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#pragma once + +#include "../JsonArray.hpp" +#include "../JsonArraySubscript.hpp" +#include "../JsonObject.hpp" +#include "../JsonObjectSubscript.hpp" +#include "../JsonVariant.hpp" +#include "JsonSerializer.hpp" + +inline void ArduinoJson::Internals::JsonSerializer::serialize( + const JsonArray& array, JsonWriter& writer) { + writer.beginArray(); + + JsonArray::const_iterator it = array.begin(); + while (it != array.end()) { + serialize(*it, writer); + + ++it; + if (it == array.end()) break; + + writer.writeComma(); + } + + writer.endArray(); +} + +inline void ArduinoJson::Internals::JsonSerializer::serialize( + const JsonArraySubscript& arraySubscript, JsonWriter& writer) { + serialize(arraySubscript.as(), writer); +} + +inline void ArduinoJson::Internals::JsonSerializer::serialize( + const JsonObject& object, JsonWriter& writer) { + writer.beginObject(); + + JsonObject::const_iterator it = object.begin(); + while (it != object.end()) { + writer.writeString(it->key); + writer.writeColon(); + serialize(it->value, writer); + + ++it; + if (it == object.end()) break; + + writer.writeComma(); + } + + writer.endObject(); +} + +template +inline void ArduinoJson::Internals::JsonSerializer::serialize( + const JsonObjectSubscript& objectSubscript, JsonWriter& writer) { + serialize(objectSubscript.template as(), writer); +} + +inline void ArduinoJson::Internals::JsonSerializer::serialize( + const JsonVariant& variant, JsonWriter& writer) { + switch (variant._type) { + case JSON_UNDEFINED: + return; + + case JSON_ARRAY: + serialize(*variant._content.asArray, writer); + return; + + case JSON_OBJECT: + serialize(*variant._content.asObject, writer); + return; + + case JSON_STRING: + writer.writeString(variant._content.asString); + return; + + case JSON_UNPARSED: + writer.writeRaw(variant._content.asString); + return; + + case JSON_NEGATIVE_INTEGER: + writer.writeRaw('-'); + case JSON_POSITIVE_INTEGER: + writer.writeInteger(variant._content.asInteger); + return; + + case JSON_BOOLEAN: + writer.writeBoolean(variant._content.asInteger != 0); + return; + + default: + uint8_t decimals = + static_cast(variant._type - JSON_FLOAT_0_DECIMALS); + writer.writeFloat(variant._content.asFloat, decimals); + } +} diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonVariantAs.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonVariantAs.hpp new file mode 100644 index 00000000..97c968ed --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonVariantAs.hpp @@ -0,0 +1,45 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#pragma once + +namespace ArduinoJson { +namespace Internals { + +// A metafunction that returns the type of the value returned by +// JsonVariant::as() +template +struct JsonVariantAs { + typedef T type; +}; + +template <> +struct JsonVariantAs { + typedef const char* type; +}; + +template <> +struct JsonVariantAs { + typedef JsonArray& type; +}; + +template <> +struct JsonVariantAs { + typedef const JsonArray& type; +}; + +template <> +struct JsonVariantAs { + typedef JsonObject& type; +}; + +template <> +struct JsonVariantAs { + typedef const JsonObject& type; +}; +} +} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonVariantContent.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonVariantContent.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonVariantContent.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonVariantContent.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonVariantType.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonVariantType.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonVariantType.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonVariantType.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonWriter.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonWriter.hpp similarity index 58% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonWriter.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonWriter.hpp index 729a1547..c832b15a 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/JsonWriter.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/JsonWriter.hpp @@ -7,12 +7,11 @@ #pragma once -#include "../Arduino/Print.hpp" -#include "../Polyfills/isNaN.hpp" -#include "../Polyfills/isInfinity.hpp" +#include "../Polyfills/attributes.hpp" +#include "../Polyfills/math.hpp" #include "../Polyfills/normalize.hpp" +#include "../Print.hpp" #include "Encoding.hpp" -#include "ForceInline.hpp" #include "JsonFloat.hpp" #include "JsonInteger.hpp" @@ -33,18 +32,34 @@ class JsonWriter { // Returns the number of bytes sent to the Print implementation. // This is very handy for implementations of printTo() that must return the // number of bytes written. - size_t bytesWritten() const { return _length; } + size_t bytesWritten() const { + return _length; + } - void beginArray() { writeRaw('['); } - void endArray() { writeRaw(']'); } + void beginArray() { + writeRaw('['); + } + void endArray() { + writeRaw(']'); + } - void beginObject() { writeRaw('{'); } - void endObject() { writeRaw('}'); } + void beginObject() { + writeRaw('{'); + } + void endObject() { + writeRaw('}'); + } - void writeColon() { writeRaw(':'); } - void writeComma() { writeRaw(','); } + void writeColon() { + writeRaw(':'); + } + void writeComma() { + writeRaw(','); + } - void writeBoolean(bool value) { writeRaw(value ? "true" : "false"); } + void writeBoolean(bool value) { + writeRaw(value ? "true" : "false"); + } void writeString(const char *value) { if (!value) { @@ -66,7 +81,7 @@ class JsonWriter { } } - void writeFloat(JsonFloat value, int digits = 2) { + void writeFloat(JsonFloat value, uint8_t digits = 2) { if (Polyfills::isNaN(value)) return writeRaw("NaN"); if (value < 0.0) { @@ -83,11 +98,8 @@ class JsonWriter { powersOf10 = 0; } - // Round correctly so that print(1.999, 2) prints as "2.00" - JsonFloat rounding = 0.5; - for (uint8_t i = 0; i < digits; ++i) rounding /= 10.0; - - value += rounding; + // Round up last digit (so that print(1.999, 2) prints as "2.00") + value += getRoundingBias(digits); // Extract the integer part of the value and print it JsonUInt int_part = static_cast(value); @@ -101,10 +113,13 @@ class JsonWriter { // Extract digits from the remainder one at a time while (digits-- > 0) { + // Extract digit remainder *= 10.0; - JsonUInt toPrint = JsonUInt(remainder); - writeInteger(JsonUInt(remainder)); - remainder -= static_cast(toPrint); + char currentDigit = char(remainder); + remainder -= static_cast(currentDigit); + + // Print + writeRaw(char('0' + currentDigit)); } if (powersOf10 < 0) { @@ -120,20 +135,23 @@ class JsonWriter { void writeInteger(JsonUInt value) { char buffer[22]; + char *ptr = buffer + sizeof(buffer) - 1; - uint8_t i = 0; + *ptr = 0; do { - buffer[i++] = static_cast(value % 10 + '0'); + *--ptr = static_cast(value % 10 + '0'); value /= 10; } while (value); - while (i > 0) { - writeRaw(buffer[--i]); - } + writeRaw(ptr); } - void writeRaw(const char *s) { _length += _sink.print(s); } - void writeRaw(char c) { _length += _sink.write(c); } + void writeRaw(const char *s) { + _length += _sink.print(s); + } + void writeRaw(char c) { + _length += _sink.write(c); + } protected: Print &_sink; @@ -141,6 +159,26 @@ class JsonWriter { private: JsonWriter &operator=(const JsonWriter &); // cannot be assigned + + static JsonFloat getLastDigit(uint8_t digits) { + // Designed as a compromise between code size and speed + switch (digits) { + case 0: + return 1e-0; + case 1: + return 1e-1; + case 2: + return 1e-2; + case 3: + return 1e-3; + default: + return getLastDigit(uint8_t(digits - 4)) * 1e-4; + } + } + + FORCE_INLINE static JsonFloat getRoundingBias(uint8_t digits) { + return 0.5 * getLastDigit(digits); + } }; } } diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/List.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/List.hpp similarity index 53% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/List.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/List.hpp index 7746f106..6072292e 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/List.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/List.hpp @@ -36,21 +36,56 @@ class List { // Would return false in the following situation: // - the memory allocation failed (StaticJsonBuffer was too small) // - the JSON parsing failed - bool success() const { return _buffer != NULL; } + bool success() const { + return _buffer != NULL; + } // Returns the numbers of elements in the list. // For a JsonObject, it would return the number of key-value pairs - size_t size() const; + size_t size() const { + size_t nodeCount = 0; + for (node_type *node = _firstNode; node; node = node->next) nodeCount++; + return nodeCount; + } - iterator begin() { return iterator(_firstNode); } - iterator end() { return iterator(NULL); } + iterator begin() { + return iterator(_firstNode); + } + iterator end() { + return iterator(NULL); + } - const_iterator begin() const { return const_iterator(_firstNode); } - const_iterator end() const { return const_iterator(NULL); } + const_iterator begin() const { + return const_iterator(_firstNode); + } + const_iterator end() const { + return const_iterator(NULL); + } protected: - node_type *addNewNode(); - void removeNode(node_type *nodeToRemove); + node_type *addNewNode() { + node_type *newNode = new (_buffer) node_type(); + + if (_firstNode) { + node_type *lastNode = _firstNode; + while (lastNode->next) lastNode = lastNode->next; + lastNode->next = newNode; + } else { + _firstNode = newNode; + } + + return newNode; + } + + void removeNode(node_type *nodeToRemove) { + if (!nodeToRemove) return; + if (nodeToRemove == _firstNode) { + _firstNode = nodeToRemove->next; + } else { + for (node_type *node = _firstNode; node; node = node->next) + if (node->next == nodeToRemove) node->next = nodeToRemove->next; + } + } JsonBuffer *_buffer; node_type *_firstNode; diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ListConstIterator.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/ListConstIterator.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ListConstIterator.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/ListConstIterator.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ListIterator.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/ListIterator.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ListIterator.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/ListIterator.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ListNode.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/ListNode.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ListNode.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/ListNode.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Parse.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Parse.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/Parse.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Parse.hpp diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Prettyfier.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Prettyfier.hpp new file mode 100644 index 00000000..f3609e92 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/Prettyfier.hpp @@ -0,0 +1,130 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#pragma once + +#include "IndentedPrint.hpp" + +namespace ArduinoJson { +namespace Internals { + +// Converts a compact JSON string into an indented one. +class Prettyfier : public Print { + public: + explicit Prettyfier(IndentedPrint& p) : _sink(p) { + _previousChar = 0; + _inString = false; + } + + virtual size_t write(uint8_t c) { + size_t n = _inString ? handleStringChar(c) : handleMarkupChar(c); + _previousChar = c; + return n; + } + + private: + Prettyfier& operator=(const Prettyfier&); // cannot be assigned + + bool inEmptyBlock() { + return _previousChar == '{' || _previousChar == '['; + } + + size_t handleStringChar(uint8_t c) { + bool isQuote = c == '"' && _previousChar != '\\'; + + if (isQuote) _inString = false; + + return _sink.write(c); + } + + size_t handleMarkupChar(uint8_t c) { + switch (c) { + case '{': + case '[': + return writeBlockOpen(c); + + case '}': + case ']': + return writeBlockClose(c); + + case ':': + return writeColon(); + + case ',': + return writeComma(); + + case '"': + return writeQuoteOpen(); + + default: + return writeNormalChar(c); + } + } + + size_t writeBlockClose(uint8_t c) { + size_t n = 0; + n += unindentIfNeeded(); + n += _sink.write(c); + return n; + } + + size_t writeBlockOpen(uint8_t c) { + size_t n = 0; + n += indentIfNeeded(); + n += _sink.write(c); + return n; + } + + size_t writeColon() { + size_t n = 0; + n += _sink.write(':'); + n += _sink.write(' '); + return n; + } + + size_t writeComma() { + size_t n = 0; + n += _sink.write(','); + n += _sink.println(); + return n; + } + + size_t writeQuoteOpen() { + _inString = true; + size_t n = 0; + n += indentIfNeeded(); + n += _sink.write('"'); + return n; + } + + size_t writeNormalChar(uint8_t c) { + size_t n = 0; + n += indentIfNeeded(); + n += _sink.write(c); + return n; + } + + size_t indentIfNeeded() { + if (!inEmptyBlock()) return 0; + + _sink.indent(); + return _sink.println(); + } + + size_t unindentIfNeeded() { + if (inEmptyBlock()) return 0; + + _sink.unindent(); + return _sink.println(); + } + + uint8_t _previousChar; + IndentedPrint& _sink; + bool _inString; +}; +} +} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ReferenceType.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/ReferenceType.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ReferenceType.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/ReferenceType.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/StaticStringBuilder.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/StaticStringBuilder.hpp similarity index 72% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/StaticStringBuilder.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/StaticStringBuilder.hpp index df1ceecf..8fdcf88a 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/StaticStringBuilder.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/StaticStringBuilder.hpp @@ -7,7 +7,7 @@ #pragma once -#include "../Arduino/Print.hpp" +#include "../Print.hpp" namespace ArduinoJson { namespace Internals { @@ -20,7 +20,13 @@ class StaticStringBuilder : public Print { buffer[0] = '\0'; } - virtual size_t write(uint8_t c); + virtual size_t write(uint8_t c) { + if (length >= capacity) return 0; + + buffer[length++] = c; + buffer[length] = '\0'; + return 1; + } private: char *buffer; diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/StreamPrintAdapter.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/StreamPrintAdapter.hpp similarity index 90% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/StreamPrintAdapter.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/StreamPrintAdapter.hpp index ace1d9ed..0f17291d 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/StreamPrintAdapter.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Internals/StreamPrintAdapter.hpp @@ -11,7 +11,7 @@ #if ARDUINOJSON_ENABLE_STD_STREAM -#include "../Arduino/Print.hpp" +#include "../Print.hpp" #include diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArray.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArray.hpp similarity index 74% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArray.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArray.hpp index 5d01ad75..b9c03662 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArray.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArray.hpp @@ -56,10 +56,12 @@ class JsonArray : public Internals::JsonPrintable, : Internals::List(buffer) {} // Gets the value at the specified index - FORCE_INLINE JsonVariant operator[](size_t index) const; + JsonVariant operator[](size_t index) const { + return get(index); + } // Gets or sets the value at specified index - FORCE_INLINE JsonArraySubscript operator[](size_t index); + JsonArraySubscript operator[](size_t index); // Adds the specified value at the end of the array. // @@ -72,7 +74,7 @@ class JsonArray : public Internals::JsonPrintable, // bool add(double value); // bool add(const char*); template - FORCE_INLINE bool add( + bool add( T value, typename TypeTraits::EnableIf< CanSet::value && !TypeTraits::IsReference::value>::type * = 0) { @@ -83,18 +85,16 @@ class JsonArray : public Internals::JsonPrintable, // bool add(JsonArray&); // bool add(JsonObject&); template - FORCE_INLINE bool add( - const T &value, - typename TypeTraits::EnableIf::value>::type * = 0) { + bool add(const T &value, + typename TypeTraits::EnableIf::value>::type * = 0) { return addNode(const_cast(value)); } // bool add(float value, uint8_t decimals); // bool add(double value, uint8_t decimals); template - FORCE_INLINE bool add( - T value, uint8_t decimals, - typename TypeTraits::EnableIf::value>::type - * = 0) { + bool add(T value, uint8_t decimals, + typename TypeTraits::EnableIf< + TypeTraits::IsFloatingPoint::value>::type * = 0) { return addNode(JsonVariant(value, decimals)); } @@ -105,7 +105,7 @@ class JsonArray : public Internals::JsonPrintable, // bool set(size_t index, int value); // bool set(size_t index, short value); template - FORCE_INLINE bool set( + bool set( size_t index, T value, typename TypeTraits::EnableIf< CanSet::value && !TypeTraits::IsReference::value>::type * = 0) { @@ -116,31 +116,38 @@ class JsonArray : public Internals::JsonPrintable, // bool set(size_t index, JsonArray&); // bool set(size_t index, JsonObject&); template - FORCE_INLINE bool set( - size_t index, const T &value, - typename TypeTraits::EnableIf::value>::type * = 0) { + bool set(size_t index, const T &value, + typename TypeTraits::EnableIf::value>::type * = 0) { return setNodeAt(index, const_cast(value)); } // bool set(size_t index, float value, uint8_t decimals = 2); // bool set(size_t index, double value, uint8_t decimals = 2); template - FORCE_INLINE bool set( - size_t index, T value, uint8_t decimals, - typename TypeTraits::EnableIf::value>::type - * = 0) { + bool set(size_t index, T value, uint8_t decimals, + typename TypeTraits::EnableIf< + TypeTraits::IsFloatingPoint::value>::type * = 0) { return setNodeAt(index, JsonVariant(value, decimals)); } // Gets the value at the specified index. - FORCE_INLINE JsonVariant get(size_t index) const; + JsonVariant get(size_t index) const { + node_type *node = getNodeAt(index); + return node ? node->content : JsonVariant(); + } // Gets the value at the specified index. template - FORCE_INLINE T get(size_t index) const; + typename Internals::JsonVariantAs::type get(size_t index) const { + node_type *node = getNodeAt(index); + return node ? node->content.as() : JsonVariant::defaultValue(); + } // Check the type of the value at specified index. template - FORCE_INLINE bool is(size_t index) const; + bool is(size_t index) const { + node_type *node = getNodeAt(index); + return node ? node->content.is() : false; + } // Creates a JsonArray and adds a reference at the end of the array. // It's a shortcut for JsonBuffer::createArray() and JsonArray::add() @@ -151,15 +158,17 @@ class JsonArray : public Internals::JsonPrintable, JsonObject &createNestedObject(); // Removes element at specified index. - void removeAt(size_t index); + void removeAt(size_t index) { + removeNode(getNodeAt(index)); + } // Returns a reference an invalid JsonArray. // This object is meant to replace a NULL pointer. // This is used when memory allocation or JSON parsing fail. - static JsonArray &invalid() { return _invalid; } - - // Serialize the array to the specified JsonWriter. - void writeTo(Internals::JsonWriter &writer) const; + static JsonArray &invalid() { + static JsonArray instance(NULL); + return instance; + } // Imports a 1D array template @@ -215,20 +224,28 @@ class JsonArray : public Internals::JsonPrintable, } private: - node_type *getNodeAt(size_t index) const; + node_type *getNodeAt(size_t index) const { + node_type *node = _firstNode; + while (node && index--) node = node->next; + return node; + } template - bool setNodeAt(size_t index, TValue value); + bool setNodeAt(size_t index, TValue value) { + node_type *node = getNodeAt(index); + return node != NULL && setNodeValue(node, value); + } template - bool addNode(TValue); + bool addNode(TValue value) { + node_type *node = addNewNode(); + return node != NULL && setNodeValue(node, value); + } template - FORCE_INLINE bool setNodeValue(node_type *, T value); - - // The instance returned by JsonArray::invalid() - static JsonArray _invalid; + bool setNodeValue(node_type *node, T value) { + node->content = value; + return true; + } }; } - -#include "JsonArray.ipp" diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArray.ipp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArray.ipp new file mode 100644 index 00000000..08257ecd --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArray.ipp @@ -0,0 +1,80 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#pragma once + +#include "JsonArray.hpp" +#include "JsonArraySubscript.hpp" +#include "JsonObject.hpp" + +namespace ArduinoJson { + +inline JsonVariant::JsonVariant(JsonArray &array) { + if (array.success()) { + _type = Internals::JSON_ARRAY; + _content.asArray = &array; + } else { + _type = Internals::JSON_UNDEFINED; + } +} + +inline JsonVariant::JsonVariant(JsonObject &object) { + if (object.success()) { + _type = Internals::JSON_OBJECT; + _content.asObject = &object; + } else { + _type = Internals::JSON_UNDEFINED; + } +} + +template <> +inline bool JsonArray::setNodeValue(node_type *node, String &value) { + const char *copy = _buffer->strdup(value); + if (!copy) return false; + node->content = copy; + return true; +} + +template <> +inline JsonArray &JsonVariant::defaultValue() { + return JsonArray::invalid(); +} + +template <> +inline JsonArray &JsonVariant::defaultValue() { + return JsonArray::invalid(); +} + +template <> +inline const JsonArray &JsonVariant::defaultValue() { + return JsonArray::invalid(); +} + +template <> +inline const JsonArray &JsonVariant::defaultValue() { + return JsonArray::invalid(); +} + +inline JsonArray &JsonVariant::asArray() const { + if (_type == Internals::JSON_ARRAY) return *_content.asArray; + return JsonArray::invalid(); +} + +inline JsonArray &JsonArray::createNestedArray() { + if (!_buffer) return JsonArray::invalid(); + JsonArray &array = _buffer->createArray(); + add(array); + return array; +} + +inline JsonArray &JsonObject::createNestedArray(JsonObjectKey key) { + if (!_buffer) return JsonArray::invalid(); + JsonArray &array = _buffer->createArray(); + setNodeAt(key, array); + return array; +} +} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArraySubscript.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArraySubscript.hpp similarity index 74% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArraySubscript.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArraySubscript.hpp index 57e55ebf..f622a6c8 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonArraySubscript.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonArraySubscript.hpp @@ -42,12 +42,16 @@ class JsonArraySubscript : public JsonVariantBase { return *this; } - FORCE_INLINE bool success() const { return _index < _array.size(); } + FORCE_INLINE bool success() const { + return _index < _array.size(); + } - FORCE_INLINE operator JsonVariant() const { return _array.get(_index); } + FORCE_INLINE operator JsonVariant() const { + return _array.get(_index); + } template - FORCE_INLINE T as() const { + FORCE_INLINE typename Internals::JsonVariantAs::type as() const { return _array.get(_index); } @@ -56,10 +60,6 @@ class JsonArraySubscript : public JsonVariantBase { return _array.is(_index); } - void writeTo(Internals::JsonWriter& writer) const { - _array.get(_index).writeTo(writer); - } - template void set(TValue value) { _array.set(_index, value); @@ -77,6 +77,16 @@ inline std::ostream& operator<<(std::ostream& os, } #endif +inline JsonArraySubscript JsonArray::operator[](size_t index) { + return JsonArraySubscript(*this, index); +} + +template +inline const JsonArraySubscript JsonVariantBase::operator[]( + int index) const { + return asArray()[index]; +} + } // namespace ArduinoJson #ifdef _MSC_VER diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonBuffer.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonBuffer.hpp similarity index 90% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonBuffer.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonBuffer.hpp index dd6fb3fb..eb61069a 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonBuffer.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonBuffer.hpp @@ -11,12 +11,16 @@ #include // for uint8_t #include -#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 diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonBuffer.ipp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonBuffer.ipp new file mode 100644 index 00000000..ed89bd9e --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonBuffer.ipp @@ -0,0 +1,46 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#pragma once + +#include "Internals/JsonParser.hpp" + +inline ArduinoJson::JsonArray &ArduinoJson::JsonBuffer::createArray() { + JsonArray *ptr = new (this) JsonArray(this); + return ptr ? *ptr : JsonArray::invalid(); +} + +inline ArduinoJson::JsonObject &ArduinoJson::JsonBuffer::createObject() { + JsonObject *ptr = new (this) JsonObject(this); + return ptr ? *ptr : JsonObject::invalid(); +} + +inline ArduinoJson::JsonArray &ArduinoJson::JsonBuffer::parseArray( + char *json, uint8_t nestingLimit) { + Internals::JsonParser parser(this, json, nestingLimit); + return parser.parseArray(); +} + +inline ArduinoJson::JsonObject &ArduinoJson::JsonBuffer::parseObject( + char *json, uint8_t nestingLimit) { + Internals::JsonParser parser(this, json, nestingLimit); + return parser.parseObject(); +} + +inline ArduinoJson::JsonVariant ArduinoJson::JsonBuffer::parse( + char *json, uint8_t nestingLimit) { + Internals::JsonParser parser(this, json, nestingLimit); + return parser.parseVariant(); +} + +inline char *ArduinoJson::JsonBuffer::strdup(const char *source, + size_t length) { + size_t size = length + 1; + char *dest = static_cast(alloc(size)); + if (dest != NULL) memcpy(dest, source, size); + return dest; +} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObject.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObject.hpp similarity index 61% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObject.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObject.hpp index 758e21c0..8daf1029 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObject.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObject.hpp @@ -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" @@ -52,15 +52,16 @@ class JsonObject : public Internals::JsonPrintable, // Create an empty JsonArray attached to the specified JsonBuffer. // You should not use this constructor directly. // Instead, use JsonBuffer::createObject() or JsonBuffer.parseObject(). - FORCE_INLINE explicit JsonObject(JsonBuffer* buffer) - : Internals::List(buffer) {} + explicit JsonObject(JsonBuffer* buffer) : Internals::List(buffer) {} // Gets or sets the value associated with the specified key. - FORCE_INLINE JsonObjectSubscript operator[](const char* key); - FORCE_INLINE JsonObjectSubscript operator[](const String& key); + JsonObjectSubscript operator[](const char* key); + JsonObjectSubscript operator[](const String& key); // Gets the value associated with the specified key. - FORCE_INLINE JsonVariant operator[](JsonObjectKey key) const; + JsonVariant operator[](JsonObjectKey key) const { + return get(key); + } // Sets the specified key with the specified value. // bool set(TKey key, bool value); @@ -73,7 +74,7 @@ class JsonObject : public Internals::JsonPrintable, // bool set(TKey key, const char* value); // bool set(TKey key, RawJson value); template - FORCE_INLINE bool set( + bool set( JsonObjectKey key, T value, typename TypeTraits::EnableIf< CanSet::value && !TypeTraits::IsReference::value>::type* = 0) { @@ -84,71 +85,98 @@ class JsonObject : public Internals::JsonPrintable, // bool set(Key, JsonObject&); // bool set(Key, JsonVariant&); template - FORCE_INLINE bool set( - JsonObjectKey key, const T& value, - typename TypeTraits::EnableIf::value>::type* = 0) { + bool set(JsonObjectKey key, const T& value, + typename TypeTraits::EnableIf::value>::type* = 0) { return setNodeAt(key, const_cast(value)); } // bool set(Key, float value, uint8_t decimals); // bool set(Key, double value, uint8_t decimals); template - FORCE_INLINE bool set( - JsonObjectKey key, TValue value, uint8_t decimals, - typename TypeTraits::EnableIf< - TypeTraits::IsFloatingPoint::value>::type* = 0) { + bool set(JsonObjectKey key, TValue value, uint8_t decimals, + typename TypeTraits::EnableIf< + TypeTraits::IsFloatingPoint::value>::type* = 0) { return setNodeAt(key, JsonVariant(value, decimals)); } // Gets the value associated with the specified key. - FORCE_INLINE JsonVariant get(JsonObjectKey) const; + JsonVariant get(JsonObjectKey key) const { + node_type* node = getNodeAt(key.c_str()); + return node ? node->content.value : JsonVariant(); + } // Gets the value associated with the specified key. template - FORCE_INLINE T get(JsonObjectKey) const; + typename Internals::JsonVariantAs::type get(JsonObjectKey key) const { + node_type* node = getNodeAt(key.c_str()); + return node ? node->content.value.as() : JsonVariant::defaultValue(); + } // Checks the type of the value associated with the specified key. template - FORCE_INLINE bool is(JsonObjectKey) const; + bool is(JsonObjectKey key) const { + node_type* node = getNodeAt(key.c_str()); + return node ? node->content.value.is() : false; + } // Creates and adds a JsonArray. // This is a shortcut for JsonBuffer::createArray() and JsonObject::add(). - FORCE_INLINE JsonArray& createNestedArray(JsonObjectKey key); + JsonArray& createNestedArray(JsonObjectKey key); // Creates and adds a JsonObject. // This is a shortcut for JsonBuffer::createObject() and JsonObject::add(). - FORCE_INLINE JsonObject& createNestedObject(JsonObjectKey key); + JsonObject& createNestedObject(JsonObjectKey key); // Tells weither the specified key is present and associated with a value. - FORCE_INLINE bool containsKey(JsonObjectKey key) const; + bool containsKey(JsonObjectKey key) const { + return getNodeAt(key.c_str()) != NULL; + } // Removes the specified key and the associated value. - void remove(JsonObjectKey key); + void remove(JsonObjectKey key) { + removeNode(getNodeAt(key.c_str())); + } // Returns a reference an invalid JsonObject. // This object is meant to replace a NULL pointer. // This is used when memory allocation or JSON parsing fail. - static JsonObject& invalid() { return _invalid; } - - // Serialize the object to the specified JsonWriter - void writeTo(Internals::JsonWriter& writer) const; + static JsonObject& invalid() { + static JsonObject instance(NULL); + return instance; + } private: // Returns the list node that matches the specified key. - node_type* getNodeAt(const char* key) const; - - node_type* getOrCreateNodeAt(const char* key); + node_type* getNodeAt(const char* key) const { + for (node_type* node = _firstNode; node; node = node->next) { + if (!strcmp(node->content.key, key)) return node; + } + return NULL; + } template - FORCE_INLINE bool setNodeAt(JsonObjectKey key, T value); + bool setNodeAt(JsonObjectKey key, T value) { + node_type* node = getNodeAt(key.c_str()); + if (!node) { + node = addNewNode(); + if (!node || !setNodeKey(node, key)) return false; + } + return setNodeValue(node, value); + } - FORCE_INLINE bool setNodeKey(node_type*, JsonObjectKey key); + bool setNodeKey(node_type* node, JsonObjectKey key) { + if (key.needs_copy()) { + node->content.key = _buffer->strdup(key.c_str()); + if (node->content.key == NULL) return false; + } else { + node->content.key = key.c_str(); + } + return true; + } template - FORCE_INLINE bool setNodeValue(node_type*, T value); - - // The instance returned by JsonObject::invalid() - static JsonObject _invalid; + bool setNodeValue(node_type* node, T value) { + node->content.value = value; + return true; + } }; } - -#include "JsonObject.ipp" diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObject.ipp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObject.ipp new file mode 100644 index 00000000..d421ca94 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObject.ipp @@ -0,0 +1,68 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#pragma once + +#include "JsonArray.hpp" +#include "JsonObject.hpp" +#include "JsonObjectSubscript.hpp" + +namespace ArduinoJson { + +template <> +inline bool JsonObject::setNodeValue(node_type *node, String &value) { + const char *dup = _buffer->strdup(value); + node->content.value = dup; + return dup != NULL; +} + +template <> +inline bool JsonObject::setNodeValue(node_type *node, const String &value) { + const char *dup = _buffer->strdup(value); + node->content.value = dup; + return dup != NULL; +} + +template <> +inline const JsonObject &JsonVariant::defaultValue() { + return JsonObject::invalid(); +} + +template <> +inline const JsonObject &JsonVariant::defaultValue() { + return JsonObject::invalid(); +} + +template <> +inline JsonObject &JsonVariant::defaultValue() { + return JsonObject::invalid(); +} + +template <> +inline JsonObject &JsonVariant::defaultValue() { + return JsonObject::invalid(); +} + +inline JsonObject &JsonVariant::asObject() const { + if (_type == Internals::JSON_OBJECT) return *_content.asObject; + return JsonObject::invalid(); +} + +inline JsonObject &JsonObject::createNestedObject(JsonObjectKey key) { + if (!_buffer) return JsonObject::invalid(); + JsonObject &array = _buffer->createObject(); + setNodeAt(key, array); + return array; +} + +inline JsonObject &JsonArray::createNestedObject() { + if (!_buffer) return JsonObject::invalid(); + JsonObject &object = _buffer->createObject(); + add(object); + return object; +} +} diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObjectKey.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObjectKey.hpp similarity index 91% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObjectKey.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObjectKey.hpp index 5390b426..b713f39e 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObjectKey.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObjectKey.hpp @@ -7,7 +7,7 @@ #pragma once -#include "Arduino/String.hpp" +#include "String.hpp" namespace ArduinoJson { diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObjectSubscript.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObjectSubscript.hpp similarity index 66% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObjectSubscript.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObjectSubscript.hpp index 70b6a642..0f7a71bb 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonObjectSubscript.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonObjectSubscript.hpp @@ -45,12 +45,16 @@ class JsonObjectSubscript : public JsonVariantBase > { return *this; } - FORCE_INLINE bool success() const { return _object.containsKey(_key); } + FORCE_INLINE bool success() const { + return _object.containsKey(_key); + } - FORCE_INLINE operator JsonVariant() const { return _object.get(_key); } + FORCE_INLINE operator JsonVariant() const { + return _object.get(_key); + } template - FORCE_INLINE TValue as() const { + FORCE_INLINE typename Internals::JsonVariantAs::type as() const { return _object.get(_key); } @@ -69,10 +73,8 @@ class JsonObjectSubscript : public JsonVariantBase > { return _object.set(_key, value, decimals); } - FORCE_INLINE JsonVariant get() { return _object.get(_key); } - - void writeTo(Internals::JsonWriter& writer) const { - _object.get(_key).writeTo(writer); + FORCE_INLINE JsonVariant get() { + return _object.get(_key); } private: @@ -92,6 +94,28 @@ inline std::ostream& operator<<( } #endif +inline JsonObjectSubscript JsonObject::operator[]( + const char* key) { + return JsonObjectSubscript(*this, key); +} + +inline JsonObjectSubscript JsonObject::operator[]( + const String& key) { + return JsonObjectSubscript(*this, key); +} + +template +inline const JsonObjectSubscript JsonVariantBase:: +operator[](const char* key) const { + return asObject()[key]; +} + +template +inline const JsonObjectSubscript JsonVariantBase:: +operator[](const String& key) const { + return asObject()[key]; +} + } // namespace ArduinoJson #ifdef _MSC_VER diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonPair.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonPair.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonPair.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonPair.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariant.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariant.hpp similarity index 71% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariant.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariant.hpp index 0bc66820..f4093376 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariant.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariant.hpp @@ -36,16 +36,23 @@ class JsonObject; // - a string (const char*) // - a reference to a JsonArray or JsonObject class JsonVariant : public JsonVariantBase { + friend void Internals::JsonSerializer::serialize(const JsonVariant &, + JsonWriter &); + public: template struct IsConstructibleFrom; // Creates an uninitialized JsonVariant - FORCE_INLINE JsonVariant() : _type(Internals::JSON_UNDEFINED) {} + JsonVariant() : _type(Internals::JSON_UNDEFINED) {} // Create a JsonVariant containing a boolean value. // It will be serialized as "true" or "false" in JSON. - FORCE_INLINE JsonVariant(bool value); + JsonVariant(bool value) { + using namespace Internals; + _type = JSON_BOOLEAN; + _content.asInteger = static_cast(value); + } // Create a JsonVariant containing a floating point value. // The second argument specifies the number of decimal digits to write in @@ -53,10 +60,9 @@ class JsonVariant : public JsonVariantBase { // JsonVariant(double value, uint8_t decimals); // JsonVariant(float value, uint8_t decimals); template - FORCE_INLINE JsonVariant( - T value, uint8_t decimals = 2, - typename TypeTraits::EnableIf::value>::type - * = 0) { + JsonVariant(T value, uint8_t decimals = 2, + typename TypeTraits::EnableIf< + TypeTraits::IsFloatingPoint::value>::type * = 0) { using namespace Internals; _type = static_cast(JSON_FLOAT_0_DECIMALS + decimals); _content.asFloat = static_cast(value); @@ -67,9 +73,9 @@ class JsonVariant : public JsonVariantBase { // JsonVariant(signed int) // JsonVariant(signed long) template - FORCE_INLINE JsonVariant( - T value, typename TypeTraits::EnableIf< - TypeTraits::IsSignedIntegral::value>::type * = 0) { + JsonVariant(T value, + typename TypeTraits::EnableIf< + TypeTraits::IsSignedIntegral::value>::type * = 0) { using namespace Internals; if (value >= 0) { _type = JSON_POSITIVE_INTEGER; @@ -83,25 +89,31 @@ class JsonVariant : public JsonVariantBase { // JsonVariant(unsigned int) // JsonVariant(unsigned long) template - FORCE_INLINE JsonVariant( - T value, typename TypeTraits::EnableIf< - TypeTraits::IsUnsignedIntegral::value>::type * = 0) { + JsonVariant(T value, + typename TypeTraits::EnableIf< + TypeTraits::IsUnsignedIntegral::value>::type * = 0) { using namespace Internals; _type = JSON_POSITIVE_INTEGER; _content.asInteger = static_cast(value); } // Create a JsonVariant containing a string. - FORCE_INLINE JsonVariant(const char *value); + JsonVariant(const char *value) { + _type = Internals::JSON_STRING; + _content.asString = value; + } // Create a JsonVariant containing an unparsed string - FORCE_INLINE JsonVariant(RawJson value); + JsonVariant(RawJson value) { + _type = Internals::JSON_UNPARSED; + _content.asString = value; + } // Create a JsonVariant containing a reference to an array. - FORCE_INLINE JsonVariant(JsonArray &array); + JsonVariant(JsonArray &array); // Create a JsonVariant containing a reference to an object. - FORCE_INLINE JsonVariant(JsonObject &object); + JsonVariant(JsonObject &object); // Get the variant as the specified type. // @@ -162,31 +174,54 @@ class JsonVariant : public JsonVariantBase { // // JsonArray& as const; // JsonArray& as const; - // JsonArray& as const; template typename TypeTraits::EnableIf< - TypeTraits::IsSame< - typename TypeTraits::RemoveConst< - typename TypeTraits::RemoveReference::type>::type, - JsonArray>::value, + TypeTraits::IsSame::type, + JsonArray>::value, JsonArray &>::type as() const { return asArray(); } // + // const JsonArray& as const; + template + typename TypeTraits::EnableIf< + TypeTraits::IsSame::type, + const JsonArray>::value, + const JsonArray &>::type + as() const { + return asArray(); + } + // // JsonObject& as const; // JsonObject& as const; - // JsonObject& as const; template typename TypeTraits::EnableIf< - TypeTraits::IsSame< - typename TypeTraits::RemoveConst< - typename TypeTraits::RemoveReference::type>::type, - JsonObject>::value, + TypeTraits::IsSame::type, + JsonObject>::value, JsonObject &>::type as() const { return asObject(); } + // + // JsonObject& as const; + // JsonObject& as const; + template + typename TypeTraits::EnableIf< + TypeTraits::IsSame::type, + const JsonObject>::value, + const JsonObject &>::type + as() const { + return asObject(); + } + // + // JsonVariant as const; + template + typename TypeTraits::EnableIf::value, + T>::type + as() const { + return *this; + } // Tells weither the variant has the specified type. // Returns true if the variant has type type T, false otherwise. @@ -242,9 +277,9 @@ class JsonVariant : public JsonVariantBase { return isArray(); } // - // JsonObject& as const; - // JsonObject& as const; - // JsonObject& as const; + // bool is const; + // bool is const; + // bool is const; template typename TypeTraits::EnableIf< TypeTraits::IsSame< @@ -256,23 +291,31 @@ class JsonVariant : public JsonVariantBase { return isObject(); } - // Serialize the variant to a JsonWriter - void writeTo(Internals::JsonWriter &writer) const; + // Returns true if the variant has a value + bool success() const { + return _type != Internals::JSON_UNDEFINED; + } - // TODO: rename + // Value returned if the variant has an incompatible type template - static T invalid(); + static typename Internals::JsonVariantAs::type defaultValue() { + return T(); + } + // DEPRECATED: use as() instead const char *asString() const; + + // DEPRECATED: use as() instead JsonArray &asArray() const; + + // DEPRECATED: use as() instead JsonObject &asObject() const; private: // It's not allowed to store a char template - FORCE_INLINE JsonVariant(T value, - typename TypeTraits::EnableIf< - TypeTraits::IsSame::value>::type * = 0); + JsonVariant(T value, typename TypeTraits::EnableIf< + TypeTraits::IsSame::value>::type * = 0); String toString() const; Internals::JsonFloat asFloat() const; @@ -281,9 +324,17 @@ class JsonVariant : public JsonVariantBase { bool isBoolean() const; bool isFloat() const; bool isInteger() const; - bool isArray() const { return _type == Internals::JSON_ARRAY; } - bool isObject() const { return _type == Internals::JSON_OBJECT; } - bool isString() const { return _type == Internals::JSON_STRING; } + bool isArray() const { + return _type == Internals::JSON_ARRAY; + } + bool isObject() const { + return _type == Internals::JSON_OBJECT; + } + bool isString() const { + return _type == Internals::JSON_STRING || + (_type == Internals::JSON_UNPARSED && _content.asString && + !strcmp("null", _content.asString)); + } // The current type of the variant Internals::JsonVariantType _type; @@ -323,6 +374,3 @@ struct JsonVariant::IsConstructibleFrom { TypeTraits::IsSame::value; }; } - -// Include inline implementations -#include "JsonVariant.ipp" diff --git a/src/third-party/arduino-json-5.3/src/JsonVariant.cpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariant.ipp similarity index 50% rename from src/third-party/arduino-json-5.3/src/JsonVariant.cpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariant.ipp index cc80e44b..f0c0d33b 100644 --- a/src/third-party/arduino-json-5.3/src/JsonVariant.cpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariant.ipp @@ -5,19 +5,61 @@ // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! -#include "../include/ArduinoJson/JsonVariant.hpp" +#pragma once -#include "../include/ArduinoJson/JsonArray.hpp" -#include "../include/ArduinoJson/JsonObject.hpp" +#include "Configuration.hpp" +#include "JsonVariant.hpp" +#include "Internals/Parse.hpp" +#include "JsonArray.hpp" +#include "JsonObject.hpp" +#include // for strcmp #include // for errno #include // for strtol, strtod -using namespace ArduinoJson::Internals; - namespace ArduinoJson { -const char *JsonVariant::asString() const { +inline Internals::JsonInteger JsonVariant::asInteger() const { + using namespace Internals; + switch (_type) { + case JSON_UNDEFINED: + return 0; + case JSON_POSITIVE_INTEGER: + case JSON_BOOLEAN: + return _content.asInteger; + case JSON_NEGATIVE_INTEGER: + return -static_cast(_content.asInteger); + case JSON_STRING: + case JSON_UNPARSED: + if (!_content.asString) return 0; + if (!strcmp("true", _content.asString)) return 1; + return parse(_content.asString); + default: + return static_cast(_content.asFloat); + } +} + +inline Internals::JsonUInt JsonVariant::asUnsignedInteger() const { + using namespace Internals; + switch (_type) { + case JSON_UNDEFINED: + return 0; + case JSON_POSITIVE_INTEGER: + case JSON_BOOLEAN: + case JSON_NEGATIVE_INTEGER: + return _content.asInteger; + case JSON_STRING: + case JSON_UNPARSED: + if (!_content.asString) return 0; + if (!strcmp("true", _content.asString)) return 1; + return parse(_content.asString); + default: + return static_cast(_content.asFloat); + } +} + +inline const char *JsonVariant::asString() const { + using namespace Internals; if (_type == JSON_UNPARSED && _content.asString && !strcmp("null", _content.asString)) return NULL; @@ -25,7 +67,8 @@ const char *JsonVariant::asString() const { return NULL; } -JsonFloat JsonVariant::asFloat() const { +inline Internals::JsonFloat JsonVariant::asFloat() const { + using namespace Internals; switch (_type) { case JSON_UNDEFINED: return 0; @@ -42,7 +85,8 @@ JsonFloat JsonVariant::asFloat() const { } } -String JsonVariant::toString() const { +inline String JsonVariant::toString() const { + using namespace Internals; String s; if ((_type == JSON_STRING || _type == JSON_UNPARSED) && _content.asString != NULL) @@ -52,7 +96,8 @@ String JsonVariant::toString() const { return s; } -bool JsonVariant::isBoolean() const { +inline bool JsonVariant::isBoolean() const { + using namespace Internals; if (_type == JSON_BOOLEAN) return true; if (_type != JSON_UNPARSED || _content.asString == NULL) return false; @@ -61,7 +106,8 @@ bool JsonVariant::isBoolean() const { !strcmp(_content.asString, "false"); } -bool JsonVariant::isInteger() const { +inline bool JsonVariant::isInteger() const { + using namespace Internals; if (_type == JSON_POSITIVE_INTEGER || _type == JSON_NEGATIVE_INTEGER) return true; @@ -74,7 +120,8 @@ bool JsonVariant::isInteger() const { return *end == '\0' && errno == 0; } -bool JsonVariant::isFloat() const { +inline bool JsonVariant::isFloat() const { + using namespace Internals; if (_type >= JSON_FLOAT_0_DECIMALS) return true; if (_type != JSON_UNPARSED || _content.asString == NULL) return false; @@ -86,40 +133,10 @@ bool JsonVariant::isFloat() const { return *end == '\0' && errno == 0 && !is(); } -void JsonVariant::writeTo(JsonWriter &writer) const { - switch (_type) { - case JSON_UNDEFINED: - return; - - case JSON_ARRAY: - _content.asArray->writeTo(writer); - return; - - case JSON_OBJECT: - _content.asObject->writeTo(writer); - return; - - case JSON_STRING: - writer.writeString(_content.asString); - return; - - case JSON_UNPARSED: - writer.writeRaw(_content.asString); - return; - - case JSON_NEGATIVE_INTEGER: - writer.writeRaw('-'); - case JSON_POSITIVE_INTEGER: - writer.writeInteger(_content.asInteger); - return; - - case JSON_BOOLEAN: - writer.writeBoolean(_content.asInteger != 0); - return; - - default: - uint8_t decimals = static_cast(_type - JSON_FLOAT_0_DECIMALS); - writer.writeFloat(_content.asFloat, decimals); - } -} +#if ARDUINOJSON_ENABLE_STD_STREAM +inline std::ostream &operator<<(std::ostream &os, const JsonVariant &source) { + return source.printTo(os); } +#endif + +} // namespace ArduinoJson diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariantBase.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariantBase.hpp similarity index 79% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariantBase.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariantBase.hpp index 7ca0919f..14fc0cd8 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/JsonVariantBase.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/JsonVariantBase.hpp @@ -7,8 +7,9 @@ #pragma once -#include "Internals/ForceInline.hpp" +#include "Internals/JsonVariantAs.hpp" #include "JsonObjectKey.hpp" +#include "Polyfills/attributes.hpp" namespace ArduinoJson { @@ -20,20 +21,35 @@ class JsonObjectSubscript; template class JsonVariantBase : public Internals::JsonPrintable { public: - FORCE_INLINE const char *asString() const { return as(); } + // DEPRECATED: use as() instead + FORCE_INLINE const char *asString() const { + return as(); + } // Gets the variant as an array. // Returns a reference to the JsonArray or JsonArray::invalid() if the // variant // is not an array. - FORCE_INLINE operator JsonArray &() const { return as(); } - FORCE_INLINE JsonArray &asArray() const { return as(); } + FORCE_INLINE operator JsonArray &() const { + return as(); + } + + // DEPRECATED: use as() instead + FORCE_INLINE JsonArray &asArray() const { + return as(); + } // Gets the variant as an object. // Returns a reference to the JsonObject or JsonObject::invalid() if the // variant is not an object. - FORCE_INLINE operator JsonObject &() const { return as(); } - FORCE_INLINE JsonObject &asObject() const { return as(); } + FORCE_INLINE operator JsonObject &() const { + return as(); + } + + // DEPRECATED: use as() instead + FORCE_INLINE JsonObject &asObject() const { + return as(); + } template FORCE_INLINE operator T() const { @@ -41,14 +57,16 @@ class JsonVariantBase : public Internals::JsonPrintable { } template - FORCE_INLINE const T as() const { + FORCE_INLINE const typename Internals::JsonVariantAs::type as() const { return impl()->template as(); } // Mimics an array or an object. // Returns the size of the array or object if the variant has that type. // Returns 0 if the variant is neither an array nor an object - size_t size() const { return asArray().size() + asObject().size(); } + size_t size() const { + return asArray().size() + asObject().size(); + } // Mimics an array. // Returns the element at specified index if the variant is an array. @@ -64,11 +82,10 @@ class JsonVariantBase : public Internals::JsonPrintable { FORCE_INLINE const JsonObjectSubscript operator[]( const String &key) const; - // Serialize the variant to a JsonWriter - void writeTo(Internals::JsonWriter &writer) const; - private: - const TImpl *impl() const { return static_cast(this); } + const TImpl *impl() const { + return static_cast(this); + } }; template diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ForceInline.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/attributes.hpp similarity index 75% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ForceInline.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/attributes.hpp index 37aad136..c428fe1a 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Internals/ForceInline.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/attributes.hpp @@ -9,6 +9,8 @@ #ifdef _MSC_VER #define FORCE_INLINE __forceinline +#define NO_INLINE __declspec(noinline) #else #define FORCE_INLINE __attribute__((always_inline)) +#define NO_INLINE __attribute__((noinline)) #endif diff --git a/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/math.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/math.hpp new file mode 100644 index 00000000..3535c486 --- /dev/null +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/math.hpp @@ -0,0 +1,111 @@ +// Copyright Benoit Blanchon 2014-2016 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson +// If you like this project, please add a star! + +#pragma once + +// If Visual Studo <= 2012 +#if defined(_MSC_VER) && _MSC_VER <= 1700 + +#include + +namespace ArduinoJson { +namespace Polyfills { +template +bool isNaN(T x) { + return _isnan(x) != 0; +} + +template +bool isInfinity(T x) { + return !_finite(x); +} +} +} + +#else + +#include + +// 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 + +// Workaround for libs that #undef isnan or isinf +// https://github.com/bblanchon/ArduinoJson/issues/284 +#if !defined(isnan) || !defined(isinf) +namespace std {} +#endif + +namespace ArduinoJson { +namespace Polyfills { + +template +bool isNaN(T x) { +// Workaround for libs that #undef isnan +// https://github.com/bblanchon/ArduinoJson/issues/284 +#ifndef isnan + using namespace std; +#endif + + return isnan(x); +} + +#if defined(_GLIBCXX_HAVE_ISNANL) && _GLIBCXX_HAVE_ISNANL +template <> +inline bool isNaN(double x) { + return isnanl(x); +} +#endif + +#if defined(_GLIBCXX_HAVE_ISNANF) && _GLIBCXX_HAVE_ISNANF +template <> +inline bool isNaN(float x) { + return isnanf(x); +} +#endif + +template +bool isInfinity(T x) { +// Workaround for libs that #undef isinf +// https://github.com/bblanchon/ArduinoJson/issues/284 +#ifndef isinf + using namespace std; +#endif + + return isinf(x); +} + +#if defined(_GLIBCXX_HAVE_ISINFL) && _GLIBCXX_HAVE_ISINFL +template <> +inline bool isInfinity(double x) { + return isinfl(x); +} +#endif + +#if defined(_GLIBCXX_HAVE_ISINFF) && _GLIBCXX_HAVE_ISINFF +template <> +inline bool isInfinity(float x) { + return isinff(x); +} +#endif + +#if defined(__GNUC__) +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) +#pragma GCC diagnostic pop +#endif +#endif +} +} +#endif diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/normalize.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/normalize.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Polyfills/normalize.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Polyfills/normalize.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Arduino/Print.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Print.hpp similarity index 70% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Arduino/Print.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/Print.hpp index 9e4845cc..73a6d33a 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Arduino/Print.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/Print.hpp @@ -12,6 +12,7 @@ #include #include +namespace ArduinoJson { // This class reproduces Arduino's Print class class Print { public: @@ -22,13 +23,19 @@ class Print { size_t print(const char* s) { size_t n = 0; while (*s) { - n += write(*s++); + n += write(static_cast(*s++)); } return n; } - size_t println() { return write('\r') + write('\n'); } + size_t println() { + size_t n = 0; + n += write('\r'); + n += write('\n'); + return n; + } }; +} #else diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/RawJson.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/RawJson.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/RawJson.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/RawJson.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/StaticJsonBuffer.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/StaticJsonBuffer.hpp similarity index 54% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/StaticJsonBuffer.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/StaticJsonBuffer.hpp index c1473e7f..783eea27 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/StaticJsonBuffer.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/StaticJsonBuffer.hpp @@ -9,6 +9,16 @@ #include "JsonBuffer.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 + namespace ArduinoJson { // Implements a JsonBuffer with fixed memory allocation. @@ -19,8 +29,12 @@ class StaticJsonBuffer : public JsonBuffer { public: explicit StaticJsonBuffer() : _size(0) {} - size_t capacity() const { return CAPACITY; } - size_t size() const { return _size; } + size_t capacity() const { + return CAPACITY; + } + size_t size() const { + return _size; + } virtual void* alloc(size_t bytes) { if (_size + bytes > CAPACITY) return NULL; @@ -34,3 +48,11 @@ class StaticJsonBuffer : public JsonBuffer { size_t _size; }; } + +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(__GNUC__) +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) +#pragma GCC diagnostic pop +#endif +#endif diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/Arduino/String.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/String.hpp similarity index 70% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/Arduino/String.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/String.hpp index 83cf6500..3c030f55 100644 --- a/src/third-party/arduino-json-5.3/include/ArduinoJson/Arduino/String.hpp +++ b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/String.hpp @@ -7,16 +7,18 @@ #pragma once -#ifndef ARDUINO +#include "Configuration.hpp" -#ifndef ARDUINO_STRING_OVERRIDE -#define ARDUINO_STRING_OVERRIDE -#include -typedef std::string String; -#endif +#if ARDUINOJSON_USE_ARDUINO_STRING + +#include #else -#include +#include + +namespace ArduinoJson { +typedef std::string String; +} #endif diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/EnableIf.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/EnableIf.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/EnableIf.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/EnableIf.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsFloatingPoint.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsFloatingPoint.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsFloatingPoint.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsFloatingPoint.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsIntegral.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsIntegral.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsIntegral.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsIntegral.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsReference.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsReference.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsReference.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsReference.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsSame.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsSame.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsSame.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsSame.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsSignedIntegral.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsSignedIntegral.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsSignedIntegral.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsSignedIntegral.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsUnsignedIntegral.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsUnsignedIntegral.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/IsUnsignedIntegral.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/IsUnsignedIntegral.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/RemoveConst.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/RemoveConst.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/RemoveConst.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/RemoveConst.hpp diff --git a/src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/RemoveReference.hpp b/src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/RemoveReference.hpp similarity index 100% rename from src/third-party/arduino-json-5.3/include/ArduinoJson/TypeTraits/RemoveReference.hpp rename to src/third-party/arduino-json-5.6.7/include/ArduinoJson/TypeTraits/RemoveReference.hpp diff --git a/src/third-party/arduino-json-5.3/keywords.txt b/src/third-party/arduino-json-5.6.7/keywords.txt similarity index 100% rename from src/third-party/arduino-json-5.3/keywords.txt rename to src/third-party/arduino-json-5.6.7/keywords.txt diff --git a/src/third-party/arduino-json-5.3/library.properties b/src/third-party/arduino-json-5.6.7/library.properties similarity index 93% rename from src/third-party/arduino-json-5.3/library.properties rename to src/third-party/arduino-json-5.6.7/library.properties index d8587c54..57989b0c 100644 --- a/src/third-party/arduino-json-5.3/library.properties +++ b/src/third-party/arduino-json-5.6.7/library.properties @@ -1,5 +1,5 @@ name=ArduinoJson -version=5.3.0 +version=5.6.7 author=Benoit Blanchon maintainer=Benoit Blanchon sentence=An efficient and elegant JSON library for Arduino. diff --git a/src/third-party/arduino-json-string-override.patch b/src/third-party/arduino-json-string-override.patch deleted file mode 100644 index 8d220d31..00000000 --- a/src/third-party/arduino-json-string-override.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/src/third-party/arduino-json-5.2/include/ArduinoJson/Arduino/String.hpp b/src/third-party/arduino-json-5.2/include/ArduinoJson/Arduino/String.hpp -index a11a651..83cf650 100644 ---- a/src/third-party/arduino-json-5.2/include/ArduinoJson/Arduino/String.hpp -+++ b/src/third-party/arduino-json-5.2/include/ArduinoJson/Arduino/String.hpp -@@ -9,8 +9,11 @@ - - #ifndef ARDUINO - -+#ifndef ARDUINO_STRING_OVERRIDE -+#define ARDUINO_STRING_OVERRIDE - #include - typedef std::string String; -+#endif - - #else - diff --git a/test/Makefile b/test/Makefile index 887c2b16..8c2e8a9e 100644 --- a/test/Makefile +++ b/test/Makefile @@ -16,30 +16,18 @@ FIREBASE_DIR=.. GTEST_DIR=googletest/googletest -ARDUINOJSON_DIR=../src/third-party/arduino-json-5.3 +ARDUINOJSON_DIR=../src/third-party/arduino-json-5.6.7 FIREBASE_SRCS=${FIREBASE_DIR}/src/FirebaseObject.cpp GTEST_SRCS=${GTEST_DIR}/src/gtest-all.cpp -ARDUINOJSON_SRCS=${ARDUINOJSON_DIR}/src/JsonBuffer.cpp\ - ${ARDUINOJSON_DIR}/src/JsonObject.cpp\ - ${ARDUINOJSON_DIR}/src/Internals/JsonParser.cpp\ - ${ARDUINOJSON_DIR}/src/Internals/Encoding.cpp\ - ${ARDUINOJSON_DIR}/src/Internals/Comments.cpp\ - ${ARDUINOJSON_DIR}/src/Internals/IndentedPrint.cpp\ - ${ARDUINOJSON_DIR}/src/Internals/StaticStringBuilder.cpp\ - ${ARDUINOJSON_DIR}/src/Internals/Prettyfier.cpp\ - ${ARDUINOJSON_DIR}/src/Internals/List.cpp\ - ${ARDUINOJSON_DIR}/src/JsonVariant.cpp\ - ${ARDUINOJSON_DIR}/src/JsonArray.cpp SRCS=FirebaseArduino_test.cpp\ ${FIREBASE_SRCS}\ - ${GTEST_SRCS}\ - ${ARDUINOJSON_SRCS} + ${GTEST_SRCS} OBJS=${SRCS:.cpp=.o} -CXXFLAGS=-I../src -Igoogletest/googletest/include -Igoogletest/googletest -std=c++11 -g +CXXFLAGS=-I. -I../src -Igoogletest/googletest/include -Igoogletest/googletest -std=c++11 -g LDFLAGS=-lpthread all: check diff --git a/test/WString.h b/test/WString.h new file mode 100644 index 00000000..4724d8b6 --- /dev/null +++ b/test/WString.h @@ -0,0 +1,3 @@ +#include + +typedef std::string String; diff --git a/test/modem/Makefile b/test/modem/Makefile index bbaa449c..2776b63a 100644 --- a/test/modem/Makefile +++ b/test/modem/Makefile @@ -77,7 +77,7 @@ test : $(TESTS) for t in $(TESTS); do ./$$t; done; clean : - rm -f $(TESTS) gmock.a gmock_main.a arduino_mock_all.a arduino_json.a *.o + rm -f $(TESTS) gmock.a gmock_main.a arduino_mock_all.a *.o # Builds gmock.a and gmock_main.a. These libraries contain both # Google Mock and Google Test. A test should link with either gmock.a @@ -123,45 +123,6 @@ ArduinoMockAll.o : $(ARDUINO_MOCK_SRCS_) arduino_mock_all.a : ArduinoMockAll.o $(AR) $(ARFLAGS) $@ $^ -# Builds ArduinoJson -ARDUINO_JSON_SRC_ = ../../src/third-party/arduino-json-5.3/src -JsonObject.o : $(ARDUINO_JSON_SRC_) - $(CXX) $(CPPFLAGS) -I$(ARDUINO_JSON_SRC_) $(CXXFLAGS) -c \ - $(ARDUINO_JSON_SRC_)/JsonObject.cpp - -JsonBuffer.o : $(ARDUINO_JSON_SRC_) - $(CXX) $(CPPFLAGS) -I$(ARDUINO_JSON_SRC_) $(CXXFLAGS) -c \ - $(ARDUINO_JSON_SRC_)/JsonBuffer.cpp - -JsonVariant.o : $(ARDUINO_JSON_SRC_) - $(CXX) $(CPPFLAGS) -I$(ARDUINO_JSON_SRC_) $(CXXFLAGS) -c \ - $(ARDUINO_JSON_SRC_)/JsonVariant.cpp - -JsonArray.o : $(ARDUINO_JSON_SRC_) - $(CXX) $(CPPFLAGS) -I$(ARDUINO_JSON_SRC_) $(CXXFLAGS) -c \ - $(ARDUINO_JSON_SRC_)/JsonArray.cpp - -JsonParser.o : $(ARDUINO_JSON_SRC_) - $(CXX) $(CPPFLAGS) -I$(ARDUINO_JSON_SRC_) $(CXXFLAGS) -c \ - $(ARDUINO_JSON_SRC_)/Internals/JsonParser.cpp - -Comments.o : $(ARDUINO_JSON_SRC_) - $(CXX) $(CPPFLAGS) -I$(ARDUINO_JSON_SRC_) $(CXXFLAGS) -c \ - $(ARDUINO_JSON_SRC_)/Internals/Comments.cpp - -List.o : $(ARDUINO_JSON_SRC_) - $(CXX) $(CPPFLAGS) -I$(ARDUINO_JSON_SRC_) $(CXXFLAGS) -c \ - $(ARDUINO_JSON_SRC_)/Internals/List.cpp - -Encoding.o : $(ARDUINO_JSON_SRC_) - $(CXX) $(CPPFLAGS) -I$(ARDUINO_JSON_SRC_) $(CXXFLAGS) -c \ - $(ARDUINO_JSON_SRC_)/Internals/Encoding.cpp - -arduino_json.a : JsonObject.o JsonBuffer.o JsonVariant.o JsonArray.o \ - JsonParser.o Comments.o List.o Encoding.o - $(AR) $(ARFLAGS) $@ $^ - - # Builds shared objects. Firebase.o : $(SRC_ROOT)/Firebase.cpp @@ -179,7 +140,7 @@ get-command_test.o : $(TEST_DIR)/get-command_test.cpp $(GMOCK_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/get-command_test.cpp get-command_test : get-command_test.o Firebase.o FirebaseHttpClient_dummy.o get-command.o gmock_main.a \ - arduino_mock_all.a arduino_json.a + arduino_mock_all.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ @@ -190,7 +151,7 @@ set-command_test.o : $(TEST_DIR)/set-command_test.cpp $(GMOCK_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/set-command_test.cpp set-command_test : set-command.o set-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \ - arduino_mock_all.a arduino_json.a + arduino_mock_all.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ @@ -201,7 +162,7 @@ remove-command_test.o : $(TEST_DIR)/remove-command_test.cpp $(GMOCK_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/remove-command_test.cpp remove-command_test : remove-command.o remove-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \ - arduino_mock_all.a arduino_json.a + arduino_mock_all.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ @@ -212,7 +173,7 @@ push-command_test.o : $(TEST_DIR)/push-command_test.cpp $(GMOCK_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/push-command_test.cpp push-command_test : push-command.o push-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \ - arduino_mock_all.a arduino_json.a + arduino_mock_all.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ @@ -223,7 +184,7 @@ begin-command_test.o : $(TEST_DIR)/begin-command_test.cpp $(GMOCK_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/begin-command_test.cpp begin-command_test : begin-command.o begin-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \ - arduino_mock_all.a arduino_json.a + arduino_mock_all.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ @@ -234,7 +195,7 @@ stream-command_test.o : $(TEST_DIR)/stream-command_test.cpp $(GMOCK_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/stream-command_test.cpp stream-command_test : stream-command.o stream-command_test.o Firebase.o FirebaseHttpClient_dummy.o gmock_main.a \ - arduino_mock_all.a arduino_json.a + arduino_mock_all.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@ @@ -244,6 +205,6 @@ SerialTransceiver.o : $(SRC_ROOT)/modem/SerialTransceiver.cpp serial-transceiver_test.o : $(TEST_DIR)/serial-transceiver_test.cpp $(GMOCK_HEADERS) $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(TEST_DIR)/serial-transceiver_test.cpp -serial-transceiver_test : SerialTransceiver.o serial-transceiver_test.o gmock_main.a arduino_mock_all.a arduino_json.a +serial-transceiver_test : SerialTransceiver.o serial-transceiver_test.o gmock_main.a arduino_mock_all.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@