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:
parent
6759c55180
commit
9ef1501ea6
@ -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.
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user