X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ancient.ml;h=eda78747cc22922c61784a62c1236819be66147f;hb=master;hp=f8b708883bc4bd385e242cf9cec19e5db503b4ff;hpb=2f2d5af5cf03640650c8b49933c36665fdf52d61;p=ocaml-ancient.git diff --git a/ancient.ml b/ancient.ml index f8b7088..eda7874 100644 --- a/ancient.ml +++ b/ancient.ml @@ -1,10 +1,14 @@ -(* Mark objects as 'ancient' so they are taken out of the OCaml heap. - * $Id: ancient.ml,v 1.5 2006-10-09 12:18:05 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" @@ -12,14 +16,17 @@ 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" -external get : md -> int -> 'a ancient = "ancient_get" +let share md key obj = fst (share_info md key obj) -let max_key = 1023 (* MMALLOC_KEYS-1. See mmprivate.h *) +external get : md -> int -> 'a ancient = "ancient_get"