ソースを参照

Optimized JsonVariant::is<float>()

Benoit Blanchon 4 年 前
コミット
892c37db08

+ 6 - 3
src/ArduinoJson/Variant/VariantContent.hpp

@@ -16,15 +16,18 @@ namespace ARDUINOJSON_NAMESPACE {
 enum {
 enum {
   VALUE_MASK = 0x7F,
   VALUE_MASK = 0x7F,
 
 
-  VALUE_IS_OWNED = 0x01,
+  OWNED_VALUE_BIT = 0x01,
   VALUE_IS_NULL = 0,
   VALUE_IS_NULL = 0,
   VALUE_IS_LINKED_RAW = 0x02,
   VALUE_IS_LINKED_RAW = 0x02,
   VALUE_IS_OWNED_RAW = 0x03,
   VALUE_IS_OWNED_RAW = 0x03,
   VALUE_IS_LINKED_STRING = 0x04,
   VALUE_IS_LINKED_STRING = 0x04,
   VALUE_IS_OWNED_STRING = 0x05,
   VALUE_IS_OWNED_STRING = 0x05,
 
 
-  // CAUTION: no VALUE_IS_OWNED below
+  // CAUTION: no OWNED_VALUE_BIT below
+
   VALUE_IS_BOOLEAN = 0x06,
   VALUE_IS_BOOLEAN = 0x06,
+
+  NUMBER_BIT = 0x08,
   VALUE_IS_UNSIGNED_INTEGER = 0x08,
   VALUE_IS_UNSIGNED_INTEGER = 0x08,
   VALUE_IS_SIGNED_INTEGER = 0x0A,
   VALUE_IS_SIGNED_INTEGER = 0x0A,
   VALUE_IS_FLOAT = 0x0C,
   VALUE_IS_FLOAT = 0x0C,
@@ -33,7 +36,7 @@ enum {
   VALUE_IS_OBJECT = 0x20,
   VALUE_IS_OBJECT = 0x20,
   VALUE_IS_ARRAY = 0x40,
   VALUE_IS_ARRAY = 0x40,
 
 
-  KEY_IS_OWNED = 0x80
+  OWNED_KEY_BIT = 0x80
 };
 };
 
 
 struct RawData {
 struct RawData {

+ 3 - 4
src/ArduinoJson/Variant/VariantData.hpp

@@ -141,8 +141,7 @@ class VariantData {
   }
   }
 
 
   bool isFloat() const {
   bool isFloat() const {
-    return type() == VALUE_IS_FLOAT || type() == VALUE_IS_UNSIGNED_INTEGER ||
-           type() == VALUE_IS_SIGNED_INTEGER;
+    return (_flags & NUMBER_BIT) != 0;
   }
   }
 
 
   bool isString() const {
   bool isString() const {
@@ -308,7 +307,7 @@ class VariantData {
   }
   }
 
 
   void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
   void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
-    if (_flags & VALUE_IS_OWNED)
+    if (_flags & OWNED_VALUE_BIT)
       _content.asString += stringDistance;
       _content.asString += stringDistance;
     if (_flags & COLLECTION_MASK)
     if (_flags & COLLECTION_MASK)
       _content.asCollection.movePointers(stringDistance, variantDistance);
       _content.asCollection.movePointers(stringDistance, variantDistance);
@@ -320,7 +319,7 @@ class VariantData {
 
 
  private:
  private:
   void setType(uint8_t t) {
   void setType(uint8_t t) {
-    _flags &= KEY_IS_OWNED;
+    _flags &= OWNED_KEY_BIT;
     _flags |= t;
     _flags |= t;
   }
   }
 
 

+ 4 - 4
src/ArduinoJson/Variant/VariantSlot.hpp

@@ -79,7 +79,7 @@ class VariantSlot {
 
 
   void setKey(const char* k, storage_policies::store_by_copy) {
   void setKey(const char* k, storage_policies::store_by_copy) {
     ARDUINOJSON_ASSERT(k != NULL);
     ARDUINOJSON_ASSERT(k != NULL);
-    _flags |= KEY_IS_OWNED;
+    _flags |= OWNED_KEY_BIT;
     _key = k;
     _key = k;
   }
   }
 
 
@@ -94,7 +94,7 @@ class VariantSlot {
   }
   }
 
 
   bool ownsKey() const {
   bool ownsKey() const {
-    return (_flags & KEY_IS_OWNED) != 0;
+    return (_flags & OWNED_KEY_BIT) != 0;
   }
   }
 
 
   void clear() {
   void clear() {
@@ -104,9 +104,9 @@ class VariantSlot {
   }
   }
 
 
   void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
   void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance) {
-    if (_flags & KEY_IS_OWNED)
+    if (_flags & OWNED_KEY_BIT)
       _key += stringDistance;
       _key += stringDistance;
-    if (_flags & VALUE_IS_OWNED)
+    if (_flags & OWNED_VALUE_BIT)
       _content.asString += stringDistance;
       _content.asString += stringDistance;
     if (_flags & COLLECTION_MASK)
     if (_flags & COLLECTION_MASK)
       _content.asCollection.movePointers(stringDistance, variantDistance);
       _content.asCollection.movePointers(stringDistance, variantDistance);