X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgl_linkedhash_list.c;h=7afecb59adea076363be91bda58e7e6859e50958;hb=6c9f1e88ada406b65f6b10098b8c9e60c973e614;hp=ca7f7072f9f5675d47991482de8caab7fd4b46c1;hpb=2a6d8ef178c5e186886e079badb06016b5f48bb6;p=gnulib.git diff --git a/lib/gl_linkedhash_list.c b/lib/gl_linkedhash_list.c index ca7f7072f..7afecb59a 100644 --- a/lib/gl_linkedhash_list.c +++ b/lib/gl_linkedhash_list.c @@ -1,11 +1,11 @@ /* Sequential list data type implemented by a hash table with a linked list. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2008 Free Software Foundation, Inc. Written by Bruno Haible , 2006. - This program is free software; you can redistribute it and/or modify + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -13,21 +13,18 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include /* Specification. */ #include "gl_linkedhash_list.h" +#include /* for SIZE_MAX */ #include #include "xalloc.h" #include "xsize.h" -#include "size_max.h" #ifndef uintptr_t # define uintptr_t unsigned long @@ -60,20 +57,20 @@ hash_resize_after_add (gl_list_t list) static inline void add_to_bucket (gl_list_t list, gl_list_node_t node) { - size_t index = node->h.hashcode % list->table_size; + size_t bucket = node->h.hashcode % list->table_size; - node->h.hash_next = list->table[index]; - list->table[index] = &node->h; + node->h.hash_next = list->table[bucket]; + list->table[bucket] = &node->h; } /* Remove a node from the hash table structure. */ static inline void remove_from_bucket (gl_list_t list, gl_list_node_t node) { - size_t index = node->h.hashcode % list->table_size; + size_t bucket = node->h.hashcode % list->table_size; gl_hash_entry_t *p; - for (p = &list->table[index]; ; p = &(*p)->hash_next) + for (p = &list->table[bucket]; ; p = &(*p)->hash_next) { if (*p == &node->h) { @@ -97,12 +94,13 @@ const struct gl_list_implementation gl_linkedhash_list_implementation = gl_linked_create, gl_linked_size, gl_linked_node_value, + gl_linked_node_set_value, gl_linked_next_node, gl_linked_previous_node, gl_linked_get_at, gl_linked_set_at, - gl_linked_search, - gl_linked_indexof, + gl_linked_search_from_to, + gl_linked_indexof_from_to, gl_linked_add_first, gl_linked_add_last, gl_linked_add_before, @@ -117,7 +115,9 @@ const struct gl_list_implementation gl_linkedhash_list_implementation = gl_linked_iterator_next, gl_linked_iterator_free, gl_linked_sortedlist_search, + gl_linked_sortedlist_search_from_to, gl_linked_sortedlist_indexof, + gl_linked_sortedlist_indexof_from_to, gl_linked_sortedlist_add, gl_linked_sortedlist_remove };