1/* This may look like C code, but it is really -*- C++ -*- */ 2 3/* Hash table used to check for duplicate keyword entries. 4 5 Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. 6 Written by Douglas C. Schmidt <schmidt@ics.uci.edu> 7 and Bruno Haible <bruno@clisp.org>. 8 9 This file is part of GNU GPERF. 10 11 GNU GPERF is free software; you can redistribute it and/or modify 12 it under the terms of the GNU General Public License as published by 13 the Free Software Foundation; either version 2, or (at your option) 14 any later version. 15 16 GNU GPERF is distributed in the hope that it will be useful, 17 but WITHOUT ANY WARRANTY; without even the implied warranty of 18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 GNU General Public License for more details. 20 21 You should have received a copy of the GNU General Public License 22 along with this program; see the file COPYING. 23 If not, write to the Free Software Foundation, Inc., 24 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 25 26#ifndef hash_table_h 27#define hash_table_h 1 28 29#include "keyword.h" 30 31/* Hash table of KeywordExt* entries. 32 Two entries are considered equal if their _selchars are the same and 33 - if !ignore_length - if their _allchars_length are the same. */ 34 35class Hash_Table 36{ 37public: 38 /* Constructor. 39 size is the maximum number of entries. 40 ignore_length determines a detail in the comparison function. */ 41 Hash_Table (unsigned int size, bool ignore_length); 42 /* Destructor. */ 43 ~Hash_Table (); 44 /* Attempts to insert ITEM in the table. If there is already an equal 45 entry in it, returns it. Otherwise inserts ITEM and returns NULL. */ 46 KeywordExt * insert (KeywordExt *item); 47 /* Print the table's contents. */ 48 void dump () const; 49 50private: 51 /* Vector of entries. */ 52 KeywordExt ** _table; 53 /* Size of the vector. */ 54 unsigned int _size; 55 /* log2(_size). */ 56 unsigned int _log_size; 57 /* A detail of the comparison function. */ 58 bool const _ignore_length; 59 /* Statistics: Number of collisions so far. */ 60 unsigned int _collisions; 61 62 /* Compares two items. */ 63 bool equal (KeywordExt *item1, KeywordExt *item2) const; 64}; 65 66#endif 67