revert change from strings/keys being presented as binaries to being presented as lists of characters. ~30% speedup

This commit is contained in:
alisdair sullivan 2011-07-31 19:05:30 -07:00
parent 20f9e0368d
commit b3eb058463
23 changed files with 57 additions and 57 deletions

View file

@ -282,10 +282,10 @@ multi_test_result() ->
[{literal, false}],
[{literal, null}],
[start_object, end_object],
[start_object, {key, <<"key">>}, {string, <<"value">>}, end_object],
[start_object, {key, "key"}, {string, "value"}, end_object],
[start_array, end_array],
[start_array, {integer, 1}, {integer, 2}, {integer, 3}, end_array],
[{string, <<"hope this works">>}]
[{string, "hope this works"}]
].

View file

@ -43,15 +43,15 @@
| utf32
| {utf32, little}
}.
-type jsx_event() :: start_object
| end_object
| start_array
| end_array
| end_json
| {key, binary()}
| {string, binary()}
| {key, list()}
| {string, list()}
| {integer, integer()}
| {float, float()}
| {literal, true}

View file

@ -357,11 +357,11 @@ key(Bin, Stack, Opts) ->
string(Bin, Stack, Opts) -> string(Bin, Stack, Opts, []).
string(<<?quote/?utfx, Rest/binary>>, [key|_] = Stack, Opts, Acc) ->
{jsx, {key, unicode:characters_to_binary(lists:reverse(Acc))}, fun() ->
{jsx, {key, lists:reverse(Acc)}, fun() ->
colon(Rest, Stack, Opts)
end};
string(<<?quote/?utfx, Rest/binary>>, Stack, Opts, Acc) ->
{jsx, {string, unicode:characters_to_binary(lists:reverse(Acc))}, fun() ->
{jsx, {string, lists:reverse(Acc)}, fun() ->
maybe_done(Rest, Stack, Opts)
end};
string(<<?rsolidus/?utfx, Rest/binary>>, Stack, Opts, Acc) ->
@ -1228,7 +1228,7 @@ check_bad(List) ->
).
check_replaced(List) ->
lists:dropwhile(fun({_, [{string, <<16#fffd/utf8>>}|_]}) ->
lists:dropwhile(fun({_, [{string, [16#fffd]}|_]}) ->
true
; (_) ->
false

View file

@ -163,8 +163,8 @@ collect(_, _, _) -> erlang:error(badarg).
%% helper functions for converting jsx events to term format
event({string, String}, _Opts) -> String;
event({key, Key}, _Opts) -> Key;
event({string, String}, _Opts) -> unicode:characters_to_binary(String);
event({key, Key}, _Opts) -> unicode:characters_to_binary(Key);
event({integer, Integer}, _Opts) -> Integer;
event({float, Float}, _Opts) -> Float;
event({literal, Literal}, _Opts) -> Literal.