open Position type t = (position * int) array ref let no_info = -10000 let make size = ref (Array.make size ({x=0; y=0}, no_info)) let extend tbl size = let tab = Array.make size ({x=0; y=0}, no_info) in for i = 0 to Array.length tbl - 1 do tab.(i) <- tbl.(i) done; tab let get tbl id = try !tbl.(id) with | Invalid_argument "index out of bounds" -> tbl := extend !tbl (id+1); !tbl.(id) let set tbl id pos date = try !tbl.(id) <- (pos,date) with | Invalid_argument "index out of bounds" -> tbl := extend !tbl (id+1); !tbl.(id) <- (pos,date) let update tbl id pos date = try let _, date_tbl = !tbl.(id) in if date > date_tbl then !tbl.(id) <- (pos,date) with | Invalid_argument "index out of bounds" -> tbl := extend !tbl (id+1); !tbl.(id) <- (pos,date)