瀏覽代碼

Split jim_string into sized and NULL-terminated versions

rexim 4 年之前
父節點
當前提交
4a4c3527a1
共有 3 個文件被更改,包括 38 次插入25 次删除
  1. 7 8
      example.c
  2. 24 8
      jim.h
  3. 7 9
      test.c

+ 7 - 8
example.c

@@ -11,23 +11,23 @@ int main()
     };
 
     jim_object_begin(&jim);
-        jim_member_key(&jim, "null", NULL);
+        jim_member_key(&jim, "null");
         jim_null(&jim);
 
-        jim_member_key(&jim, "bool", NULL);
+        jim_member_key(&jim, "bool");
         jim_array_begin(&jim);
             jim_bool(&jim, 0);
             jim_bool(&jim, 1);
         jim_array_end(&jim);
 
-        jim_member_key(&jim, "integers", NULL);
+        jim_member_key(&jim, "integers");
         jim_array_begin(&jim);
             for (int i = -3; i <= 3; ++i) {
                 jim_integer(&jim, i);
             }
         jim_array_end(&jim);
 
-        jim_member_key(&jim, "floats", NULL);
+        jim_member_key(&jim, "floats");
         jim_array_begin(&jim);
             jim_float(&jim, 0.0, 4);
             jim_float(&jim, -0.0, 4);
@@ -39,11 +39,10 @@ int main()
             jim_float(&jim, -1.0 / 0.0, 4);
         jim_array_end(&jim);
 
-        jim_member_key(&jim, "string", NULL);
+        jim_member_key(&jim, "string");
         jim_array_begin(&jim);
-            jim_string(&jim, "Hello\tWorld\n", NULL);
-            unsigned int size = 4;
-            jim_string(&jim, "\0\0\0\0", &size);
+            jim_string(&jim, "Hello\tWorld\n");
+            jim_string_sized(&jim, "\0\0\0\0", 4);
         jim_array_end(&jim);
     jim_object_end(&jim);
 

+ 24 - 8
jim.h

@@ -42,7 +42,8 @@ void jim_null(Jim *jim);
 void jim_bool(Jim *jim, int boolean);
 void jim_integer(Jim *jim, long long int x);
 void jim_float(Jim *jim, double x, int precision);
-void jim_string(Jim *jim, const char *str, const unsigned int *size);
+void jim_string(Jim *jim, const char *str);
+void jim_string_sized(Jim *jim, const char *str, size_t size);
 
 void jim_element_begin(Jim *jim);
 void jim_element_end(Jim *jim);
@@ -51,7 +52,8 @@ void jim_array_begin(Jim *jim);
 void jim_array_end(Jim *jim);
 
 void jim_object_begin(Jim *jim);
-void jim_member_key(Jim *jim, const char *str, const unsigned int *size);
+void jim_member_key(Jim *jim, const char *str);
+void jim_member_key_sized(Jim *jim, const char *str, size_t size);
 void jim_object_end(Jim *jim);
 
 #endif // JIM_H_
@@ -268,13 +270,13 @@ void jim_float(Jim *jim, double x, int precision)
     }
 }
 
-static void jim_string_no_element(Jim *jim, const char *str, const unsigned int *size)
+static void jim_string_sized_no_element(Jim *jim, const char *str, size_t size)
 {
     if (jim->error == JIM_OK) {
         const char *hex_digits = "0123456789abcdef";
         const char *specials = "btnvfr";
         const char *p = str;
-        size_t len = size ? *size : jim_strlen(str);
+        size_t len = size;
 
         jim_write_cstr(jim, "\"");
         size_t cl;
@@ -302,15 +304,22 @@ static void jim_string_no_element(Jim *jim, const char *str, const unsigned int
     }
 }
 
-void jim_string(Jim *jim, const char *str, const unsigned int *size)
+void jim_string_sized(Jim *jim, const char *str, size_t size)
 {
     if (jim->error == JIM_OK) {
         jim_element_begin(jim);
-        jim_string_no_element(jim, str, size);
+        jim_string_sized_no_element(jim, str, size);
         jim_element_end(jim);
     }
 }
 
+void jim_string(Jim *jim, const char *str)
+{
+    if (jim->error == JIM_OK) {
+        jim_string_sized(jim, str, jim_strlen(str));
+    }
+}
+
 void jim_array_begin(Jim *jim)
 {
     if (jim->error == JIM_OK) {
@@ -339,14 +348,21 @@ void jim_object_begin(Jim *jim)
     }
 }
 
-void jim_member_key(Jim *jim, const char *str, const unsigned int *size)
+void jim_member_key(Jim *jim, const char *str)
+{
+    if (jim->error == JIM_OK) {
+        jim_member_key_sized(jim, str, jim_strlen(str));
+    }
+}
+
+void jim_member_key_sized(Jim *jim, const char *str, size_t size)
 {
     if (jim->error == JIM_OK) {
         jim_element_begin(jim);
         Jim_Scope *scope = jim_current_scope(jim);
         if (scope && scope->kind == JIM_OBJECT_SCOPE) {
             if (!scope->key) {
-                jim_string_no_element(jim, str, size);
+                jim_string_sized_no_element(jim, str, size);
                 jim_write_cstr(jim, ":");
                 scope->key = 1;
             } else {

+ 7 - 9
test.c

@@ -84,11 +84,10 @@ void float_case(Jim *jim)
 void string_case(Jim *jim)
 {
     jim_array_begin(jim);
-    jim_string(jim, "hello", NULL);
-    jim_string(jim, "world", NULL);
-    jim_string(jim, "\n\b\t", NULL);
-    const unsigned int size = 4;
-    jim_string(jim, "\0\0\0\0", &size);
+    jim_string(jim, "hello");
+    jim_string(jim, "world");
+    jim_string(jim, "\n\b\t");
+    jim_string_sized(jim, "\0\0\0\0", 4);
     jim_array_end(jim);
 }
 
@@ -108,9 +107,9 @@ void object_case_rec(Jim *jim, int level, int *counter)
 {
     if (level < 3) {
         jim_object_begin(jim);
-        jim_member_key(jim, "l", NULL);
+        jim_member_key(jim, "l");
         object_case_rec(jim, level + 1, counter);
-        jim_member_key(jim, "r", NULL);
+        jim_member_key(jim, "r");
         object_case_rec(jim, level + 1, counter);
         jim_object_end(jim);
     } else {
@@ -164,8 +163,7 @@ void record(const char *header_path)
         buffer_clean(&buffer);
         test_cases[i].run(&jim_buffer);
         fprintf(stream, "    ");
-        const unsigned int size = buffer.size;
-        jim_string(&jim_stream, buffer.data, &size);
+        jim_string_sized(&jim_stream, buffer.data, buffer.size);
         fprintf(stream, ",\n");
     }
     fprintf(stream, "};\n");