module BatCache:sig..end
'a and values 'b.
This cache gives access to some internals of a memoized function
f, called the generating function. This function is usually
pure; always returning the same output for a given input. This
module allows the results of complex functions to be cached so
that the function does not need to be called again to get that
result.
When c.get k is called, an internal structure is first consulted to
see if f k has been stored in that structure. If it has, then
that previous result is returned, otherwise, f k is evaluated,
the result stored in the caching structure and also returned to
the user.
The user is allowed to remove a value from the caching structure
with c.del k. This allows the user to prevent unbounded growth
of the cache by removing unneeded entries. If the user prefers an
automatically managed cache, this module provides !auto_cache.
Last, c.enum () will enumerate all the currently memorized
bindings as pairs. This allows inspection of what is currently
cached.
type ('a, 'b) manual_cache = {
|
get : |
|
del : |
|
enum : |
val make_ht : gen:('a -> 'b) -> init_size:int -> ('a, 'b) manual_cache~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~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
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