hash: hide structure from header and make it internal
authorPablo de Lara <pablo.de.lara.guarch@intel.com>
Wed, 8 Jul 2015 11:27:34 +0000 (12:27 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 10 Jul 2015 10:25:28 +0000 (12:25 +0200)
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>
app/test/test_hash.c
lib/librte_hash/rte_hash.c
lib/librte_hash/rte_hash.h

index 4ecb11b..4300de9 100644 (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.
index 67dff5b..5100a75 100644 (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)
index 821a9d4..da0a00a 100644 (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
 /**