[m-rev.] for review: Simplify string.prefix and string.suffix implementations.

Mark Brown mark at mercurylang.org
Wed Oct 23 20:42:26 AEDT 2019


These one also don't have equivalent modes.

On Wed, Oct 23, 2019 at 3:03 PM Peter Wang <novalazy at gmail.com> wrote:
>
> ---
>  library/string.m | 36 +++++-------------------------------
>  1 file changed, 5 insertions(+), 31 deletions(-)
>
> diff --git a/library/string.m b/library/string.m
> index 4363c0c5f..a02a4ebab 100644
> --- a/library/string.m
> +++ b/library/string.m
> @@ -4525,24 +4525,10 @@ split_at_string_loop(StartAt, NeedleLen, Needle, Total) = Out :-
>  :- pragma promise_equivalent_clauses(prefix/2).
>
>  prefix(String::in, Prefix::in) :-
> -    Len    = length(String),
> -    PreLen = length(Prefix),
> -    PreLen =< Len,
> -    prefix_2_iii(String, Prefix, PreLen - 1).
> +    compare_substrings((=), String, 0, Prefix, 0, length(Prefix)).
>  prefix(String::in, Prefix::out) :-
>      prefix_2_ioi(String, Prefix, 0).
>
> -:- pred prefix_2_iii(string::in, string::in, int::in) is semidet.
> -
> -prefix_2_iii(String, Prefix, I) :-
> -    ( if 0 =< I then
> -        unsafe_index_code_unit(String, I, C),
> -        unsafe_index_code_unit(Prefix, I, C),
> -        prefix_2_iii(String, Prefix, I - 1)
> -    else
> -        true
> -    ).
> -
>  :- pred prefix_2_ioi(string::in, string::out, int::in) is multi.
>
>  prefix_2_ioi(String, Prefix, Cur) :-
> @@ -4557,26 +4543,14 @@ prefix_2_ioi(String, Prefix, Cur) :-
>  :- pragma promise_equivalent_clauses(suffix/2).
>
>  suffix(String::in, Suffix::in) :-
> -    Len    = length(String),
> -    PreLen = length(Suffix),
> -    PreLen =< Len,
> -    suffix_2_iiii(String, Suffix, 0, Len - PreLen, PreLen).
> +    StringLength = length(String),
> +    SuffixLength = length(Suffix),
> +    StringStart = StringLength - SuffixLength,
> +    compare_substrings((=), String, StringStart, Suffix, 0, SuffixLength).
>  suffix(String::in, Suffix::out) :-
>      Len = length(String),
>      suffix_2_ioii(String, Suffix, Len, Len).
>
> -:- pred suffix_2_iiii(string::in, string::in, int::in, int::in, int::in)
> -    is semidet.
> -
> -suffix_2_iiii(String, Suffix, I, Offset, Len) :-
> -    ( if I < Len then
> -        unsafe_index_code_unit(String, I + Offset, C),
> -        unsafe_index_code_unit(Suffix, I, C),
> -        suffix_2_iiii(String, Suffix, I + 1, Offset, Len)
> -    else
> -        true
> -    ).
> -
>  :- pred suffix_2_ioii(string::in, string::out, int::in, int::in) is multi.
>
>  suffix_2_ioii(String, Suffix, Cur, Len) :-
> --
> 2.23.0
>
> _______________________________________________
> reviews mailing list
> reviews at lists.mercurylang.org
> https://lists.mercurylang.org/listinfo/reviews


More information about the reviews mailing list