Sfoglia il codice sorgente

Helper function to check the type of an item

This is necessary, because you can get it wrong if you do it manually.
(when you forget the & 0xFF in the comparison)
Max Bruckner 8 anni fa
parent
commit
c26d53f0d7
2 ha cambiato i file con 112 aggiunte e 0 eliminazioni
  1. 100 0
      cJSON.c
  2. 12 0
      cJSON.h

+ 100 - 0
cJSON.c

@@ -2149,3 +2149,103 @@ void cJSON_Minify(char *json)
     /* and null-terminate. */
     *into = '\0';
 }
+
+extern cjbool cJSON_IsInvalid(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Invalid;
+}
+
+extern cjbool cJSON_IsFalse(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_False;
+}
+
+extern cjbool cJSON_IsTrue(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xff) == cJSON_True;
+}
+
+
+extern cjbool cJSON_IsBool(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & (cJSON_True | cJSON_False)) != 0;
+}
+extern cjbool cJSON_IsNull(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_NULL;
+}
+
+extern cjbool cJSON_IsNumber(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Number;
+}
+
+extern cjbool cJSON_IsString(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_String;
+}
+
+extern cjbool cJSON_IsArray(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Array;
+}
+
+extern cjbool cJSON_IsObject(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Object;
+}
+
+extern cjbool cJSON_IsRaw(const cJSON * const item)
+{
+    if (item == NULL)
+    {
+        return false;
+    }
+
+    return (item->type & 0xFF) == cJSON_Raw;
+}

+ 12 - 0
cJSON.h

@@ -109,6 +109,18 @@ extern int cJSON_HasObjectItem(const cJSON *object, const char *string);
 /* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
 extern const char *cJSON_GetErrorPtr(void);
 
+/* These functions check the type of an item */
+extern int cJSON_IsInvalid(const cJSON * const item);
+extern int cJSON_IsFalse(const cJSON * const item);
+extern int cJSON_IsTrue(const cJSON * const item);
+extern int cJSON_IsBool(const cJSON * const item);
+extern int cJSON_IsNull(const cJSON * const item);
+extern int cJSON_IsNumber(const cJSON * const item);
+extern int cJSON_IsString(const cJSON * const item);
+extern int cJSON_IsArray(const cJSON * const item);
+extern int cJSON_IsObject(const cJSON * const item);
+extern int cJSON_IsRaw(const cJSON * const item);
+
 /* These calls create a cJSON item of the appropriate type. */
 extern cJSON *cJSON_CreateNull(void);
 extern cJSON *cJSON_CreateTrue(void);