X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ancient.ml;h=eda78747cc22922c61784a62c1236819be66147f;hb=144066156efebcf50b400b338f1c8dc3e180f0d7;hp=dfce30c8cd6f6e52b283724d70a83e9651a33c41;hpb=c3bd88fb6d9ede9d14cd24cd70b5b9352002ecc2;p=ocaml-ancient.git diff --git a/ancient.ml b/ancient.ml index dfce30c..eda7874 100644 --- a/ancient.ml +++ b/ancient.ml @@ -1,21 +1,32 @@ -(* Mark objects as 'ancient' so they are taken out of the OCaml heap. - * $Id: ancient.ml,v 1.4 2006-09-28 12:40:07 rich Exp $ - *) +(* Mark objects as 'ancient' so they are taken out of the OCaml heap. *) type 'a ancient -external mark : 'a -> 'a ancient = "ancient_mark" +type info = { + i_size : int; +} + +external mark_info : 'a -> 'a ancient * info = "ancient_mark_info" + +let mark obj = fst (mark_info obj) external follow : 'a ancient -> 'a = "ancient_follow" external delete : 'a ancient -> unit = "ancient_delete" +external is_ancient : 'a -> bool = "ancient_is_ancient" + +external address_of : 'a -> nativeint = "ancient_address_of" + type md external attach : Unix.file_descr -> nativeint -> md = "ancient_attach" external detach : md -> unit = "ancient_detach" -external share : md -> int -> 'a -> 'a ancient = "ancient_share" +external share_info : md -> int -> 'a -> 'a ancient * info + = "ancient_share_info" + +let share md key obj = fst (share_info md key obj) external get : md -> int -> 'a ancient = "ancient_get"