mirror of
https://github.com/samba-team/samba.git
synced 2024-12-27 03:21:53 +03:00
e1d65985be
(This used to be commit 723ce5c531
)
75 lines
2.4 KiB
C
75 lines
2.4 KiB
C
/*
|
|
Unix SMB/CIFS implementation.
|
|
|
|
Copyright (C) Ying Chen 2000.
|
|
|
|
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 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
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#ifndef _HASH_H_
|
|
#define _HASH_H_
|
|
|
|
#define MAX_HASH_TABLE_SIZE 16384
|
|
#define HASH_TABLE_INCREMENT 2
|
|
|
|
typedef int (*compare_function)(char *, char *);
|
|
typedef int (*hash_function)(int, char *);
|
|
|
|
/*
|
|
* lru_link: links the node to the LRU list.
|
|
* hash_elem: the pointer to the element that is tied onto the link.
|
|
*/
|
|
typedef struct lru_node {
|
|
ubi_dlNode lru_link;
|
|
void *hash_elem;
|
|
} lru_node;
|
|
|
|
/*
|
|
* bucket_link: link the hash element to the bucket chain that it belongs to.
|
|
* lru_link: this element ties the hash element to the lru list.
|
|
* bucket: a pointer to the hash bucket that this element belongs to.
|
|
* value: a pointer to the hash element content. It can be anything.
|
|
* key: stores the string key. The hash_element is always allocated with
|
|
* more memory space than the structure shown below to accomodate the space
|
|
* used for the whole string. But the memory is always appended at the
|
|
* end of the structure, so keep "key" at the end of the structure.
|
|
* Don't move it.
|
|
*/
|
|
typedef struct hash_element {
|
|
ubi_dlNode bucket_link;
|
|
lru_node lru_link;
|
|
ubi_dlList *bucket;
|
|
void *value;
|
|
char key[1];
|
|
} hash_element;
|
|
|
|
/*
|
|
* buckets: a list of buckets, implemented as a dLinkList.
|
|
* lru_chain: the lru list of all the hash elements.
|
|
* num_elements: the # of elements in the hash table.
|
|
* size: the hash table size.
|
|
* comp_func: the compare function used during hash key comparisons.
|
|
*/
|
|
|
|
typedef struct hash_table {
|
|
ubi_dlList *buckets;
|
|
ubi_dlList lru_chain;
|
|
unsigned num_elements;
|
|
unsigned size;
|
|
compare_function comp_func;
|
|
} hash_table;
|
|
|
|
#endif /* _HASH_H_ */
|