X-Git-Url: http://git.nguyen.vg/gitweb/?p=tatoo.git;a=blobdiff_plain;f=src%2Frun.ml;h=0e4e0b3b19b609069e4ca2b54bd01461896f769a;hp=1f59ef891969261c1b9b63f9bddf2521460145db;hb=be682346caf089e95dc3254f89119f93797813f4;hpb=e56b9fbeaed04c1f2fb7019de34f7d8e87d6db73 diff --git a/src/run.ml b/src/run.ml index 1f59ef8..0e4e0b3 100644 --- a/src/run.ml +++ b/src/run.ml @@ -248,7 +248,7 @@ DEFINE AND_(t1,t2) = | `Stay -> false, ss in if sum == dummy_status - || (down && n_sum.rank < ss.NodeStatus.node.rank) + (*|| (down && n_sum.rank < ss.NodeStatus.node.rank) *) || StateSet.mem q n_sum.todo then Unknown else @@ -354,6 +354,9 @@ DEFINE AND_(t1,t2) = } else c in + let () = Logger.msg `STATS "Run %i, Node %a, %a@\n" + i QName.print tag NodeStatus.print status0 + in (* get the node_statuses for the first child, next sibling and parent *) let ps = unsafe_get_status status (T.preorder tree parent) in let fcs = unsafe_get_status status fc_id in @@ -368,15 +371,18 @@ DEFINE AND_(t1,t2) = status1 end in + let () = Logger.msg `STATS "Run %i, Node %a, %a@\n" + i QName.print tag NodeStatus.print status1 + in (* recursively traverse the first child *) let () = loop_td_and_bu fc in (* here we re-enter the node from its first child, get the new status of the first child *) let fcs1 = unsafe_get_status status fc_id in (* update the status *) - let status1 = if status1.NodeStatus.node.rank < i then + let status1 = if status1.NodeStatus.node.rank < i+1 then NodeStatus.make { status1.NodeStatus.node with - rank = i; + rank = i+1; todo = bu_todo } else status1 @@ -389,10 +395,17 @@ DEFINE AND_(t1,t2) = status2 end in + let () = Logger.msg `STATS "Run %i, Node %a, %a@\n" + (i+1) QName.print tag NodeStatus.print status2 + in let () = loop_td_and_bu ns in let nss1 = unsafe_get_status status ns_id in if status2.NodeStatus.node.todo != StateSet.empty then let status3 = eval_trans auto fetch_trans_cache bu_cache tag fcs1 nss1 ps status2 in + let () = Logger.msg `STATS "Run %i, Node %a, %a@\n" + (i+1) QName.print tag NodeStatus.print status3 + in + if status3 != status2 then status.(node_id) <- status3 end and loop_td_only node = @@ -425,6 +438,10 @@ DEFINE AND_(t1,t2) = } else c in + let () = Logger.msg `STATS "Run %i, Node %a, %a@\n" + (i) QName.print tag NodeStatus.print status0 + in + (* get the node_statuses for the first child, next sibling and parent *) let ps = unsafe_get_status status (T.preorder tree parent) in let fcs = unsafe_get_status status fc_id in @@ -433,6 +450,10 @@ DEFINE AND_(t1,t2) = if status0.NodeStatus.node.todo != StateSet.empty then begin let status1 = eval_trans auto fetch_trans_cache td_cache tag fcs nss ps status0 in (* update the cache if the status of the node changed *) + let () = Logger.msg `STATS "Run %i, Node %a, %a@\n" + (i) QName.print tag NodeStatus.print status1 + in + if status1 != status0 then status.(node_id) <- status1; end; (* recursively traverse the first child *) @@ -440,8 +461,12 @@ DEFINE AND_(t1,t2) = loop_td_only ns end in - if bu_todo == StateSet.empty then loop_td_only (T.root tree) - else loop_td_and_bu (T.root tree) + if bu_todo == StateSet.empty then + let () = loop_td_only (T.root tree) in + run.pass <- run.pass + 1 + else + let () = loop_td_and_bu (T.root tree) in + run.pass <- run.pass + 2 let get_results run = @@ -529,9 +554,9 @@ DEFINE AND_(t1,t2) = tree_size := T.size tree; let run = make auto tree in prepare_run run nodes; - for i = 0 to Ata.get_max_rank auto do + let rank = Ata.get_max_rank auto in + while run.pass <= rank do top_down run; - run.pass <- run.pass + 1; run.td_cache <- Cache.N5.create dummy_status; run.bu_cache <- Cache.N5.create dummy_status; done;