Added
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
:- module(pio, [phrase_from_file/2,
|
:- module(pio, [phrase_from_file/2,
|
||||||
phrase_from_file/3]).
|
phrase_from_file/3,
|
||||||
|
raw_chars//1]).
|
||||||
|
|
||||||
:- use_module(library(dcgs)).
|
:- use_module(library(dcgs)).
|
||||||
:- use_module(library(error)).
|
:- use_module(library(error)).
|
||||||
@@ -43,3 +44,15 @@ reader_step(Stream, Pos, Xs0) :-
|
|||||||
partial_string(Cs, Xs0, Xs),
|
partial_string(Cs, Xs0, Xs),
|
||||||
stream_to_lazy_list(Stream, Xs)
|
stream_to_lazy_list(Stream, Xs)
|
||||||
).
|
).
|
||||||
|
|
||||||
|
/* Relate a character list to itself greedily - for reading raw file contents using `phrase_from_file/2`
|
||||||
|
A quick benchmark:
|
||||||
|
Greedy (recurse first):
|
||||||
|
?- time(phrase_from_file(raw_chars(_), '/mnt/544KB.json')).
|
||||||
|
% CPU time: 22.471 seconds
|
||||||
|
Generous (empty list first):
|
||||||
|
?- time(phrase_from_file(raw_chars(_), '/mnt/544KB.json')).
|
||||||
|
% CPU time: 44.119 seconds
|
||||||
|
*/
|
||||||
|
raw_chars([C|Cs]) --> [C], raw_chars(Cs).
|
||||||
|
raw_chars([]) --> [].
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
:- use_module(library(lists)).
|
:- use_module(library(lists)).
|
||||||
:- use_module(library(os)).
|
:- use_module(library(os)).
|
||||||
:- use_module(library(pio)).
|
:- use_module(library(pio)).
|
||||||
|
:- use_module(library(iso_ext)).
|
||||||
:- use_module(library(time)).
|
:- use_module(library(time)).
|
||||||
|
|
||||||
test_path(TestName, TestPath) :-
|
test_path(TestName, TestPath) :-
|
||||||
@@ -33,15 +34,15 @@ minify_sample_json :-
|
|||||||
name_parse("pass_everything.json", Json),
|
name_parse("pass_everything.json", Json),
|
||||||
time(once(phrase(json_chars(Json), MinChars))),
|
time(once(phrase(json_chars(Json), MinChars))),
|
||||||
test_path("pass_everything.min.json", MinPath),
|
test_path("pass_everything.min.json", MinPath),
|
||||||
open(MinPath, write, Stream),
|
setup_call_cleanup(
|
||||||
format(Stream, "~s", [MinChars]),
|
open(MinPath, write, Stream),
|
||||||
close(Stream).
|
format(Stream, "~s", [MinChars]),
|
||||||
|
close(Stream)
|
||||||
|
).
|
||||||
|
|
||||||
test_json_minify :-
|
test_json_minify :-
|
||||||
test_path("pass_everything.min.json", MinPath),
|
test_path("pass_everything.min.json", MinPath),
|
||||||
open(MinPath, read, Stream),
|
once(phrase_from_file(raw_chars(RefChars), MinPath)),
|
||||||
read_line_to_chars(Stream, RefChars, []),
|
|
||||||
close(Stream),
|
|
||||||
name_parse("pass_everything.json", Json),
|
name_parse("pass_everything.json", Json),
|
||||||
time(once(phrase(json_chars(Json), MinChars))),
|
time(once(phrase(json_chars(Json), MinChars))),
|
||||||
RefChars = MinChars.
|
RefChars = MinChars.
|
||||||
|
|||||||
Reference in New Issue
Block a user