diff options
Diffstat (limited to 'src/multikey_cache.clj')
| -rw-r--r-- | src/multikey_cache.clj | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/multikey_cache.clj b/src/multikey_cache.clj index 74822a8..ac462ca 100644 --- a/src/multikey_cache.clj +++ b/src/multikey_cache.clj @@ -5,14 +5,16 @@ cache-dot-clj.cache )) -(defn multikey-lru-cache [f max-size] - {:f f - :lru (java.util.Collections/synchronizedMap (LRUMap. max-size)) +(defn multikey-lru-cache [func max-size canonicalizer] + {:func func + :lru (java.util.Collections/synchronizedMap (LRUMap. max-size)) + :canonicalizer canonicalizer }) (defn get-keys [c keys] - (let [f (:f c) + (let [f (:func c) lru (:lru c) + keys (map (:canonicalizer c) keys) uncached (filter (complement #(.containsKey lru %)) keys)] (when-not (empty? uncached) (doseq [[k v] (map list uncached (f uncached))] @@ -23,8 +25,9 @@ (first (get-keys c [key]))) (defn has-key [c key] - (.containsKey (:lru c) key)) + (.containsKey (:lru c) + ((:canonicalizer c) key))) (defn invalidate-key [c key] - (.remove (:lru c) key) + (.remove (:lru c) ((:canonicalizer c) key)) nil) |
