libyajl2 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +25 -0
- data/.gitmodules +3 -0
- data/.kitchen.cloud.yml +87 -0
- data/.kitchen.yml +38 -0
- data/.reek.yml +3 -0
- data/.rspec +1 -0
- data/.rubocop.yml +38 -0
- data/.travis.yml +8 -0
- data/CONTRIBUTING.md +4 -0
- data/Gemfile +12 -0
- data/LICENSE +201 -0
- data/README.md +9 -0
- data/Rakefile +144 -0
- data/bootstrap.sh +60 -0
- data/ext/libyajl2/Makefile +7 -0
- data/ext/libyajl2/extconf.rb +66 -0
- data/ext/libyajl2/vendor/yajl/.gitignore +3 -0
- data/ext/libyajl2/vendor/yajl/BUILDING +23 -0
- data/ext/libyajl2/vendor/yajl/BUILDING.win32 +27 -0
- data/ext/libyajl2/vendor/yajl/CMakeLists.txt +81 -0
- data/ext/libyajl2/vendor/yajl/COPYING +13 -0
- data/ext/libyajl2/vendor/yajl/ChangeLog +189 -0
- data/ext/libyajl2/vendor/yajl/README +74 -0
- data/ext/libyajl2/vendor/yajl/TODO +9 -0
- data/ext/libyajl2/vendor/yajl/YAJLDoc.cmake +26 -0
- data/ext/libyajl2/vendor/yajl/configure +81 -0
- data/ext/libyajl2/vendor/yajl/example/CMakeLists.txt +23 -0
- data/ext/libyajl2/vendor/yajl/example/README.md +7 -0
- data/ext/libyajl2/vendor/yajl/example/parse_config.c +69 -0
- data/ext/libyajl2/vendor/yajl/example/sample.config +101 -0
- data/ext/libyajl2/vendor/yajl/perf/CMakeLists.txt +23 -0
- data/ext/libyajl2/vendor/yajl/perf/documents.c +1418 -0
- data/ext/libyajl2/vendor/yajl/perf/documents.h +28 -0
- data/ext/libyajl2/vendor/yajl/perf/perftest.c +134 -0
- data/ext/libyajl2/vendor/yajl/reformatter/CMakeLists.txt +43 -0
- data/ext/libyajl2/vendor/yajl/reformatter/json_reformat.c +210 -0
- data/ext/libyajl2/vendor/yajl/src/CMakeLists.txt +87 -0
- data/ext/libyajl2/vendor/yajl/src/YAJL.dxy +1258 -0
- data/ext/libyajl2/vendor/yajl/src/api/yajl_common.h +75 -0
- data/ext/libyajl2/vendor/yajl/src/api/yajl_gen.h +167 -0
- data/ext/libyajl2/vendor/yajl/src/api/yajl_parse.h +226 -0
- data/ext/libyajl2/vendor/yajl/src/api/yajl_tree.h +186 -0
- data/ext/libyajl2/vendor/yajl/src/api/yajl_version.h.cmake +23 -0
- data/ext/libyajl2/vendor/yajl/src/yajl +33 -0
- data/ext/libyajl2/vendor/yajl/src/yajl.c +175 -0
- data/ext/libyajl2/vendor/yajl/src/yajl.pc.cmake +9 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_alloc.c +52 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_alloc.h +34 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_buf.c +103 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_buf.h +57 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_bytestack.h +69 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_encode.c +220 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_encode.h +34 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_gen.c +362 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_lex.c +763 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_lex.h +117 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_parser.c +498 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_parser.h +78 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_tree.c +503 -0
- data/ext/libyajl2/vendor/yajl/src/yajl_version.c +7 -0
- data/ext/libyajl2/vendor/yajl/test/CMakeLists.txt +16 -0
- data/ext/libyajl2/vendor/yajl/test/api/CMakeLists.txt +25 -0
- data/ext/libyajl2/vendor/yajl/test/api/gen-extra-close.c +19 -0
- data/ext/libyajl2/vendor/yajl/test/api/run_tests.sh +23 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/CMakeLists.txt +23 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ac_difficult_json_c_test_case_with_comments.json.gold +36 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ac_simple_with_comments.json +11 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ac_simple_with_comments.json.gold +9 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ag_false_then_garbage.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ag_false_then_garbage.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ag_null_then_garbage.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ag_null_then_garbage.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ag_true_then_garbage.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ag_true_then_garbage.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/am_eof.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/am_eof.json.gold +4 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/am_integers.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/am_integers.json.gold +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/am_multiple.json +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/am_multiple.json.gold +5 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/am_stuff.json +7 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/am_stuff.json.gold +14 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ap_array_open.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ap_array_open.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ap_eof_str.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ap_eof_str.json.gold +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ap_map_open.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ap_map_open.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ap_partial_ok.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/ap_partial_ok.json.gold +4 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/array.json +6 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/array.json.gold +22 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/array_close.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/array_close.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/bignums.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/bignums.json.gold +5 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/bogus_char.json +4 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/bogus_char.json.gold +10 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/codepoints_from_unicode_org.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/codepoints_from_unicode_org.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/deep_arrays.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/deep_arrays.json.gold +2049 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/difficult_json_c_test_case.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/difficult_json_c_test_case.json.gold +36 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/doubles.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/doubles.json.gold +7 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/doubles_in_array.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/doubles_in_array.json.gold +8 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/empty_array.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/empty_array.json.gold +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/empty_string.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/empty_string.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/escaped_bulgarian.json +4 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/escaped_bulgarian.json.gold +7 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/escaped_foobar.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/escaped_foobar.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/false.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/false.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/fg_false_then_garbage.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/fg_false_then_garbage.json.gold +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/fg_issue_7.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/fg_issue_7.json.gold +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/fg_null_then_garbage.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/fg_null_then_garbage.json.gold +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/fg_true_then_garbage.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/fg_true_then_garbage.json.gold +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/four_byte_utf8.json +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/four_byte_utf8.json.gold +5 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/high_overflow.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/high_overflow.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/integers.json +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/integers.json.gold +14 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/invalid_utf8.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/invalid_utf8.json.gold +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/isolated_surrogate_marker.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/isolated_surrogate_marker.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/leading_zero_in_number.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/leading_zero_in_number.json.gold +5 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/lonely_minus_sign.json +7 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/lonely_minus_sign.json.gold +9 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/lonely_number.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/lonely_number.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/low_overflow.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/low_overflow.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/map_close.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/map_close.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/missing_integer_after_decimal_point.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/missing_integer_after_decimal_point.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/missing_integer_after_exponent.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/missing_integer_after_exponent.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/multiple.json +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/multiple.json.gold +4 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/non_utf8_char_in_string.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/non_utf8_char_in_string.json.gold +8 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/np_partial_bad.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/np_partial_bad.json.gold +5 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/null.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/null.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/nulls_and_bools.json +5 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/nulls_and_bools.json.gold +9 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/simple.json +5 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/simple.json.gold +9 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/simple_with_comments.json +11 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/simple_with_comments.json.gold +5 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/string_invalid_escape.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/string_invalid_escape.json.gold +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/string_invalid_hex_char.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/string_invalid_hex_char.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/string_with_escapes.json +3 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/string_with_escapes.json.gold +7 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/string_with_invalid_newline.json +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/string_with_invalid_newline.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/three_byte_utf8.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/three_byte_utf8.json.gold +7 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/true.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/true.json.gold +2 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/unescaped_bulgarian.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/unescaped_bulgarian.json.gold +4 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/zerobyte.json +1 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/cases/zerobyte.json.gold +0 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/run_tests.sh +94 -0
- data/ext/libyajl2/vendor/yajl/test/parsing/yajl_test.c +291 -0
- data/ext/libyajl2/vendor/yajl/verify/CMakeLists.txt +37 -0
- data/ext/libyajl2/vendor/yajl/verify/json_verify.c +120 -0
- data/lib/libyajl2.rb +13 -0
- data/lib/libyajl2/version.rb +3 -0
- data/libyajl2.gemspec +29 -0
- data/spec/ffi_spec.rb +20 -0
- data/spec/path_spec.rb +15 -0
- data/spec/spec_helper.rb +13 -0
- metadata +296 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2007-2014, Lloyd Hilaiel <me@lloyd.io>
|
|
3
|
+
*
|
|
4
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
|
5
|
+
* purpose with or without fee is hereby granted, provided that the above
|
|
6
|
+
* copyright notice and this permission notice appear in all copies.
|
|
7
|
+
*
|
|
8
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
9
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
10
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
11
|
+
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
12
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
13
|
+
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
14
|
+
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#ifndef __DOCUMENTS_H__
|
|
18
|
+
#define __DOCUMENTS_H__
|
|
19
|
+
|
|
20
|
+
/* a header that provides access to several json documents broken into chunks of
|
|
21
|
+
* less than 4k, cause C99 says that's what we should do and YAJL likes streams */
|
|
22
|
+
|
|
23
|
+
extern const char ** g_documents[];
|
|
24
|
+
int num_docs(void);
|
|
25
|
+
const char ** get_doc(int i);
|
|
26
|
+
unsigned int doc_size(int i);
|
|
27
|
+
|
|
28
|
+
#endif
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2007-2014, Lloyd Hilaiel <me@lloyd.io>
|
|
3
|
+
*
|
|
4
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
|
5
|
+
* purpose with or without fee is hereby granted, provided that the above
|
|
6
|
+
* copyright notice and this permission notice appear in all copies.
|
|
7
|
+
*
|
|
8
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
9
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
10
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
11
|
+
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
12
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
13
|
+
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
14
|
+
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#include <yajl/yajl_parse.h>
|
|
18
|
+
#include <stdio.h>
|
|
19
|
+
#include <stdlib.h>
|
|
20
|
+
#include <string.h>
|
|
21
|
+
|
|
22
|
+
#include "documents.h"
|
|
23
|
+
|
|
24
|
+
/* a platform specific defn' of a function to get a high res time in a
|
|
25
|
+
* portable format */
|
|
26
|
+
#ifndef WIN32
|
|
27
|
+
#include <sys/time.h>
|
|
28
|
+
static double mygettime(void) {
|
|
29
|
+
struct timeval now;
|
|
30
|
+
gettimeofday(&now, NULL);
|
|
31
|
+
return now.tv_sec + (now.tv_usec / 1000000.0);
|
|
32
|
+
}
|
|
33
|
+
#else
|
|
34
|
+
#define _WIN32 1
|
|
35
|
+
#include <windows.h>
|
|
36
|
+
static double mygettime(void) {
|
|
37
|
+
long long tval;
|
|
38
|
+
FILETIME ft;
|
|
39
|
+
GetSystemTimeAsFileTime(&ft);
|
|
40
|
+
tval = ft.dwHighDateTime;
|
|
41
|
+
tval <<=32;
|
|
42
|
+
tval |= ft.dwLowDateTime;
|
|
43
|
+
return tval / 10000000.00;
|
|
44
|
+
}
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#define PARSE_TIME_SECS 3
|
|
48
|
+
|
|
49
|
+
static int
|
|
50
|
+
run(int validate_utf8)
|
|
51
|
+
{
|
|
52
|
+
long long times = 0;
|
|
53
|
+
double starttime;
|
|
54
|
+
|
|
55
|
+
starttime = mygettime();
|
|
56
|
+
|
|
57
|
+
/* allocate a parser */
|
|
58
|
+
for (;;) {
|
|
59
|
+
int i;
|
|
60
|
+
{
|
|
61
|
+
double now = mygettime();
|
|
62
|
+
if (now - starttime >= PARSE_TIME_SECS) break;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
for (i = 0; i < 100; i++) {
|
|
66
|
+
yajl_handle hand = yajl_alloc(NULL, NULL, NULL);
|
|
67
|
+
yajl_status stat;
|
|
68
|
+
const char ** d;
|
|
69
|
+
|
|
70
|
+
yajl_config(hand, yajl_dont_validate_strings, validate_utf8 ? 0 : 1);
|
|
71
|
+
|
|
72
|
+
for (d = get_doc(times % num_docs()); *d; d++) {
|
|
73
|
+
stat = yajl_parse(hand, (unsigned char *) *d, strlen(*d));
|
|
74
|
+
if (stat != yajl_status_ok) break;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
stat = yajl_complete_parse(hand);
|
|
78
|
+
|
|
79
|
+
if (stat != yajl_status_ok) {
|
|
80
|
+
unsigned char * str =
|
|
81
|
+
yajl_get_error(hand, 1,
|
|
82
|
+
(unsigned char *) *d,
|
|
83
|
+
(*d ? strlen(*d) : 0));
|
|
84
|
+
fprintf(stderr, "%s", (const char *) str);
|
|
85
|
+
yajl_free_error(hand, str);
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
yajl_free(hand);
|
|
89
|
+
times++;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/* parsed doc 'times' times */
|
|
94
|
+
{
|
|
95
|
+
double throughput;
|
|
96
|
+
double now;
|
|
97
|
+
const char * all_units[] = { "B/s", "KB/s", "MB/s", (char *) 0 };
|
|
98
|
+
const char ** units = all_units;
|
|
99
|
+
int i, avg_doc_size = 0;
|
|
100
|
+
|
|
101
|
+
now = mygettime();
|
|
102
|
+
|
|
103
|
+
for (i = 0; i < num_docs(); i++) avg_doc_size += doc_size(i);
|
|
104
|
+
avg_doc_size /= num_docs();
|
|
105
|
+
|
|
106
|
+
throughput = (times * avg_doc_size) / (now - starttime);
|
|
107
|
+
|
|
108
|
+
while (*(units + 1) && throughput > 1024) {
|
|
109
|
+
throughput /= 1024;
|
|
110
|
+
units++;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
printf("Parsing speed: %g %s\n", throughput, *units);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return 0;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
int
|
|
120
|
+
main(void)
|
|
121
|
+
{
|
|
122
|
+
int rv = 0;
|
|
123
|
+
|
|
124
|
+
printf("-- speed tests determine parsing throughput given %d different sample documents --\n",
|
|
125
|
+
num_docs());
|
|
126
|
+
|
|
127
|
+
printf("With UTF8 validation:\n");
|
|
128
|
+
rv = run(1);
|
|
129
|
+
if (rv != 0) return rv;
|
|
130
|
+
printf("Without UTF8 validation:\n");
|
|
131
|
+
rv = run(0);
|
|
132
|
+
return rv;
|
|
133
|
+
}
|
|
134
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Copyright (c) 2007-2014, Lloyd Hilaiel <me@lloyd.io>
|
|
2
|
+
#
|
|
3
|
+
# Permission to use, copy, modify, and/or distribute this software for any
|
|
4
|
+
# purpose with or without fee is hereby granted, provided that the above
|
|
5
|
+
# copyright notice and this permission notice appear in all copies.
|
|
6
|
+
#
|
|
7
|
+
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
8
|
+
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
9
|
+
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
10
|
+
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
11
|
+
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
12
|
+
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
13
|
+
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
14
|
+
|
|
15
|
+
# set up a paths
|
|
16
|
+
SET (binDir ${CMAKE_CURRENT_BINARY_DIR}/../${YAJL_DIST_NAME}/bin)
|
|
17
|
+
|
|
18
|
+
# create a directories
|
|
19
|
+
FILE(MAKE_DIRECTORY ${binDir})
|
|
20
|
+
|
|
21
|
+
SET (SRCS json_reformat.c)
|
|
22
|
+
|
|
23
|
+
# use the library we build, duh.
|
|
24
|
+
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/../${YAJL_DIST_NAME}/include)
|
|
25
|
+
LINK_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/../${YAJL_DIST_NAME}/lib)
|
|
26
|
+
|
|
27
|
+
ADD_EXECUTABLE(json_reformat ${SRCS})
|
|
28
|
+
|
|
29
|
+
TARGET_LINK_LIBRARIES(json_reformat yajl_s)
|
|
30
|
+
|
|
31
|
+
# In some environments, we must explicitly link libm (like qnx,
|
|
32
|
+
# thanks @shahbag)
|
|
33
|
+
IF (NOT WIN32)
|
|
34
|
+
TARGET_LINK_LIBRARIES(json_reformat m)
|
|
35
|
+
ENDIF (NOT WIN32)
|
|
36
|
+
|
|
37
|
+
# copy the binary into the output directory
|
|
38
|
+
GET_TARGET_PROPERTY(binPath json_reformat LOCATION)
|
|
39
|
+
|
|
40
|
+
ADD_CUSTOM_COMMAND(TARGET json_reformat POST_BUILD
|
|
41
|
+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${binPath} ${binDir})
|
|
42
|
+
|
|
43
|
+
INSTALL(TARGETS json_reformat RUNTIME DESTINATION bin)
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2007-2014, Lloyd Hilaiel <me@lloyd.io>
|
|
3
|
+
*
|
|
4
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
|
5
|
+
* purpose with or without fee is hereby granted, provided that the above
|
|
6
|
+
* copyright notice and this permission notice appear in all copies.
|
|
7
|
+
*
|
|
8
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
9
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
10
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
11
|
+
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
12
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
13
|
+
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
14
|
+
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#include <yajl/yajl_parse.h>
|
|
18
|
+
#include <yajl/yajl_gen.h>
|
|
19
|
+
|
|
20
|
+
#include <stdio.h>
|
|
21
|
+
#include <stdlib.h>
|
|
22
|
+
#include <string.h>
|
|
23
|
+
|
|
24
|
+
/* non-zero when we're reformatting a stream */
|
|
25
|
+
static int s_streamReformat = 0;
|
|
26
|
+
|
|
27
|
+
#define GEN_AND_RETURN(func) \
|
|
28
|
+
{ \
|
|
29
|
+
yajl_gen_status __stat = func; \
|
|
30
|
+
if (__stat == yajl_gen_generation_complete && s_streamReformat) { \
|
|
31
|
+
yajl_gen_reset(g, "\n"); \
|
|
32
|
+
__stat = func; \
|
|
33
|
+
} \
|
|
34
|
+
return __stat == yajl_gen_status_ok; }
|
|
35
|
+
|
|
36
|
+
static int reformat_null(void * ctx)
|
|
37
|
+
{
|
|
38
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
39
|
+
GEN_AND_RETURN(yajl_gen_null(g));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static int reformat_boolean(void * ctx, int boolean)
|
|
43
|
+
{
|
|
44
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
45
|
+
GEN_AND_RETURN(yajl_gen_bool(g, boolean));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static int reformat_number(void * ctx, const char * s, size_t l)
|
|
49
|
+
{
|
|
50
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
51
|
+
GEN_AND_RETURN(yajl_gen_number(g, s, l));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static int reformat_string(void * ctx, const unsigned char * stringVal,
|
|
55
|
+
size_t stringLen)
|
|
56
|
+
{
|
|
57
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
58
|
+
GEN_AND_RETURN(yajl_gen_string(g, stringVal, stringLen));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
static int reformat_map_key(void * ctx, const unsigned char * stringVal,
|
|
62
|
+
size_t stringLen)
|
|
63
|
+
{
|
|
64
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
65
|
+
GEN_AND_RETURN(yajl_gen_string(g, stringVal, stringLen));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
static int reformat_start_map(void * ctx)
|
|
69
|
+
{
|
|
70
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
71
|
+
GEN_AND_RETURN(yajl_gen_map_open(g));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
static int reformat_end_map(void * ctx)
|
|
76
|
+
{
|
|
77
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
78
|
+
GEN_AND_RETURN(yajl_gen_map_close(g));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
static int reformat_start_array(void * ctx)
|
|
82
|
+
{
|
|
83
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
84
|
+
GEN_AND_RETURN(yajl_gen_array_open(g));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
static int reformat_end_array(void * ctx)
|
|
88
|
+
{
|
|
89
|
+
yajl_gen g = (yajl_gen) ctx;
|
|
90
|
+
GEN_AND_RETURN(yajl_gen_array_close(g));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static yajl_callbacks callbacks = {
|
|
94
|
+
reformat_null,
|
|
95
|
+
reformat_boolean,
|
|
96
|
+
NULL,
|
|
97
|
+
NULL,
|
|
98
|
+
reformat_number,
|
|
99
|
+
reformat_string,
|
|
100
|
+
reformat_start_map,
|
|
101
|
+
reformat_map_key,
|
|
102
|
+
reformat_end_map,
|
|
103
|
+
reformat_start_array,
|
|
104
|
+
reformat_end_array
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
static void
|
|
108
|
+
usage(const char * progname)
|
|
109
|
+
{
|
|
110
|
+
fprintf(stderr, "%s: reformat json from stdin\n"
|
|
111
|
+
"usage: json_reformat [options]\n"
|
|
112
|
+
" -e escape any forward slashes (for embedding in HTML)\n"
|
|
113
|
+
" -m minimize json rather than beautify (default)\n"
|
|
114
|
+
" -s reformat a stream of multiple json entites\n"
|
|
115
|
+
" -u allow invalid UTF8 inside strings during parsing\n",
|
|
116
|
+
progname);
|
|
117
|
+
exit(1);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
int
|
|
121
|
+
main(int argc, char ** argv)
|
|
122
|
+
{
|
|
123
|
+
yajl_handle hand;
|
|
124
|
+
static unsigned char fileData[65536];
|
|
125
|
+
/* generator config */
|
|
126
|
+
yajl_gen g;
|
|
127
|
+
yajl_status stat;
|
|
128
|
+
size_t rd;
|
|
129
|
+
int retval = 0;
|
|
130
|
+
int a = 1;
|
|
131
|
+
|
|
132
|
+
g = yajl_gen_alloc(NULL);
|
|
133
|
+
yajl_gen_config(g, yajl_gen_beautify, 1);
|
|
134
|
+
yajl_gen_config(g, yajl_gen_validate_utf8, 1);
|
|
135
|
+
|
|
136
|
+
/* ok. open file. let's read and parse */
|
|
137
|
+
hand = yajl_alloc(&callbacks, NULL, (void *) g);
|
|
138
|
+
/* and let's allow comments by default */
|
|
139
|
+
yajl_config(hand, yajl_allow_comments, 1);
|
|
140
|
+
|
|
141
|
+
/* check arguments.*/
|
|
142
|
+
while ((a < argc) && (argv[a][0] == '-') && (strlen(argv[a]) > 1)) {
|
|
143
|
+
unsigned int i;
|
|
144
|
+
for ( i=1; i < strlen(argv[a]); i++) {
|
|
145
|
+
switch (argv[a][i]) {
|
|
146
|
+
case 'm':
|
|
147
|
+
yajl_gen_config(g, yajl_gen_beautify, 0);
|
|
148
|
+
break;
|
|
149
|
+
case 's':
|
|
150
|
+
yajl_config(hand, yajl_allow_multiple_values, 1);
|
|
151
|
+
s_streamReformat = 1;
|
|
152
|
+
break;
|
|
153
|
+
case 'u':
|
|
154
|
+
yajl_config(hand, yajl_dont_validate_strings, 1);
|
|
155
|
+
break;
|
|
156
|
+
case 'e':
|
|
157
|
+
yajl_gen_config(g, yajl_gen_escape_solidus, 1);
|
|
158
|
+
break;
|
|
159
|
+
default:
|
|
160
|
+
fprintf(stderr, "unrecognized option: '%c'\n\n",
|
|
161
|
+
argv[a][i]);
|
|
162
|
+
usage(argv[0]);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
++a;
|
|
166
|
+
}
|
|
167
|
+
if (a < argc) {
|
|
168
|
+
usage(argv[0]);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
for (;;) {
|
|
173
|
+
rd = fread((void *) fileData, 1, sizeof(fileData) - 1, stdin);
|
|
174
|
+
|
|
175
|
+
if (rd == 0) {
|
|
176
|
+
if (!feof(stdin)) {
|
|
177
|
+
fprintf(stderr, "error on file read.\n");
|
|
178
|
+
retval = 1;
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
fileData[rd] = 0;
|
|
183
|
+
|
|
184
|
+
stat = yajl_parse(hand, fileData, rd);
|
|
185
|
+
|
|
186
|
+
if (stat != yajl_status_ok) break;
|
|
187
|
+
|
|
188
|
+
{
|
|
189
|
+
const unsigned char * buf;
|
|
190
|
+
size_t len;
|
|
191
|
+
yajl_gen_get_buf(g, &buf, &len);
|
|
192
|
+
fwrite(buf, 1, len, stdout);
|
|
193
|
+
yajl_gen_clear(g);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
stat = yajl_complete_parse(hand);
|
|
198
|
+
|
|
199
|
+
if (stat != yajl_status_ok) {
|
|
200
|
+
unsigned char * str = yajl_get_error(hand, 1, fileData, rd);
|
|
201
|
+
fprintf(stderr, "%s", (const char *) str);
|
|
202
|
+
yajl_free_error(hand, str);
|
|
203
|
+
retval = 1;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
yajl_gen_free(g);
|
|
207
|
+
yajl_free(hand);
|
|
208
|
+
|
|
209
|
+
return retval;
|
|
210
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Copyright (c) 2007-2014, Lloyd Hilaiel <me@lloyd.io>
|
|
2
|
+
#
|
|
3
|
+
# Permission to use, copy, modify, and/or distribute this software for any
|
|
4
|
+
# purpose with or without fee is hereby granted, provided that the above
|
|
5
|
+
# copyright notice and this permission notice appear in all copies.
|
|
6
|
+
#
|
|
7
|
+
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
8
|
+
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
9
|
+
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
10
|
+
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
11
|
+
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
12
|
+
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
13
|
+
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
14
|
+
|
|
15
|
+
SET (SRCS yajl.c yajl_lex.c yajl_parser.c yajl_buf.c
|
|
16
|
+
yajl_encode.c yajl_gen.c yajl_alloc.c
|
|
17
|
+
yajl_tree.c yajl_version.c
|
|
18
|
+
)
|
|
19
|
+
SET (HDRS yajl_parser.h yajl_lex.h yajl_buf.h yajl_encode.h yajl_alloc.h)
|
|
20
|
+
SET (PUB_HDRS api/yajl_parse.h api/yajl_gen.h api/yajl_common.h api/yajl_tree.h)
|
|
21
|
+
|
|
22
|
+
# useful when fixing lexer bugs.
|
|
23
|
+
#ADD_DEFINITIONS(-DYAJL_LEXER_DEBUG)
|
|
24
|
+
|
|
25
|
+
# Ensure defined when building YAJL (as opposed to using it from
|
|
26
|
+
# another project). Used to ensure correct function export when
|
|
27
|
+
# building win32 DLL.
|
|
28
|
+
ADD_DEFINITIONS(-DYAJL_BUILD)
|
|
29
|
+
|
|
30
|
+
# set up some paths
|
|
31
|
+
SET (libDir ${CMAKE_CURRENT_BINARY_DIR}/../${YAJL_DIST_NAME}/lib)
|
|
32
|
+
SET (incDir ${CMAKE_CURRENT_BINARY_DIR}/../${YAJL_DIST_NAME}/include/yajl)
|
|
33
|
+
SET (shareDir ${CMAKE_CURRENT_BINARY_DIR}/../${YAJL_DIST_NAME}/share/pkgconfig)
|
|
34
|
+
|
|
35
|
+
# set the output path for libraries
|
|
36
|
+
SET(LIBRARY_OUTPUT_PATH ${libDir})
|
|
37
|
+
|
|
38
|
+
ADD_LIBRARY(yajl_s STATIC ${SRCS} ${HDRS} ${PUB_HDRS})
|
|
39
|
+
|
|
40
|
+
ADD_LIBRARY(yajl SHARED ${SRCS} ${HDRS} ${PUB_HDRS})
|
|
41
|
+
|
|
42
|
+
#### setup shared library version number
|
|
43
|
+
SET_TARGET_PROPERTIES(yajl PROPERTIES
|
|
44
|
+
DEFINE_SYMBOL YAJL_SHARED
|
|
45
|
+
SOVERSION ${YAJL_MAJOR}
|
|
46
|
+
VERSION ${YAJL_MAJOR}.${YAJL_MINOR}.${YAJL_MICRO})
|
|
47
|
+
|
|
48
|
+
#### ensure a .dylib has correct absolute installation paths upon installation
|
|
49
|
+
IF(APPLE)
|
|
50
|
+
MESSAGE("INSTALL_NAME_DIR: ${CMAKE_INSTALL_PREFIX}/lib")
|
|
51
|
+
SET_TARGET_PROPERTIES(yajl PROPERTIES
|
|
52
|
+
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
|
|
53
|
+
ENDIF(APPLE)
|
|
54
|
+
|
|
55
|
+
#### build up an sdk as a post build step
|
|
56
|
+
|
|
57
|
+
# create some directories
|
|
58
|
+
FILE(MAKE_DIRECTORY ${libDir})
|
|
59
|
+
FILE(MAKE_DIRECTORY ${incDir})
|
|
60
|
+
|
|
61
|
+
# generate build-time source
|
|
62
|
+
SET(dollar $)
|
|
63
|
+
CONFIGURE_FILE(api/yajl_version.h.cmake ${incDir}/yajl_version.h)
|
|
64
|
+
CONFIGURE_FILE(yajl.pc.cmake ${shareDir}/yajl.pc)
|
|
65
|
+
|
|
66
|
+
# copy public headers to output directory
|
|
67
|
+
FOREACH (header ${PUB_HDRS})
|
|
68
|
+
SET (header ${CMAKE_CURRENT_SOURCE_DIR}/${header})
|
|
69
|
+
|
|
70
|
+
EXEC_PROGRAM(${CMAKE_COMMAND} ARGS -E copy_if_different ${header} ${incDir})
|
|
71
|
+
|
|
72
|
+
ADD_CUSTOM_COMMAND(TARGET yajl_s POST_BUILD
|
|
73
|
+
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${header} ${incDir})
|
|
74
|
+
ENDFOREACH (header ${PUB_HDRS})
|
|
75
|
+
|
|
76
|
+
INCLUDE_DIRECTORIES(${incDir}/..)
|
|
77
|
+
|
|
78
|
+
# at build time you may specify the cmake variable LIB_SUFFIX to handle
|
|
79
|
+
# 64-bit systems which use 'lib64'
|
|
80
|
+
INSTALL(TARGETS yajl
|
|
81
|
+
RUNTIME DESTINATION lib${LIB_SUFFIX}
|
|
82
|
+
LIBRARY DESTINATION lib${LIB_SUFFIX}
|
|
83
|
+
ARCHIVE DESTINATION lib${LIB_SUFFIX})
|
|
84
|
+
INSTALL(TARGETS yajl_s ARCHIVE DESTINATION lib${LIB_SUFFIX})
|
|
85
|
+
INSTALL(FILES ${PUB_HDRS} DESTINATION include/yajl)
|
|
86
|
+
INSTALL(FILES ${incDir}/yajl_version.h DESTINATION include/yajl)
|
|
87
|
+
INSTALL(FILES ${shareDir}/yajl.pc DESTINATION share/pkgconfig)
|