/*
* The MIT License (MIT)
*
* Copyright (c) 2007-2015 Broad Institute
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/*
* ImageCache.java
*
* Created on December 1, 2007, 9:59 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package org.broad.igv.util;
import org.broad.igv.sam.Alignment;
import java.lang.ref.SoftReference;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
/**
*
*/
public class ObjectCache<K, V> {
/**
* Maximum number of objects to cache
*/
private int maxSize = 1000;
private LinkedHashMap<K, SoftReference<V>> map = new LinkedHashMap<K, SoftReference<V>>();
public ObjectCache() {
this(50);
}
public ObjectCache(int maxSize) {
this.maxSize = maxSize;
map = new LinkedHashMap<K, SoftReference<V>>(maxSize);
}
public void put(K key, V image) {
if (map.size() == maxSize) {
// Map has reached maximum size. Remove the first(oldest) entry.
//
for (K k : map.keySet()) {
map.remove(k);
break;
}
}
SoftReference<V> SoftReference = new SoftReference<V>(image);
map.put(key, SoftReference);
}
public V get(K key) {
V image = null;
SoftReference<V> SoftReference = map.get(key);
if (SoftReference != null) {
image = SoftReference.get();
}
return image;
}
public Collection<K> getKeys() {
return map.keySet();
}
public void remove(K key) {
map.remove(key);
}
public boolean containsKey(K key) {
return map.containsKey(key);
}
public void clear() {
map.clear();
}
public int size() {
return map.size();
}
public Iterator<K> iterator() {
return map.keySet().iterator();
}
public int getMaxSize() {
return maxSize;
}
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
}