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)