All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.semanticweb.owlapi.util.WeakIndexCache Maven / Gradle / Ivy

The newest version!
package org.semanticweb.owlapi.util;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.lang.ref.WeakReference;
import java.util.Map;

/** A weakly linked cache - elements in the cache can be garbage collected
 * 
 * @param 
 * @param  */
public class WeakIndexCache implements Serializable {
    private static final long serialVersionUID = 30406L;
    protected transient Map> prefixCache = CollectionFactory
            .createSyncWeakMap();

    /** @param s
     *            the cache key
     * @param v
     *            the cache value
     * @return the cached value */
    public V cache(K s, V v) {
        WeakReference w = prefixCache.get(s);
        if (w != null) {
            V toReturn = w.get();
            if (toReturn != null) {
                return toReturn;
            }
        }
        // need to add the new key and return it
        prefixCache.put(s, new WeakReference(v));
        return v;
    }

    private void readObject(ObjectInputStream in) throws IOException,
    ClassNotFoundException {
        in.defaultReadObject();
        prefixCache = CollectionFactory.createSyncWeakMap();
    }

    /** @param k
     *            the key
     * @return the value */
    public V get(K k) {
        WeakReference w = prefixCache.get(k);
        if (w != null) {
            V toReturn = w.get();
            return toReturn;
        }
        return null;
    }

    /**
     * @param k the key to check
     * @return true if the cache contains k as a key; note that, due to the nature of this cache, by the time the method returns the key may no longer be in the map.*/
    public boolean contains(K k) {
        WeakReference w = prefixCache.get(k);
        if (w != null) {
            V toReturn = w.get();
            if(toReturn!=null) {
                return true;
            }
        }
        return false;
    }

    /** empty the cache */
    public void clear() {
        prefixCache.clear();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy