\small\begin{xple}
unsound interface Store
export
  (* Note: All offsets given in pointees *)

  headersize: Int 
  (* Number of pointees allocated for object header. *)

  byteSize, shortSize, longSize, realSize: Int
  (* Number of pointees allocated for base types. *)

  garbageCollect(): Ok
  (* Do a full garbage collection of the (persistent) store. *)

  stabilise(): Ok
  (* Checkpoint the persistent store. *)

  halt(): Ok
  (* Checkpoint the persistent store and quit the program. 
     The program can be restarted at the current instruction. *)

  keyToAddress(A ::TYPE key :A): Int
  (* Return the physical address of an object of type String, Tuple,
     Array, Option, Fun, Interface. The returned address is invalidated
     by (automatic) garbageCollect, stabilise and halt. *)

  getSize(A ::TYPE key :A): Int
    (* Return a multiple of PointeesPerPolymorph. Only valid for
       String, Tuple, Array, Option, Fun and Interface objects. *)

  getByte(A ::TYPE key :A off :Int): Int
  setByte(A ::TYPE key :A off :Int val :Int): Ok

  getShort(A ::TYPE key :A off :Int): Int
  setShort(A ::TYPE key :A off :Int val :Int): Ok

  getLong(A ::TYPE key :A off :Int): Int
  setLong(A ::TYPE key :A off :Int val :Int): Ok

  getReal(A ::TYPE key :A off :Int): Real
  setReal(A ::TYPE key :A off :Int val :Real): Ok

end;
\end{xple}

