From 04fbb0c1ce3c4d3d4e9211f99e16a0ba49d26b53 Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Tue, 15 Aug 2023 21:43:19 +0200 Subject: [PATCH] append the entire queues instead of inserting each element individually --- src/lib/clpz.pl | 51 +++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/src/lib/clpz.pl b/src/lib/clpz.pl index d5b461f3..cd1b3f85 100644 --- a/src/lib/clpz.pl +++ b/src/lib/clpz.pl @@ -2672,13 +2672,34 @@ propagator_init_trigger(Vs, P) --> variables_same_queue(Vs0) :- include(var, Vs0, Vs), - new_queue(Q), - maplist(variable_queue, Vs, Qs), - phrase((collect_goal(Qs), - collect_fast(Qs), - collect_slow(Qs)), [Q], [Q]), - maplist(clear_queue, Qs), - maplist(=(Q), Qs). + ( Vs == [] -> true + ; maplist(variable_queue, Vs, Qs0), + sort(Qs0, [Q|Qs]), + Q =.. [_|Args], + append_queues_(Qs, Args, [append,append,append,ignore]), + maplist(clear_queue, Qs), + maplist(=(Q), Qs) + ). + +append_queues_([], _, _). +append_queues_([Q|Qs], Args0, Is) :- + Q =.. [_|Args], + maplist(append_queue, Is, Args0, Args), + append_queues_(Qs, Args, Is). + +append_queue(ignore, _, _). +append_queue(append, Q0, Q) :- + ( get_atts(Q0, queue(Ls0,Ls)) -> + ( get_atts(Q, queue(Ms0,Ms)) -> + Ls = Ms0, + put_atts(Q0, queue(Ls0,Ms)) + ; true + ) + ; ( get_atts(Q, queue(Ms0,Ms)) -> + put_atts(Q0, queue(Ms0,Ms)) + ; true + ) + ). clear_queue(queue(Goals,Fast,Slow,Aux)) :- put_atts(Goals, -queue(_,_)), @@ -2686,22 +2707,6 @@ clear_queue(queue(Goals,Fast,Slow,Aux)) :- put_atts(Slow, -queue(_,_)), put_atts(Aux, -disabled). -collect_goal(Qs) --> collect_arg(Qs, 1). -collect_fast(Qs) --> collect_arg(Qs, 2). -collect_slow(Qs) --> collect_arg(Qs, 3). - -collect_arg([], _) --> []. -collect_arg([Q|Qs], Which) --> - collect_all_(Q, Which), - collect_arg(Qs, Which). - -collect_all_(Q, Which) --> - ( { queue_get_arg_(Q, Which, Element) } -> - insert_queue(Element, Which), - collect_all_(Q, Which) - ; [] - ). - variable_queue(Var, Q) :- get_attr(Var, clpz, Attr), Attr = clpz_attr(_Left,_Right,_Spread,_Dom,_Ps,Q). -- 2.54.0