/*! @header ECCache @abstract Module of Encore @availability OS X, GNUstep @copyright 2004, 2005, 2006 Oliver Langer Author: Oliver Langer This library 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.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  -------------------------------------------------------------------------
  Modification history

  24.02.05 ola     initial version
  07.11.05 ola     changed API
  22.08.06 ola     license changed
  -------------------------------------------------------------------------
  
*/ #if !defined(__ECCache_H) #define __ECCache_H #include #include #include /*! * @class ECCache * @abstract Class used for a simple caching. * @discussion At present the underlying mechanism is very simple: If * the object has a reference counter value of greater/equal 1 then the * object relies in the dictionary. If the counter equals 0 then the * object will be removed.

Please note that the "reference counter" * mentioned here refers to cache-internal counter and not to that of * an object in general. */ @interface ECCache : ECObject { @private NSMutableDictionary *keyToCacheItem; NSLock *lock; } - init; - (void) dealloc; - (id) initWithCoder: (NSCoder *) decoder; - (void) encodeWithCoder: (NSCoder *) encoder; /*! * @method addObject * @abstract adds an object to the cache. * @discuss the object will be added and the reference count be set to 1. * If an object with that key already exists then the exception * {@link ECIllegalArgumentException} will be thrown. * @throws ECIllegalArgumentException if the key is already in use * @return self */ - addObject: (id) anObject forKey: (id ) aKey; /*! * @method allKeys * @result iterator over all keys */ - (id ) allKeys; /*! * @method objectExistsForKey * @abstract checks wether an object exists for the given key * @param aKey key of the object * @result YES if existent, NO otherwise */ - (BOOL) objectExistsForKey: (id) aKey; /*! * @method objectForKey * @abstract get the cached object identified by the given key * @param doIncrement The internal reference count will be incremented by 1 if * this parameter equals YES * @result related object or nil if not existent */ - objectForKey: (id) aKey incrementRefCounter: (BOOL) doIncrement; /*! * @method referenceCountOfObjectForKey * @param aKey key of object to look for. * @result return the current reference count for the specified object. Return 0 * if the object does not exist */ - (unsigned int) referenceCounterOfObjectForKey: (id) aKey; /*! * @method decrementRefCounterFor * @abstract Decrements the internal reference counter by one of the object * identified by the given key. * @discuss Does nothing if the key refers to a non-existing object */ - (void) decrementRefCounterForKey: (id) aKey; /*! * @method removeObjectForKey * @abstract removes the specified entry from the cache * @discussion Does nothing if the element could not be found. * @param aKey key of the entry to be removed */ - (void) removeObjectForKey: (id) aKey; @end #endif