diff options
| author | Scott Ostler <scottbot9000@gmail.com> | 2011-02-21 23:28:46 -0500 |
|---|---|---|
| committer | Scott Ostler <scottbot9000@gmail.com> | 2011-02-21 23:28:46 -0500 |
| commit | d6c8d8ab019721ba47a289de97c95e9786dd5ded (patch) | |
| tree | fbafe9199d175250477f3881f5b5e5808df81df8 /src/multikey_cache.clj | |
| parent | f2525430e94460085f369a526986b2b0a176b99f (diff) | |
sostler add favorite to frontpage
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) |
