optimise sub_atom when sub_atom is known.
This commit is contained in:
15
pl/utils.yap
15
pl/utils.yap
@@ -520,6 +520,10 @@ sub_atom(At, Bef, Size, After, SubAt) :-
|
||||
% extract something from an atom
|
||||
atom(At), integer(Bef), integer(Size), !,
|
||||
'$sub_atom_extract'(At, Bef, Size, After, SubAt).
|
||||
sub_atom(At, Bef, Size, After, SubAt) :-
|
||||
% extract subatom from an atom
|
||||
atom(At), atom(SubAt), !,
|
||||
'$do_sub_atom_fetch'(At, Bef, Size, After, SubAt, 0).
|
||||
sub_atom(At, Bef, Size, After, SubAt) :-
|
||||
atom(At), !,
|
||||
atom_codes(At, Atl),
|
||||
@@ -532,6 +536,17 @@ sub_atom(At, Bef, Size, After, SubAt) :-
|
||||
'$do_error'(type_error(atom,At),sub_atom(At, Bef, Size,After, SubAt)).
|
||||
|
||||
|
||||
'$do_sub_atom_fetch'(At, Bef, Size, After, SubAt, I0) :-
|
||||
'$sub_atom_fetch'(At, Bef1, Size, After1, SubAt, I0),
|
||||
(
|
||||
Bef = Bef1, After = After1
|
||||
;
|
||||
Next is Bef1+1,
|
||||
'$do_sub_atom_fetch'(At, Bef, Size, After, SubAt, Next)
|
||||
).
|
||||
|
||||
|
||||
|
||||
'$sub_atom2'(Bef, Atl, Size, After, SubAt, ErrorTerm) :-
|
||||
var(Bef), !,
|
||||
'$sub_atombv'(Bef, Size, After, SubAt, Atl, ErrorTerm).
|
||||
|
Reference in New Issue
Block a user