X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ancient.ml;h=eda78747cc22922c61784a62c1236819be66147f;hb=7c6e12295236ee73ca46b785983673c7fc3c0597;hp=ab357e23fd8ca011d9990836d78b44b47a69cb70;hpb=a34a08d6401b6b67c9d5d1260d816c8ea8b85558;p=ocaml-ancient.git diff --git a/ancient.ml b/ancient.ml index ab357e2..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.3 2006-09-27 18:39:44 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 -> md = "ancient_attach" +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"