anchor.diff:  		cache_missed :: boolean(),
   		life_time :: milli_seconds() | infinity,
   		max_size :: pos_integer() | infinity}).
  +
  +-define(CALL_TIMEOUT, timer:minutes(1)).
   
   -type milli_seconds() :: pos_integer().
   -type option() :: {max_size, pos_integer() | infinity} |
  
positive.code:     end,
      do_filter(Name, FilterFun, CurrTime, ets:next(Name, Key)).
  
  -spec do_lookup(atom(), any(), read_fun()) -> {ok, any()} | error.
  do_lookup(Name, Key, ReadFun) ->
      Ref = make_ref(),
      case ets:insert_new(Name, {Key, Ref}) of
  	true ->
  	    try
  		Val = ReadFun(),
  		send(Name, {insert, Ref, Key, Val}),
  		Val
  	    catch E:R ->
  		    catch ets:delete_object(Name, {Key, Ref}),
  
negative.code: 	    end;
  	[] ->
  	    do_lookup(Name, Key, ReadFun);
  	_ when ReadFun /= undefined ->
  	    ReadFun();
  	_ ->
  	    error
      catch _:badarg when ReadFun /= undefined ->
  	    ReadFun();
  	  _:badarg ->
  	    error
      end.
  
  -spec clear(atom()) -> ok.
  