package kappa-library
Public internals of the Kappa tool suite. Use this package to use kappa as a lib
Install
Dune Dependency
Authors
Maintainers
Sources
v4.1.3.tar.gz
md5=1c9a8a0d79f085757817f90834e166f5
sha512=13ac40442940ba6e72d7dc5bf952e67443872f7bff63e9c76a3a699a6904c88696047fe04519b7ec6546371642f6ee7b0983117be302694aca15500b0df40de3
doc/src/kappa-library.generic/hashed_list.ml.html
Source file hashed_list.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
module type Hash = sig type hashed_list type elt type cache val int_of_hashed_list : hashed_list -> int val compare : hashed_list -> hashed_list -> int val init : unit -> cache val hash : cache -> elt list -> cache * hashed_list val cons : cache -> elt -> hashed_list -> cache * hashed_list val empty : hashed_list val print : Format.formatter -> hashed_list -> unit val print_cache : Format.formatter -> cache -> unit end module Make = functor (A : SetMap.OrderedType) -> struct type elt = A.t type elt_id = int type hashed_list = int let int_of_hashed_list (h : hashed_list) : int = h let compare = compare module SetMap = SetMap.Make (A) type cache = { dictionary: elt_id SetMap.Map.t; next_elt_id: elt_id; cons: hashed_list option Mods.DynArray.t option Mods.DynArray.t; next_list_id: hashed_list; } let fst_elt_id = 1 let next_elt_id = succ let fresh_elt_id cache = ( cache.next_elt_id, { cache with next_elt_id = next_elt_id cache.next_elt_id } ) let fst_list_id = 1 let next_list_id = succ let fresh_list_id cache = ( { cache with next_list_id = next_list_id cache.next_list_id }, cache.next_list_id ) let init () = { dictionary = SetMap.Map.empty; next_elt_id = fst_elt_id; cons = Mods.DynArray.create 0 None; next_list_id = fst_list_id; } let empty = 0 let hash_elt cache elt = match SetMap.Map.find_option elt cache.dictionary with | Some i -> cache, i | None -> let id, cache = fresh_elt_id cache in { cache with dictionary = SetMap.Map.add elt id cache.dictionary }, id let cons cache head tail = let cache, hash_head = hash_elt cache head in let subtab = match Mods.DynArray.get cache.cons hash_head with | Some subtab -> subtab | None -> let subtab = Mods.DynArray.create 0 None in let () = Mods.DynArray.set cache.cons hash_head (Some subtab) in subtab in match Mods.DynArray.get subtab tail with | Some hash -> cache, hash | None -> let cache, hash = fresh_list_id cache in let () = Mods.DynArray.set subtab tail (Some hash) in cache, hash let rec hash cache list = match list with | [] -> cache, empty | h :: t -> let cache, t = hash cache t in cons cache h t let print formatter = Format.fprintf formatter "%i" let print_cache formatter cache = let () = Format.fprintf formatter "Cache\n next_fresh_list_id: %i; next_fresh_elt_id: %i\n" cache.next_list_id cache.next_elt_id in let () = SetMap.Map.iter (fun a i -> Format.fprintf formatter "DIC:%a:%i\n" A.print a i) cache.dictionary in Mods.DynArray.iteri (fun a opt -> match opt with | None -> () | Some opt -> Mods.DynArray.iteri (fun b k -> match k with | None -> () | Some k -> Format.fprintf formatter "(%i,%i)->%i \n" a b k) opt) cache.cons end
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>