~ubuntu-branches/ubuntu/natty/mesa/natty-proposed

« back to all changes in this revision

Viewing changes to src/mesa/program/hash_table.h

  • Committer: Bazaar Package Importer
  • Author(s): Robert Hooker, Robert Hooker, Christopher James Halse Rogers
  • Date: 2010-09-14 08:55:40 UTC
  • mfrom: (1.2.28 upstream)
  • Revision ID: james.westby@ubuntu.com-20100914085540-m4fpl0hdjlfd4jgz
Tags: 7.9~git20100909-0ubuntu1
[ Robert Hooker ]
* New upstream git snapshot up to commit 94118fe2d4b1e5 (LP: #631413)
* New features include ATI HD5xxx series support in r600, and a vastly
  improved glsl compiler.
* Remove pre-generated .pc's, use the ones generated at build time
  instead.
* Remove all references to mesa-utils now that its no longer shipped
  with the mesa source.
* Disable the experimental ARB_fragment_shader option by default on
  i915, it exposes incomplete functionality that breaks KDE compositing
  among other things. It can be enabled via driconf still. (LP: #628930).

[ Christopher James Halse Rogers ]
* debian/patches/04_osmesa_version.diff:
  - Refresh for new upstream
* Bugs fixed in this release:
  - Fixes severe rendering corruption in Unity on radeon (LP: #628727,
    LP: #596292, LP: #599741, LP: #630315, LP: #613694, LP: #599741).
  - Also fixes rendering in gnome-shell (LP: #578619).
  - Flickering in OpenGL apps on radeon (LP: #626943, LP: #610541).
  - Provides preliminary support for new intel chips (LP: #601052).
* debian/rules:
  - Update configure flags to match upstream reshuffling.
  - Explicitly remove gallium DRI drivers that we don't want to ship.
* Update debian/gbp.conf for this Maverick-specific packaging
* libegl1-mesa-dri-x11,kms: There are no longer separate kms or x11 drivers
  for EGL, libegl1-mesa-drivers now contains a single driver that provides
  both backends.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2008 Intel Corporation
 
3
 *
 
4
 * Permission is hereby granted, free of charge, to any person obtaining a
 
5
 * copy of this software and associated documentation files (the "Software"),
 
6
 * to deal in the Software without restriction, including without limitation
 
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 
8
 * and/or sell copies of the Software, and to permit persons to whom the
 
9
 * Software is furnished to do so, subject to the following conditions:
 
10
 *
 
11
 * The above copyright notice and this permission notice (including the next
 
12
 * paragraph) shall be included in all copies or substantial portions of the
 
13
 * Software.
 
14
 *
 
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 
21
 * DEALINGS IN THE SOFTWARE.
 
22
 */
 
23
 
 
24
/**
 
25
 * \file hash_table.h
 
26
 * \brief Implementation of a generic, opaque hash table data type.
 
27
 *
 
28
 * \author Ian Romanick <ian.d.romanick@intel.com>
 
29
 */
 
30
 
 
31
#ifndef HASH_TABLE_H
 
32
#define HASH_TABLE_H
 
33
 
 
34
struct hash_table;
 
35
 
 
36
typedef unsigned (*hash_func_t)(const void *key);
 
37
typedef int (*hash_compare_func_t)(const void *key1, const void *key2);
 
38
 
 
39
#ifdef __cplusplus
 
40
extern "C" {
 
41
#endif
 
42
 
 
43
/**
 
44
 * Hash table constructor
 
45
 *
 
46
 * Creates a hash table with the specified number of buckets.  The supplied
 
47
 * \c hash and \c compare routines are used when adding elements to the table
 
48
 * and when searching for elements in the table.
 
49
 *
 
50
 * \param num_buckets  Number of buckets (bins) in the hash table.
 
51
 * \param hash         Function used to compute hash value of input keys.
 
52
 * \param compare      Function used to compare keys.
 
53
 */
 
54
extern struct hash_table *hash_table_ctor(unsigned num_buckets,
 
55
    hash_func_t hash, hash_compare_func_t compare);
 
56
 
 
57
 
 
58
/**
 
59
 * Release all memory associated with a hash table
 
60
 *
 
61
 * \warning
 
62
 * This function cannot release memory occupied either by keys or data.
 
63
 */
 
64
extern void hash_table_dtor(struct hash_table *ht);
 
65
 
 
66
 
 
67
/**
 
68
 * Flush all entries from a hash table
 
69
 *
 
70
 * \param ht  Table to be cleared of its entries.
 
71
 */
 
72
extern void hash_table_clear(struct hash_table *ht);
 
73
 
 
74
 
 
75
/**
 
76
 * Search a hash table for a specific element
 
77
 *
 
78
 * \param ht   Table to be searched
 
79
 * \param key  Key of the desired element
 
80
 *
 
81
 * \return
 
82
 * The \c data value supplied to \c hash_table_insert when the element with
 
83
 * the matching key was added.  If no matching key exists in the table,
 
84
 * \c NULL is returned.
 
85
 */
 
86
extern void *hash_table_find(struct hash_table *ht, const void *key);
 
87
 
 
88
 
 
89
/**
 
90
 * Add an element to a hash table
 
91
 */
 
92
extern void hash_table_insert(struct hash_table *ht, void *data,
 
93
    const void *key);
 
94
 
 
95
/**
 
96
 * Remove a specific element from a hash table.
 
97
 */
 
98
extern void hash_table_remove(struct hash_table *ht, const void *key);
 
99
 
 
100
/**
 
101
 * Compute hash value of a string
 
102
 *
 
103
 * Computes the hash value of a string using the DJB2 algorithm developed by
 
104
 * Professor Daniel J. Bernstein.  It was published on comp.lang.c once upon
 
105
 * a time.  I was unable to find the original posting in the archives.
 
106
 *
 
107
 * \param key  Pointer to a NUL terminated string to be hashed.
 
108
 *
 
109
 * \sa hash_table_string_compare
 
110
 */
 
111
extern unsigned hash_table_string_hash(const void *key);
 
112
 
 
113
 
 
114
/**
 
115
 * Compare two strings used as keys
 
116
 *
 
117
 * This is just a macro wrapper around \c strcmp.
 
118
 *
 
119
 * \sa hash_table_string_hash
 
120
 */
 
121
#define hash_table_string_compare ((hash_compare_func_t) strcmp)
 
122
 
 
123
 
 
124
/**
 
125
 * Compute hash value of a pointer
 
126
 *
 
127
 * \param key  Pointer to be used as a hash key
 
128
 *
 
129
 * \note
 
130
 * The memory pointed to by \c key is \b never accessed.  The value of \c key
 
131
 * itself is used as the hash key
 
132
 *
 
133
 * \sa hash_table_pointer_compare
 
134
 */
 
135
unsigned
 
136
hash_table_pointer_hash(const void *key);
 
137
 
 
138
 
 
139
/**
 
140
 * Compare two pointers used as keys
 
141
 *
 
142
 * \sa hash_table_pointer_hash
 
143
 */
 
144
int
 
145
hash_table_pointer_compare(const void *key1, const void *key2);
 
146
 
 
147
#ifdef __cplusplus
 
148
}
 
149
#endif
 
150
#endif /* HASH_TABLE_H */