158551Skris/* This may look like C code, but it is really -*- C++ -*- */ 258551Skris 358551Skris/* Hash table used to check for duplicate keyword entries. 458551Skris 5228060Sbapt Copyright (C) 1989-1998, 2000, 2002 Free Software Foundation, Inc. 6228060Sbapt Written by Douglas C. Schmidt <schmidt@ics.uci.edu> 7228060Sbapt and Bruno Haible <bruno@clisp.org>. 858551Skris 9228060Sbapt This file is part of GNU GPERF. 1058551Skris 11228060Sbapt GNU GPERF is free software; you can redistribute it and/or modify 12228060Sbapt it under the terms of the GNU General Public License as published by 13228060Sbapt the Free Software Foundation; either version 2, or (at your option) 14228060Sbapt any later version. 1558551Skris 16228060Sbapt GNU GPERF is distributed in the hope that it will be useful, 17228060Sbapt but WITHOUT ANY WARRANTY; without even the implied warranty of 18228060Sbapt MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19228060Sbapt GNU General Public License for more details. 2058551Skris 21228060Sbapt You should have received a copy of the GNU General Public License 22228060Sbapt along with this program; see the file COPYING. 23228060Sbapt If not, write to the Free Software Foundation, Inc., 24228060Sbapt 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 2558551Skris 2658551Skris#ifndef hash_table_h 2758551Skris#define hash_table_h 1 2858551Skris 29228060Sbapt#include "keyword.h" 3058551Skris 31228060Sbapt/* Hash table of KeywordExt* entries. 32228060Sbapt Two entries are considered equal if their _selchars are the same and 33228060Sbapt - if !ignore_length - if their _allchars_length are the same. */ 34228060Sbapt 3558551Skrisclass Hash_Table 3658551Skris{ 37228060Sbaptpublic: 38228060Sbapt /* Constructor. 39228060Sbapt size is the maximum number of entries. 40228060Sbapt ignore_length determines a detail in the comparison function. */ 41228060Sbapt Hash_Table (unsigned int size, bool ignore_length); 42228060Sbapt /* Destructor. */ 43228060Sbapt ~Hash_Table (); 44228060Sbapt /* Attempts to insert ITEM in the table. If there is already an equal 45228060Sbapt entry in it, returns it. Otherwise inserts ITEM and returns NULL. */ 46228060Sbapt KeywordExt * insert (KeywordExt *item); 47228060Sbapt /* Print the table's contents. */ 48228060Sbapt void dump () const; 49228060Sbapt 5058551Skrisprivate: 51228060Sbapt /* Vector of entries. */ 52228060Sbapt KeywordExt ** _table; 53228060Sbapt /* Size of the vector. */ 54228060Sbapt unsigned int _size; 55228060Sbapt /* log2(_size). */ 56228060Sbapt unsigned int _log_size; 57228060Sbapt /* A detail of the comparison function. */ 58228060Sbapt bool const _ignore_length; 59228060Sbapt /* Statistics: Number of collisions so far. */ 60228060Sbapt unsigned int _collisions; 6158551Skris 62228060Sbapt /* Compares two items. */ 63228060Sbapt bool equal (KeywordExt *item1, KeywordExt *item2) const; 6458551Skris}; 6558551Skris 6658551Skris#endif 67