X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ancient.ml;h=75c3039e3b2de26ede099d076fbe03142a93b230;hb=88becff73ee0dda06c948273891fa609390fc538;hp=e0cd9683bd87586edfa6f904ff883fe001a170a8;hpb=817742e3a1d5fc8b02d2140a3c74e695ade71434;p=ocaml-ancient.git diff --git a/ancient.ml b/ancient.ml index e0cd968..75c3039 100644 --- a/ancient.ml +++ b/ancient.ml @@ -1,17 +1,34 @@ (* 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 $ + * $Id: ancient.ml,v 1.7 2006-10-13 12:28:20 rich Exp $ *) 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"