Add hash table helper functions for using pointers as hash keys
This commit is contained in:
@@ -33,9 +33,7 @@
|
||||
#include "ir_function_inlining.h"
|
||||
#include "ir_expression_flattening.h"
|
||||
#include "glsl_types.h"
|
||||
extern "C" {
|
||||
#include "hash_table.h"
|
||||
}
|
||||
|
||||
class ir_function_inlining_visitor : public ir_hierarchical_visitor {
|
||||
public:
|
||||
@@ -60,16 +58,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
unsigned int hash_func(const void *key)
|
||||
{
|
||||
return (unsigned int)(uintptr_t)key;
|
||||
}
|
||||
|
||||
int hash_compare_func(const void *key1, const void *key2)
|
||||
{
|
||||
return key1 == key2 ? 0 : 1;
|
||||
}
|
||||
|
||||
bool
|
||||
automatic_inlining_predicate(ir_instruction *ir)
|
||||
{
|
||||
@@ -124,7 +112,7 @@ ir_call::generate_inline(ir_instruction *next_ir)
|
||||
ir_variable *retval = NULL;
|
||||
struct hash_table *ht;
|
||||
|
||||
ht = hash_table_ctor(0, hash_func, hash_compare_func);
|
||||
ht = hash_table_ctor(0, hash_table_pointer_hash, hash_table_pointer_compare);
|
||||
|
||||
num_parameters = 0;
|
||||
foreach_iter(exec_list_iterator, iter_sig, this->callee->parameters)
|
||||
|
@@ -36,26 +36,15 @@
|
||||
#include <inttypes.h>
|
||||
#include "ir.h"
|
||||
#include "ir_hierarchical_visitor.h"
|
||||
extern "C" {
|
||||
#include "hash_table.h"
|
||||
}
|
||||
|
||||
static unsigned int hash_func(const void *key)
|
||||
{
|
||||
return (unsigned int)(uintptr_t)key;
|
||||
}
|
||||
|
||||
static int hash_compare_func(const void *key1, const void *key2)
|
||||
{
|
||||
return key1 == key2 ? 0 : 1;
|
||||
}
|
||||
|
||||
|
||||
class ir_validate : public ir_hierarchical_visitor {
|
||||
public:
|
||||
ir_validate()
|
||||
{
|
||||
this->ht = hash_table_ctor(0, hash_func, hash_compare_func);
|
||||
this->ht = hash_table_ctor(0, hash_table_pointer_hash,
|
||||
hash_table_pointer_compare);
|
||||
|
||||
this->callback = ir_validate::validate_ir;
|
||||
this->data = ht;
|
||||
|
@@ -157,3 +157,17 @@ hash_table_string_hash(const void *key)
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
|
||||
unsigned
|
||||
hash_table_pointer_hash(const void *key)
|
||||
{
|
||||
return (unsigned)((uintptr_t) key / sizeof(void *));
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
hash_table_pointer_compare(const void *key1, const void *key2)
|
||||
{
|
||||
return key1 == key2 ? 0 : 1;
|
||||
}
|
||||
|
@@ -118,6 +118,30 @@ extern unsigned hash_table_string_hash(const void *key);
|
||||
*/
|
||||
#define hash_table_string_compare ((hash_compare_func_t) strcmp)
|
||||
|
||||
|
||||
/**
|
||||
* Compute hash value of a pointer
|
||||
*
|
||||
* \param key Pointer to be used as a hash key
|
||||
*
|
||||
* \note
|
||||
* The memory pointed to by \c key is \b never accessed. The value of \c key
|
||||
* itself is used as the hash key
|
||||
*
|
||||
* \sa hash_table_pointer_compare
|
||||
*/
|
||||
unsigned
|
||||
hash_table_pointer_hash(const void *key);
|
||||
|
||||
|
||||
/**
|
||||
* Compare two pointers used as keys
|
||||
*
|
||||
* \sa hash_table_pointer_hash
|
||||
*/
|
||||
int
|
||||
hash_table_pointer_compare(const void *key1, const void *key2);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user