]> Repositorios git - scryer-prolog.git/commitdiff
use '$first_non_octet'/2 for much faster domain check
authorMarkus Triska <[email protected]>
Wed, 3 Nov 2021 21:27:41 +0000 (22:27 +0100)
committerMarkus Triska <[email protected]>
Wed, 3 Nov 2021 23:12:08 +0000 (00:12 +0100)
src/lib/crypto.pl

index 0e31f3de2497b99383362cbf6d393fd4c2cd5c3b..a6f7ad0ec709bbbab0957c438ed128348ec2d41a 100644 (file)
@@ -46,6 +46,7 @@
 :- use_module(library(format)).
 :- use_module(library(charsio)).
 :- use_module(library(si)).
+:- use_module(library(iso_ext), [partial_string/1]).
 
 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    hex_bytes(?Hex, ?Bytes) is det.
@@ -104,12 +105,18 @@ must_be_bytes(Bytes, Context) :-
 
 
 must_be_byte_chars(Chars, Context) :-
-        must_be(list, Chars),
-        (   member(Char, Chars),
-            char_code(Char, Code),
-            \+ between(0, 255, Code) ->
-            domain_error(byte_char, Char, Context)
-        ;   true
+        (   partial_string(Chars) ->
+            (   '$first_non_octet'(Chars, F) ->
+                domain_error(byte_char, F, Context)
+            ;   true
+            )
+        ;   must_be(list, Chars),
+            (   member(Char, Chars),
+                char_code(Char, Code),
+                \+ between(0, 255, Code) ->
+                domain_error(byte_char, Char, Context)
+            ;   true
+            )
         ).