blob: 78f572e3a5fccf4ed746fc73ecb89eb70725850f [file] [log] [blame]
/*
*****************************************************************************************
* 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