]> Repositorios git - scryer-prolog.git/commitdiff
ENHANCED: Much faster Base64 encoding/decoding, using partial_string/1 for a quick...
authorMarkus Triska <[email protected]>
Wed, 3 Nov 2021 20:45:07 +0000 (21:45 +0100)
committerMarkus Triska <[email protected]>
Wed, 3 Nov 2021 21:07:20 +0000 (22:07 +0100)
src/lib/charsio.pl

index d186eaf49ca74d07c1a24abe1ada39c9ab2180a3..92d3c4433049a4f58d06f1b0985bf651e22d0673 100644 (file)
@@ -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)
+        ).