X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ancient.ml;h=eda78747cc22922c61784a62c1236819be66147f;hb=144066156efebcf50b400b338f1c8dc3e180f0d7;hp=e0cd9683bd87586edfa6f904ff883fe001a170a8;hpb=817742e3a1d5fc8b02d2140a3c74e695ade71434;p=ocaml-ancient.git diff --git a/ancient.ml b/ancient.ml index e0cd968..eda7874 100644 --- a/ancient.ml +++ b/ancient.ml @@ -1,17 +1,32 @@ -(* Mark objects as 'ancient' so they are taken out of the OCaml heap. - * $Id: ancient.ml,v 1.2 2006-09-27 15:36:18 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 share : Unix.file_descr -> 'a -> 'a ancient = "ancient_share" +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_info : md -> int -> 'a -> 'a ancient * info + = "ancient_share_info" -external attach : Unix.file_descr -> 'a ancient = "ancient_attach" +let share md key obj = fst (share_info md key obj) -external detach : 'a ancient -> unit = "ancient_detach" +external get : md -> int -> 'a ancient = "ancient_get"