1(* Copyright (C) 1997-2001 by Ken Friis Larsen and Jakob Lichtenberg. *) 2structure fdd :> fdd = 3struct 4 5 open MuddyCore 6 7 open bdd 8 9 type precision = int 10 type domain = int 11 type fddvar = int 12 13 local 14 val extDomain_ : int vector -> fddvar = app1 (symb "mlfdd_extdomain") 15 16 fun mkList(start, stop) = 17 if start > stop then [] 18 else start::mkList(start+1, stop) 19 in 20 fun extDomain l = 21 let val i = extDomain_ (Vector.fromList(l)) 22 in mkList(i,i-1+List.length l) end 23 end 24 25 val clearAll: unit -> unit = app1 (symb "mlfdd_clearall") 26 val domainNum: unit -> int = app1 (symb "mlfdd_domainnum") 27 val domainSize: fddvar -> int = app1 (symb "mlfdd_domainsize") 28 val varNum: fddvar -> int = app1 (symb "mlfdd_varnum") 29 30 local 31 fun vectorToList v = Vector.foldl op:: nil v 32 in 33 val vars: fddvar -> bdd.varnum list = 34 vectorToList o app1 (symb "mlfdd_vars") 35 end 36 37 val ithSet: fddvar -> varSet = app1 (symb "mlfdd_ithset") 38 val domain: fddvar -> bdd = app1 (symb "mlfdd_domain") 39 40 val makeSet: fddvar list -> bdd.varSet = 41 (app1 (symb "mlfdd_makeset")) o Vector.fromList 42 43 local 44 val setPairs_: int vector -> int vector -> bdd.pairSet = 45 app2 (symb "mlfdd_setpairs") 46 in 47 fun setPairs l = 48 let val (l1,l2) = ListPair.unzip l 49 in setPairs_ (Vector.fromList l1) (Vector.fromList l2) end 50 end 51end 52