hash: hide structure from header and make it internal

rte_hash structure should not be a public structure,
and therefore it should be moved to the C file and be declared
as internal. rte_hash_hash implementation is also moved
to the C file, as it uses the structure.

This patch also removes part of a unit test that was checking
a field of the structure.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
This commit is contained in:
Pablo de Lara 2015-07-08 12:27:34 +01:00 committed by Thomas Monjalon
parent 6759c55180
commit 9ef1501ea6
3 changed files with 35 additions and 36 deletions

View File

@ -1,7 +1,7 @@
/*-
* BSD LICENSE
*
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
* Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -1110,10 +1110,6 @@ test_hash_creation_with_good_parameters(void)
printf("Creating hash with null hash_func failed\n");
return -1;
}
if (handle->hash_func == NULL) {
printf("Hash function should have been DEFAULT_HASH_FUNC\n");
return -1;
}
/* this test is trying to create a hash with the same name as previous one.
* this should return a pointer to the hash we previously created.

View File

@ -1,7 +1,7 @@
/*-
* BSD LICENSE
*
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
* Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -92,6 +92,27 @@ EAL_REGISTER_TAILQ(rte_hash_tailq)
/* The high bit is always set in real signatures */
#define NULL_SIGNATURE 0
struct rte_hash {
char name[RTE_HASH_NAMESIZE]; /**< Name of the hash. */
uint32_t entries; /**< Total table entries. */
uint32_t bucket_entries; /**< Bucket entries. */
uint32_t key_len; /**< Length of hash key. */
rte_hash_function hash_func; /**< Function used to calculate hash. */
uint32_t hash_func_init_val; /**< Init value used by hash_func. */
uint32_t num_buckets; /**< Number of buckets in table. */
uint32_t bucket_bitmask; /**< Bitmask for getting bucket index
from hash signature. */
hash_sig_t sig_msb; /**< MSB is always set in valid signatures. */
uint8_t *sig_tbl; /**< Flat array of hash signature buckets. */
uint32_t sig_tbl_bucket_size; /**< Signature buckets may be padded for
alignment reasons, and this is the
bucket size used by sig_tbl. */
uint8_t *key_tbl; /**< Flat array of key value buckets. */
uint32_t key_tbl_key_size; /**< Keys may be padded for alignment
reasons, and this is the key size
used by key_tbl. */
};
/* Returns a pointer to the first signature in specified bucket. */
static inline hash_sig_t *
get_sig_tbl_bucket(const struct rte_hash *h, uint32_t bucket_index)
@ -291,6 +312,13 @@ rte_hash_free(struct rte_hash *h)
rte_free(te);
}
hash_sig_t
rte_hash_hash(const struct rte_hash *h, const void *key)
{
/* calc hash result by key */
return h->hash_func(key, h->key_len, h->hash_func_init_val);
}
static inline int32_t
__rte_hash_add_key_with_hash(const struct rte_hash *h,
const void *key, hash_sig_t sig)

View File

@ -1,7 +1,7 @@
/*-
* BSD LICENSE
*
* Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
* Copyright(c) 2010-2015 Intel Corporation. All rights reserved.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -41,7 +41,6 @@
*/
#include <stdint.h>
#include <sys/queue.h>
#ifdef __cplusplus
extern "C" {
@ -84,27 +83,8 @@ struct rte_hash_parameters {
int socket_id; /**< NUMA Socket ID for memory. */
};
/** A hash table structure. */
struct rte_hash {
char name[RTE_HASH_NAMESIZE]; /**< Name of the hash. */
uint32_t entries; /**< Total table entries. */
uint32_t bucket_entries; /**< Bucket entries. */
uint32_t key_len; /**< Length of hash key. */
rte_hash_function hash_func; /**< Function used to calculate hash. */
uint32_t hash_func_init_val; /**< Init value used by hash_func. */
uint32_t num_buckets; /**< Number of buckets in table. */
uint32_t bucket_bitmask; /**< Bitmask for getting bucket index
from hash signature. */
hash_sig_t sig_msb; /**< MSB is always set in valid signatures. */
uint8_t *sig_tbl; /**< Flat array of hash signature buckets. */
uint32_t sig_tbl_bucket_size; /**< Signature buckets may be padded for
alignment reasons, and this is the
bucket size used by sig_tbl. */
uint8_t *key_tbl; /**< Flat array of key value buckets. */
uint32_t key_tbl_key_size; /**< Keys may be padded for alignment
reasons, and this is the key size
used by key_tbl. */
};
/** @internal A hash table structure. */
struct rte_hash;
/**
* Create a new hash table.
@ -262,7 +242,6 @@ int32_t
rte_hash_lookup_with_hash(const struct rte_hash *h,
const void *key, hash_sig_t sig);
/**
* Calc a hash value by key. This operation is not multi-process safe.
*
@ -273,12 +252,8 @@ rte_hash_lookup_with_hash(const struct rte_hash *h,
* @return
* - hash value
*/
static inline hash_sig_t
rte_hash_hash(const struct rte_hash *h, const void *key)
{
/* calc hash result by key */
return h->hash_func(key, h->key_len, h->hash_func_init_val);
}
hash_sig_t
rte_hash_hash(const struct rte_hash *h, const void *key);
#define rte_hash_lookup_multi rte_hash_lookup_bulk
/**