/* ***************************************************************************************** * Copyright (C) 1997-1999, International Business Machines * Corporation and others. All Rights Reserved. ***************************************************************************************** */ //=============================================================================== // // File colcache.h // // CollationCache implements a persistent in-memory cache for // TableCollationData objects. The goal of CollationCache is to improve // the memory footprint of a process which may have multiple threads // loading up the same TableCollation object. Performance improvement is // strictly a secondary goal. // // Created by: Alan Liu // // Modification History: // // Date Name Description // 2/11/97 aliu Creation. // 2/12/97 aliu Modified to work with TableCollationData. // 8/18/97 helena Added internal API documentation. // //=============================================================================== #ifndef COLCACHE_H #define COLCACHE_H #include "hash.h" #include "unicode/unistr.h" class Hashtable; class TableCollationData; // Tell the VC++ compiler not to warn about DLL interface #ifdef _WIN32 #pragma warning( disable : 4251 ) #endif //------------------------------------------------------------------------------- /** * CollationCache implements a simple cache for TableCollationData objects. * TableCollationData objects may be added to the cache, and looked up in the * cache. When the cache is destroyed, all the TableCollationData objects are * deleted. */ class CollationCache { public: /** * Default constructor. */ CollationCache(); /** * Destructor. */ inline ~CollationCache() {} /** * ::Add and ::Find use a UnicodeString as the key to Collation objects in the * cache. If Add is called twice with equivalent keys, but different * collation objects, the first collation object will be deleted when the * second one is added. In general, this is undesirable; objects in the * cache are usually pointed to by various clients in the system. For this * reason, clients should call Find to ensure a Collation object does not * already exist in the cache for the given key before calling Add. * @param key the unique key. * @param data the collation data object. * @return the found collation data object */ void Add(const UnicodeString& key, TableCollationData* adoptedData); TableCollationData* Find(const UnicodeString& key); private: Hashtable fHashtable; }; inline void CollationCache::Add(const UnicodeString& key, TableCollationData* adoptedValue) { UErrorCode status = U_ZERO_ERROR; fHashtable.put(key, adoptedValue, status); } inline TableCollationData* CollationCache::Find(const UnicodeString& keyString) { return (TableCollationData*) fHashtable.get(keyString); } #endif //eof