From: Markus Triska Date: Wed, 3 Nov 2021 20:45:07 +0000 (+0100) Subject: ENHANCED: Much faster Base64 encoding/decoding, using partial_string/1 for a quick... X-Git-Tag: v0.9.0~36^2~5 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=320ee072e644c0a67dc10ace2fe94d714669d0df;p=scryer-prolog.git ENHANCED: Much faster Base64 encoding/decoding, using partial_string/1 for a quick check. --- diff --git a/src/lib/charsio.pl b/src/lib/charsio.pl index d186eaf4..92d3c443 100644 --- a/src/lib/charsio.pl +++ b/src/lib/charsio.pl @@ -10,6 +10,7 @@ :- use_module(library(iso_ext)). :- use_module(library(error)). :- use_module(library(lists)). +:- use_module(library(iso_ext), [partial_string/1]). fabricate_var_name(VarType, VarName, N) :- char_code('A', AC), @@ -235,10 +236,15 @@ chars_base64(Cs, Bs, Options) :- ; domain_error(charset, Charset, chars_base64/3) ), ( var(Cs) -> - must_be(list, Bs), - maplist(must_be(character), Bs), + must_be_characters(Bs), '$chars_base64'(Cs, Bs, Padding, Charset) - ; must_be(list, Cs), - maplist(must_be(character), Cs), + ; must_be_characters(Cs), '$chars_base64'(Cs, Bs, Padding, Charset) ). + +must_be_characters(Cs) :- + ( partial_string(Cs) -> + true + ; must_be(list, Cs), + maplist(must_be(character), Cs) + ).