let get_states_trans_init root =
let (states,trans) = Data_for_aorai.getAutomata () in
let st_old_exps = (Array.make (List.length states) (mk_int_exp 0)) in
let st_exps = (Array.make (List.length states) (mk_int_exp 0)) in
let tr_exps = (Array.make (List.length trans ) (mk_int_exp 0)) in
let acc_exps = (Array.make (List.length states) (mk_int_exp 0)) in
List.iter (
fun tr ->
if (tr.start.Promelaast.init==Bool3.True) && (isCrossableAtInit tr root) then
begin
Array.set tr_exps tr.numt (mk_int_exp 1);
Array.set st_exps tr.stop.nums (mk_int_exp 1);
Array.set st_old_exps tr.start.nums (mk_int_exp 1)
end
) trans;
List.iter (
fun st ->
if (st.acceptation==Bool3.True) then
begin
Array.set acc_exps st.nums (mk_int_exp 1);
end
) states;
let st_old_init =
Array.mapi (
fun i exp ->
(Index(mk_int_exp i,NoOffset),SingleInit(exp))
) st_old_exps
in
let st_init =
Array.mapi (
fun i exp ->
(Index(mk_int_exp i,NoOffset),SingleInit(exp))
) st_exps
in
let tr_init =
Array.mapi (
fun i exp ->
(Index(mk_int_exp i,NoOffset),SingleInit(exp))
) tr_exps
in
let acc_init =
Array.mapi (
fun i exp ->
(Index(mk_int_exp i,NoOffset),SingleInit(exp))
) acc_exps
in
(
{init=Some(CompoundInit(Cil.intType, Array.to_list st_old_init))},
{init=Some(CompoundInit(Cil.intType, Array.to_list st_init))},
{init=Some(CompoundInit(Cil.intType, Array.to_list tr_init))},
{init=Some(CompoundInit(Cil.intType, Array.to_list acc_init))}
)