/* * eXist Open Source Native XML Database * Copyright (C) 2001-06 Wolfgang M. Meier * wolfgang@exist-db.org * http://exist.sourceforge.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id$ */ package org.exist.storage.cache; /** * Implemented by all objects that should be stored into a cache. * * Each object should provide a unique key, an internal reference counter, * and a timestamp marker (used to measure how long the object has stayed * in the cache). It depends on the concrete cache implementation if and how * these fields are used. * * @author Wolfgang <wolfgang@exist-db.org> */ public interface Cacheable { public final static int MAX_REF = 10000; /** * Get a unique key for the object. * * Usually this is the page number. * * @return unique key */ public long getKey(); /** * Get the current reference count. * * @return The count value. */ public int getReferenceCount(); /** * Increase the reference count of this object by one * and return it. * * @return the reference count */ public int incReferenceCount(); /** * Decrease the reference count of this object by one * and return it. * * @return the reference count */ public int decReferenceCount(); /** * Set the reference count of this object. * * @param count */ public void setReferenceCount(int count); /** * Set the timestamp marker. * * @param timestamp */ public void setTimestamp(int timestamp); /** * Get the current timestamp marker. * * @return timestamp marker */ public int getTimestamp(); /** * Called before the object is released by the * cache. The object should prepare to be garbage * collected. All unwritten data should be flushed * to disk. */ public boolean sync(boolean syncJournal); /** * Is it safe to unload the Cacheable from the cache? * * Called before an object is actually removed. Return * false to avoid being removed. * * @return A boolean where true indicates it can be unloaded. */ public boolean allowUnload(); public boolean isDirty(); }