anchor.diff:      Cache = ets:new(list_to_atom(CacheName), [private, {keypos, 2}]),
       #kv_lru{max_size=Size, age_idx=Idx, bucket_idx=BucketIdx, cache=Cache}.
   
  +put(#kv_lru{max_size=0}, _BKey, _Key, _Value) ->
  +    ok;
   put(#kv_lru{max_size=MaxSize, age_idx=Idx, bucket_idx=BucketIdx,
               cache=Cache}, BKey, Key, Value) ->
       remove_existing(Idx, BucketIdx, Cache, BKey, Key),
       insert_value(Idx, BucketIdx, Cache, BKey, Key, Value),
       prune_oldest_if_needed(MaxSize, Idx, BucketIdx, Cache).
   
  +fetch(#kv_lru{max_size=0}, _BKey, _Key) ->
  +    notfound;
   fetch(#kv_lru{cache=Cache}=LRU, BKey, Key) ->
       case fetch_value(Cache, BKey, Key) of
           notfound ->
  
positive.code:             ok
      end.
  
  destroy(#kv_lru{age_idx=Idx, bucket_idx=BucketIdx, cache=Cache}) ->
      ets:delete(Idx),
      ets:delete(BucketIdx),
      ets:delete(Cache).
  
  %% Internal functions
  remove_existing(Idx, BucketIdx, Cache, BKey, Key) ->
  
negative.code:                        value,
                         ts}).
  
  new(0) ->
      #kv_lru{max_size=0};
  new(Size) ->
      IdxName = pid_to_list(self()) ++ "_cache_age_idx",
      BucketIdxName = pid_to_list(self()) ++ "_bucket_idx",
  