Skip to content
Snippets Groups Projects
stringOf.ml 1.77 KiB
Newer Older
erwan's avatar
erwan committed

open Algo
let rec (algo_varT: Algo.varT -> string) = function
erwan's avatar
erwan committed
  | It -> "int"
  | Ft -> "float"
  | Bt -> "bool"
  | Et i -> Printf.sprintf "enum(%d)" i
  | At(t,i) -> Printf.sprintf "%s[%d]" (algo_varT t) i
erwan's avatar
erwan committed

let (algo_vars : Algo.vars -> string) = fun vars -> 
  String.concat "," (List.map (fun (n,t) -> Printf.sprintf "%s:%s" n (algo_varT t)) vars)

open Topology
let (topology_neighbor :Topology.neighbor -> string) = fun n ->
  Printf.sprintf "%s (%s)" n.n_id (algo_vars n.n_vars)

open Process
let (env: Env.t -> Process.t list -> string) =
  fun env pl ->
    let ll = List.map 
        (fun p ->
           List.map
             (fun (n,_) ->
                Printf.sprintf "%s.%s->%s" p.pid n
                  (Algo.value_to_string (Env.get env p.pid n)))
             p.variables)
        pl
    in
    String.concat ", " (List.flatten ll)

let (env_rif: Env.t -> Process.t list -> string) =
  fun env pl ->
    let ll = List.map 
        (fun p ->
           List.map
             (fun (n,_) ->
                Printf.sprintf "%s"
                  (Algo.value_to_string (Env.get env p.pid n)))
             p.variables)
        pl
    in
    String.concat " " (List.flatten ll)

let (env_rif_decl: Process.t list -> string) =
  fun pl ->
    let ll = List.map 
        (fun p ->
           List.map
             (fun (n,vt) ->
                Algo.vart_to_rif_string vt (Printf.sprintf "%s_%s" p.pid n))
    let algo_vars = String.concat " " (List.flatten ll) in
    let actions = List.map 
        (fun p ->
           List.map (fun a -> Printf.sprintf "\"Enab_%s_%s\":bool" p.pid a) p.actions)
        pl
    in
    let actions_vars = String.concat " " (List.flatten actions) in
    algo_vars ^ " " ^ actions_vars