package org.zact.idk.cache;

/**
 * MUST THREAD-SAFE
 * MUST KEY IS NOT NULL
 * @author <a href="mailto:colus@isoft.co.kr">Eung-ju Park</a>
 */
public interface Cache
{
    void addCacheListener( final CacheListener listener );

    void removeCacheListener( final CacheListener listener );

    /**
     * @return capacity of cache
     */
    int capacity();
   
    /**
     * @return the number of key-value mappings in this cache.
     */
    int size();

    /**
     * @param key
     * @param value
     * @return old value
     */
    Object put( Object key, Object value );

    /**
     * @param key
     * @return
     */
    Object get( Object key );

    /**
     * @param key
     * @return
     */
    boolean containsKey( Object key );

    /**
     * @param key
     * @return old value
     */
    Object remove( Object key );

    /**
     */
    //void clear();
}
