/*****
* cache.h : HTML document & image caching routines
*
* This file Version	$Revision: 1.2 $
*
* Creation date:		Fri May 23 14:43:04 GMT+0100 1997
* Last modification: 	$Date: 1997/08/30 01:47:55 $
* By:					$Author: newt $
* Current State:		$State: Exp $
*
* Author:				newt
*
* Copyright (C) 1994-1997 by Ripley Software Development 
* All Rights Reserved
*
* This file is part of the XmHTML Widget Library
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*****/
/*****
* $Source: /usr/local/rcs/Newt/XmHTML/RCS/cache.h,v $
*****/
/*****
* ChangeLog 
* $Log: cache.h,v $
* Revision 1.2  1997/08/30 01:47:55  newt
* getObjectFromCache proto changed. Added pruneObjectCache.
*
* Revision 1.1  1997/05/28 02:01:31  newt
* Initial Revision
*
*****/ 

#ifndef _cache_h_
#define _cache_h_

/* get an object from the cache, given it's url */
extern XtPointer getURLObjectFromCache(String url);

/* get the first object that (partially) matches the given url */
extern XtPointer getFuzzyURLObjectFromCache(String url);

/* get an object from the cache, given it's location or reference */
extern XtPointer getObjectFromCache(String file, String url);

/* insert a new entry in the cache */
extern void storeObjectInCache(XtPointer object, String file, String url);

/* replace the given object in the cache with the newly given object */
extern void replaceObjectInCache(XtPointer old_object, XtPointer new_object);

/* decrement reference counter for the given url */
extern void removeURLObjectFromCache(String url);

/* decrement reference counter for the given file */
extern void removeObjectFromCache(String file);

/* clean the cache: remove all objects which are no longer used */
extern void cleanObjectCache(void);

/* prune ObjectCache: remove all objects for which no mappings are present */
extern void pruneObjectCache(void);

/* completely destroy the cache */
extern void destroyObjectCache(void);

/* get the current size and number of objects stored in the cache */
extern void getCacheInfo(int *size, int *nobjects);

/*****
* prune the image cache to the requested size. When small_first is True,
* pruning is started with the smallest objects, otherwise it starts with
* the largest objects. Cache pruning removes cached objects with low
* reference counts.
*****/
#if 0
extern void pruneCache(int size, int small_first);
#endif

/*****
* Proto for the clean_proc in the initCache proto below. This function
* is called when cleanObjectCache want's to destroy a stored object. This
* function is called with the following arguments:
*
* clean_proc(object, client_data)
*	XtPointer object:	object to be destroyed;
*	client_data:		additional data provided by the argument with the same
*						name in initCache. This object is unused internally.
*****/
typedef void (*cleanObjectProc)(XtPointer, XtPointer);

/*****
* Proto for the size_proc in the initCache proto below. This function is
* called whenever a new object is stored in the cache and should return the
* size of the given object. The arguments are the same as above.
*****/
typedef int (*sizeObjectProc)(XtPointer, XtPointer);

/*****
* function to initialize object cache. Arguments: 
* size: maximum cache size (UNUSED)
* clean_proc: function to call when a stored object is to be destroyed 
* clean_data: client_data for the clean_proc.
*****/
extern void initCache(int size, cleanObjectProc clean_proc,
	sizeObjectProc size_proc, XtPointer client_data);

/* Don't add anything after this endif! */
#endif /* _cache_h_ */
