Explorar el Código

Added parameter to `DynamicJsonBuffer` constructor to set initial size (issue #152)

Benoit Blanchon hace 10 años
padre
commit
ba3617c22f
Se han modificado 3 ficheros con 17 adiciones y 10 borrados
  1. 7 1
      CHANGELOG.md
  2. 6 5
      include/ArduinoJson/Internals/BlockJsonBuffer.hpp
  3. 4 4
      src/JsonVariant.cpp

+ 7 - 1
CHANGELOG.md

@@ -1,10 +1,16 @@
 ArduinoJson: change log
 =======================
 
+v5.0.6
+------
+
+* Added parameter to `DynamicJsonBuffer` constructor to set initial size (issue #152)
+* Fixed warning about library category in Arduino 1.6.6 (issue #147)
+
 v5.0.5
 ------
 
-* Add overload `JsonObjectSuscript::set(value, decimals)` (issue #143)
+* Added overload `JsonObjectSuscript::set(value, decimals)` (issue #143)
 * Use `float` instead of `double` to reduce the size of `JsonVariant` (issue #134)
 
 v5.0.4

+ 6 - 5
include/ArduinoJson/Internals/BlockJsonBuffer.hpp

@@ -31,7 +31,8 @@ class BlockJsonBuffer : public JsonBuffer {
   };
 
  public:
-  BlockJsonBuffer() : _head(NULL) {}
+  BlockJsonBuffer(size_t initialSize = 256)
+      : _head(NULL), _nextBlockSize(initialSize) {}
 
   ~BlockJsonBuffer() {
     Block* currentBlock = _head;
@@ -55,8 +56,6 @@ class BlockJsonBuffer : public JsonBuffer {
   }
 
  private:
-  static const size_t FIRST_BLOCK_CAPACITY = 32;
-
   bool canAllocInHead(size_t bytes) const {
     return _head != NULL && _head->size + bytes <= _head->capacity;
   }
@@ -68,10 +67,11 @@ class BlockJsonBuffer : public JsonBuffer {
   }
 
   void* allocInNewBlock(size_t bytes) {
-    size_t capacity = FIRST_BLOCK_CAPACITY;
+    size_t capacity = _nextBlockSize;
     if (_head != NULL) capacity = _head->capacity * 2;
     if (bytes > capacity) capacity = bytes;
     if (!addNewBlock(capacity)) return NULL;
+    _nextBlockSize *= 2;
     return allocInHead(bytes);
   }
 
@@ -86,8 +86,9 @@ class BlockJsonBuffer : public JsonBuffer {
     return true;
   }
 
-  Block* _head;
   TAllocator _allocator;
+  Block* _head;
+  size_t _nextBlockSize;
 };
 }
 }

+ 4 - 4
src/JsonVariant.cpp

@@ -20,22 +20,22 @@ template <typename TFloat>
 static TFloat parse(const char *);
 
 template <>
-FORCE_INLINE float parse<float>(const char *s) {
+float parse<float>(const char *s) {
   return static_cast<float>(strtod(s, NULL));
 }
 
 template <>
-FORCE_INLINE double parse<double>(const char *s) {
+double parse<double>(const char *s) {
   return strtod(s, NULL);
 }
 
 template <>
-FORCE_INLINE long parse<long>(const char *s) {
+long parse<long>(const char *s) {
   return strtol(s, NULL, 10);
 }
 
 template <>
-FORCE_INLINE int parse<int>(const char *s) {
+int parse<int>(const char *s) {
   return atoi(s);
 }