[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