00001 /* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 00002 // rt_UStringHashTable.h 00003 00004 #ifndef RT_USTRINGHASHTABLE_H 00005 #define RT_USTRINGHASHTABLE_H 00006 00007 00008 struct StringChainElement : public ChainElement { 00009 JObject *copyOfString; 00010 }; 00011 00012 /* 00013 Represents a hashtable of references to java.lang.String 00014 instances. 00015 00016 An instance of this class is used to provide the 00017 basis for java.lang.String.intern() semantics, which 00018 are to return a unique java.lang.String instance for 00019 a specified java.lang.String. 00020 00021 */ 00022 class UStringHashTable : public UHashTable { 00023 public: 00024 UStringHashTable(int numBuckets); 00025 virtual ~UStringHashTable(); 00026 00027 ChainElement *doNewChainElement (); 00028 void doInitChainElement ( 00029 ChainElement *pElm, 00030 void *md); 00031 00032 void *insert(JObject *String, void * = NULL); 00033 void *insert(char *s, void * = NULL); 00034 void *insert(aJChar *s, int length, void * = NULL); 00035 00036 boolean_t check(); 00037 00038 void *operator new(size_t); 00039 00040 private: 00041 static int intern_count; 00042 00043 JObject *my_lookup (JObject *String); 00044 JObject *_my_lookup (JObject *String, ChainElement **ppElm); 00045 00046 void * getValue(ChainElement *); 00047 }; 00048 00049 00050 #endif // RT_USTRINGHASHTABLE_H