Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

hash.h

Go to the documentation of this file.
00001 /*
00002   Copyright (C) 1997-2001 Shigeru Chiba, Tokyo Institute of Technology.
00003 
00004   Permission to use, copy, distribute and modify this software and   
00005   its documentation for any purpose is hereby granted without fee,        
00006   provided that the above copyright notice appear in all copies and that 
00007   both that copyright notice and this permission notice appear in 
00008   supporting documentation.
00009 
00010   Shigeru Chiba makes no representations about the suitability of this 
00011   software for any purpose.  It is provided "as is" without express or
00012   implied warranty.
00013 */
00014 
00015 /*
00016   Copyright (c) 1995, 1996 Xerox Corporation.
00017   All Rights Reserved.
00018 
00019   Use and copying of this software and preparation of derivative works
00020   based upon this software are permitted. Any copy of this software or
00021   of any derivative work must include the above copyright notice of
00022   Xerox Corporation, this paragraph and the one after it.  Any
00023   distribution of this software or derivative works must comply with all
00024   applicable United States export control laws.
00025 
00026   This software is made available AS IS, and XEROX CORPORATION DISCLAIMS
00027   ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE
00028   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00029   PURPOSE, AND NOTWITHSTANDING ANY OTHER PROVISION CONTAINED HEREIN, ANY
00030   LIABILITY FOR DAMAGES RESULTING FROM THE SOFTWARE OR ITS USE IS
00031   EXPRESSLY DISCLAIMED, WHETHER ARISING IN CONTRACT, TORT (INCLUDING
00032   NEGLIGENCE) OR STRICT LIABILITY, EVEN IF XEROX CORPORATION IS ADVISED
00033   OF THE POSSIBILITY OF SUCH DAMAGES.
00034 */
00035 
00036 //  Hash Table
00037 
00038 #ifndef _hash_h
00039 #define _hash_h
00040 
00041 #include "types.h"
00042 
00043 #include <iostream>
00044 
00045 typedef void* HashValue;
00046 struct HashTableEntry;
00047 
00048 class HashTable : public LightObject {
00049 public:
00050     HashTable();
00051     HashTable(int) {}
00052     void MakeTable();
00053     bool IsEmpty();
00054     void Dump(ostream&);
00055     int AddEntry(char* key, HashValue value, int* index = 0);
00056     int AddEntry(bool, char* key, int len, HashValue value, int* index = 0);
00057 
00058     int AddEntry(char* key, int len, HashValue value, int* index = 0) {
00059         return AddEntry(TRUE, key, len, value, index);
00060     }
00061 
00062     // allow a duplicated entry to be inserted
00063     int AddDupEntry(char* key, int len, HashValue value, int* index = 0) {
00064         return AddEntry(FALSE, key, len, value, index);
00065     }
00066 
00067     bool Lookup(char* key, HashValue* value);
00068     bool Lookup(char* key, int len, HashValue* value);
00069     bool LookupEntries(char* key, int len, HashValue* value, int& nth);
00070     HashValue Peek(int index);
00071     bool RemoveEntry(char* key);
00072     bool RemoveEntry(char* key, int len);
00073     void ReplaceValue(int index, HashValue value);
00074 
00075 protected:
00076     char* KeyString(char* key);
00077     char* KeyString(char* key, int len);
00078 
00079     bool Lookup2(char* key, HashValue* val, int* index);
00080     bool Lookup2(char* key, int len, HashValue* val, int* index);
00081     static uint NextPrimeNumber(uint number);
00082     bool GrowTable(int increment);
00083     unsigned int StringToInt(char*);
00084     unsigned int StringToInt(char*, int);
00085     int HashFunc(unsigned int p, int n);
00086 
00087 protected:
00088     HashTableEntry      *entries;
00089     int                 Size;   // the max number of entries.
00090                                 // should be a prime number
00091     int                 Prime2;
00092 };
00093 
00094 class BigHashTable : public HashTable {
00095 public:
00096     BigHashTable();
00097 };
00098 
00099 #endif /* _hash_h */

Generated on Mon Feb 10 17:32:49 2003 for VFiasco Semantics Compiler by doxygen1.2.15