+ | (s,l,f) :: tl -> (l,f) :: (remove_states tl) in
+ (remove_states (SetT.elements (SetT.filter filter asta.trans_q)),
+ (remove_states (SetT.elements (SetT.filter filter asta.trans_r))))
+
+let transitions_lab asta lab =
+ let filter (s,l,f) = QNameSet.mem lab l in
+ let rec remove_lab = function
+ | [] -> []
+ | (s,l,f) :: tl -> (s,f) :: (remove_lab tl) in
+ (remove_lab (SetT.elements (SetT.filter filter asta.trans_q)),
+ (remove_lab (SetT.elements (SetT.filter filter asta.trans_r))))
+
+let empty = {
+ quer = StateSet.empty;
+ reco = StateSet.empty;
+ selec = StateSet.empty;
+ bottom = StateSet.empty;
+ top = StateSet.empty;
+ trans_q = SetT.empty;
+ trans_r = SetT.empty
+}
+
+let any_label = QNameSet.complement (QNameSet.empty)
+
+let new_state () = State.make()
+
+let add_tr ast tr flag =
+ if flag
+ then ast.trans_q <- (SetT.add tr (ast.trans_q))
+ else ast.trans_r <- (SetT.add tr (ast.trans_r))
+
+let add_quer ast st = ast.quer <- (StateSet.add st (ast.quer))
+
+let add_reco ast st = ast.reco <- (StateSet.add st (ast.reco))
+
+let add_selec ast st = ast.selec <- (StateSet.add st (ast.selec))
+
+let add_bot ast st = ast.bottom <- (StateSet.add st (ast.bottom))
+
+let add_top ast st = ast.top <- (StateSet.add st (ast.top))
+
+let init_top ast = ast.top <- (StateSet.empty)
+
+let top_states ast = StateSet.elements ast.top
+
+let top_states_s ast = ast.top
+
+let bot_states_s ast = ast.bottom
+
+let selec_states ast = ast.selec