ENHANCED: Much faster Base64 encoding/decoding, using partial_string/1 for a quick check.

This commit is contained in:
Markus Triska
2021-11-03 21:45:07 +01:00
parent 67ef5fe8e6
commit 320ee072e6

View File

@@ -10,6 +10,7 @@
:- use_module(library(iso_ext)). :- use_module(library(iso_ext)).
:- use_module(library(error)). :- use_module(library(error)).
:- use_module(library(lists)). :- use_module(library(lists)).
:- use_module(library(iso_ext), [partial_string/1]).
fabricate_var_name(VarType, VarName, N) :- fabricate_var_name(VarType, VarName, N) :-
char_code('A', AC), char_code('A', AC),
@@ -235,10 +236,15 @@ chars_base64(Cs, Bs, Options) :-
; domain_error(charset, Charset, chars_base64/3) ; domain_error(charset, Charset, chars_base64/3)
), ),
( var(Cs) -> ( var(Cs) ->
must_be(list, Bs), must_be_characters(Bs),
maplist(must_be(character), Bs),
'$chars_base64'(Cs, Bs, Padding, Charset) '$chars_base64'(Cs, Bs, Padding, Charset)
; must_be(list, Cs), ; must_be_characters(Cs),
maplist(must_be(character), Cs),
'$chars_base64'(Cs, Bs, Padding, Charset) '$chars_base64'(Cs, Bs, Padding, Charset)
). ).
must_be_characters(Cs) :-
( partial_string(Cs) ->
true
; must_be(list, Cs),
maplist(must_be(character), Cs)
).