blob: a9d86cd507d9fe33cc9932e4cf6f701dc2d21c49 [file] [log] [blame]
/*
*****************************************************************************************
*
* Copyright (C) 1997-1999, International Business Machines
* Corporation and others. All Rights Reserved.
*
*****************************************************************************************
*
* File rbcache.h
*
* Modification History:
*
* Date Name Description
* 03/20/97 aliu Creation.
* 04/29/97 aliu Convert to use new Hashtable protocol.
* 04/15/99 damiba plugged in new C hashtable
*****************************************************************************************
*/
#include "hash.h"
#include "unicode/unistr.h"
/* Disable these warnings:
d:\icu\source\common\rbcache.h(31) : warning C4251: 'hash' : class 'Hashtable' needs to have dll-interface to be used by clients of class 'ResourceBundleCache'
d:\icu\source\common\rbcache.h(57) : warning C4251: 'hash' : class 'Hashtable' needs to have dll-interface to be used by clients of class 'VisitedFileCache'
*/
#ifdef _WIN32
#pragma warning( disable : 4251 )
#endif
/**
* A class that maps UnicodeString keys to UHashtable objects. It
* owns the UHashtable objects passed to put() and will eventually
* close and delete them.
*/
class U_COMMON_API ResourceBundleCache { // Not really external; just making the compiler happy
private:
Hashtable hash;
static void U_CALLCONV deleteUHashtable(void* value);
public:
ResourceBundleCache();
inline ~ResourceBundleCache() {}
inline void put(const UnicodeString& key, UHashtable* adoptedValue);
inline const UHashtable* get(const UnicodeString& key) const;
};
inline void ResourceBundleCache::put(const UnicodeString& key, UHashtable* adoptedValue) {
UErrorCode status = U_ZERO_ERROR;
hash.put(key, adoptedValue, status);
}
inline const UHashtable* ResourceBundleCache::get(const UnicodeString& key) const {
return (const UHashtable*) hash.get(key);
}
/**
* A class that records whether a filename has been seen before or
* not. Call markAsVisited() to mark a filename as seen. Call
* wasVisited() to see if markAsVisited() has been called with that
* filename or not.
*/
class U_COMMON_API VisitedFileCache { // Not really external; just making the compiler happy
private:
Hashtable hash;
public:
inline VisitedFileCache() {}
inline ~VisitedFileCache() {}
inline UBool wasVisited(const UnicodeString& filename) const;
inline void markAsVisited(const UnicodeString& filename);
};
inline UBool VisitedFileCache::wasVisited(const UnicodeString& filename) const {
return (hash.get(filename) != 0);
}
inline void VisitedFileCache::markAsVisited(const UnicodeString& filename) {
UErrorCode status = U_ZERO_ERROR;
hash.put(filename, (void*)1, status);
}
//eof