1/* Copyright (C) 2003 MySQL AB
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2 of the License, or
6 (at your option) any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License
14 along with this program; if not, write to the Free Software
15 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */
16
17/*
18 Handling of multiple key caches
19
20 The idea is to have a thread safe hash on the table name,
21 with a default key cache value that is returned if the table name is not in
22 the cache.
23*/
24
25#include <hash.h>
26
27/*
28 Struct to store a key and pointer to object
29*/
30
31typedef struct st_safe_hash_entry
32{
33 uchar *key;
34 uint length;
35 uchar *data;
36 struct st_safe_hash_entry *next, **prev;
37} SAFE_HASH_ENTRY;
38
39
40typedef struct st_safe_hash_with_default
41{
42 mysql_rwlock_t mutex;
43 HASH hash;
44 uchar *default_value;
45 SAFE_HASH_ENTRY *root;
46} SAFE_HASH;
47
48
49my_bool safe_hash_init(SAFE_HASH *hash, uint elements,
50 uchar *default_value);
51void safe_hash_free(SAFE_HASH *hash);
52uchar *safe_hash_search(SAFE_HASH *hash, const uchar *key, uint length,
53 uchar *def);
54my_bool safe_hash_set(SAFE_HASH *hash, const uchar *key, uint length,
55 uchar *data);
56void safe_hash_change(SAFE_HASH *hash, uchar *old_data, uchar *new_data);
57