Quellcode durchsuchen

Changed `String` to be a `typedef` of `std::string` (issues #142 and #161)

Benoit Blanchon vor 10 Jahren
Ursprung
Commit
056682327b
5 geänderte Dateien mit 12 neuen und 55 gelöschten Zeilen
  1. 5 0
      CHANGELOG.md
  2. 1 10
      include/ArduinoJson/Arduino/String.hpp
  3. 0 31
      src/Arduino/String.cpp
  4. 4 12
      src/JsonVariant.cpp
  5. 2 2
      test/JsonVariant_As_Tests.cpp

+ 5 - 0
CHANGELOG.md

@@ -5,6 +5,11 @@ HEAD
 ----
 
 * Made library easier to use from a CMake project: simply add_subdirectory(ArduinoJson/src)
+* Changed `String` to be a `typedef` of `std::string` (issues #142 and #161)
+
+**BREAKING CHANGES**:
+- `JsonVariant(true).as<String>()` now returns `"true"` instead of `"1"`
+- `JsonVariant(false).as<String>()` now returns `"false"` instead of `"0"`
 
 v5.0.6
 ------

+ 1 - 10
include/ArduinoJson/Arduino/String.hpp

@@ -9,16 +9,7 @@
 #ifndef ARDUINO
 
 #include <string>
-
-// This class reproduces Arduino's String class
-class String : public std::string {
- public:
-  String(const char *cstr = "") : std::string(cstr) {}
-  String(const String &str) : std::string(str) {}
-  explicit String(long);
-  explicit String(int);
-  explicit String(double, unsigned char decimalPlaces = 2);
-};
+typedef std::string String;
 
 #else
 

+ 0 - 31
src/Arduino/String.cpp

@@ -1,31 +0,0 @@
-// Copyright Benoit Blanchon 2014-2015
-// MIT License
-//
-// Arduino JSON library
-// https://github.com/bblanchon/ArduinoJson
-
-#ifndef ARDUINO
-
-#include "../../include/ArduinoJson/Arduino/String.hpp"
-
-#include <stdio.h>  // for sprintf()
-
-String::String(double value, unsigned char digits) {
-  char tmp[32];
-  sprintf(tmp, "%.*f", digits, value);
-  *this = tmp;
-}
-
-String::String(long value) {
-  char tmp[32];
-  sprintf(tmp, "%ld", value);
-  *this = tmp;
-}
-
-String::String(int value) {
-  char tmp[32];
-  sprintf(tmp, "%d", value);
-  *this = tmp;
-}
-
-#endif

+ 4 - 12
src/JsonVariant.cpp

@@ -76,20 +76,12 @@ JsonInteger JsonVariant::asInteger() const {
 
 template <>
 String JsonVariant::as<String>() const {
+  String s;
   if ((_type == JSON_STRING || _type == JSON_UNPARSED) &&
       _content.asString != NULL)
-    return String(_content.asString);
-
-  if (_type == JSON_INTEGER || _type == JSON_BOOLEAN)
-    return String(_content.asInteger);
-
-  if (_type >= JSON_FLOAT_0_DECIMALS) {
-    uint8_t decimals = static_cast<uint8_t>(_type - JSON_FLOAT_0_DECIMALS);
-    return String(_content.asFloat, decimals);
-  }
-
-  String s;
-  printTo(s);
+    s = _content.asString;
+  else
+    printTo(s);
   return s;
 }
 

+ 2 - 2
test/JsonVariant_As_Tests.cpp

@@ -57,7 +57,7 @@ TEST(JsonVariant_As_Tests, FalseAsLong) {
 
 TEST(JsonVariant_As_Tests, FalseAsString) {
   JsonVariant variant = false;
-  ASSERT_EQ(String("0"), variant.as<String>());
+  ASSERT_EQ(String("false"), variant.as<String>());
 }
 
 TEST(JsonVariant_As_Tests, TrueAsBool) {
@@ -77,7 +77,7 @@ TEST(JsonVariant_As_Tests, TrueAsLong) {
 
 TEST(JsonVariant_As_Tests, TrueAsString) {
   JsonVariant variant = true;
-  ASSERT_EQ(String("1"), variant.as<String>());
+  ASSERT_EQ(String("true"), variant.as<String>());
 }
 
 TEST(JsonVariant_As_Tests, LongAsBool) {