Module Batteries.Cache

module Cache: BatCache

type ('a, 'b) manual_cache = {
   get : 'a -> 'b;
   del : 'a -> unit;
   enum : unit -> ('a * 'b) BatEnum.t;
val make_ht : gen:('a -> 'b) -> init_size:int -> ('a, 'b) manual_cache

Make a manual cache backed by a hashtable. The generating function is passed with ~gen and the initial size of the hashtable is ~init_size. The hashtable uses the polymorphic hash and (=).

val make_map : gen:('a -> 'b) -> ('a, 'b) manual_cache

Make a manual cache for function ~gen backed by a Set.t. This set uses the polymorphic (<) for comparison, so 'a should be properly comparable by it.

type ('a, 'b) auto_cache = 'a -> 'b 

Automatically managed caches

This type of cache is more transparent than the !manual_cache above. It does not provide inspection of the caching structure, but guarantees bounded memory usage through some policy of discarding some entries.

Each auto-cache can have a different policy to decide which entry to discard.

val lru_cache : gen:('a -> 'b) -> cap:int -> ('a, 'b) auto_cache