# simpleCache

## PURPOSE

A simple cache that can be used to store results of computations.

## SYNOPSIS

function varargout = simpleCache( op, cache, varargin )

## DESCRIPTION

     A simple cache that can be used to store results of computations.

     Can save and retrieve arbitrary values using a vector (includnig char
     vectors) as a key. Especially useful if a function must perform heavy
     computation but is often called with the same inputs (for which it will
     give the same outputs).  Note that the current implementation does a
     linear search for the key (a more refined implementation would use a hash
     table), so it is not meant for large scale usage.

     To use inside a function, make the cache persistent:
      persistent cache; if( isempty(cache) ) cache=simpleCache('init'); end;
     The following line, when placed inside a function, means the cache will
     stay in memory until the matlab environment changes.  For an example
     usage see maskGaussians.

     USAGE - 'init': initialize a cache object
      cache = simpleCache('init');

     USAGE - 'put': put something in cache.  key must be a numeric vector
      cache = simpleCache( 'put', cache, key, val );

     USAGE - 'get': retrieve from cache.  found==1 if obj was found
      [found,val] = simpleCache( 'get', cache, key );

     USAGE - 'remove': free key
      [cache,found] = simpleCache( 'remove', cache, key );

     INPUTS
      op         - 'init', 'put', 'get', 'remove'
      cache      - the cache object being operated on
      varargin   - see USAGE above

     OUTPUTS
      varargout  - see USAGE above

     EXAMPLE
      cache = simpleCache('init');
      hellokey=rand(1,3); worldkey=rand(1,11);
      cache = simpleCache( 'put', cache, hellokey, 'hello' );
      cache = simpleCache( 'put', cache, worldkey, 'world' );
      [f,v]=simpleCache( 'get', cache, hellokey ); disp(v);
      [f,v]=simpleCache( 'get', cache, worldkey ); disp(v);

     See also PERSISTENT, MASKGAUSSIANS

     Piotr's Image&Video Toolbox      Version 2.61
     Copyright 2012 Piotr Dollar.  [pdollar-at-caltech.edu]
     Please email me if you find bugs, or have suggestions or questions!
     Licensed under the Simplified BSD License [see external/bsd.txt]