Fix nightly test warnings in hashtable implementation.
[bertos.git] / bertos / struct / hashtable.h
index f721803e0907c04606ad0fe397fb9bf163aaaaad..07a514d5e90330007f558310b946f2af6536b8a4 100644 (file)
@@ -30,7 +30,9 @@
  * Copyright 2004 Giovanni Bajo
  * -->
  *
- * \author Giovanni Bajo <rasky@develer.com>
+ * \defgroup hashtable Hash table implementation
+ * \ingroup struct
+ * \{
  *
  * \brief Portable hash table
  *
@@ -50,6 +52,8 @@
  * a marker for a free node, so it is invalid to store a NULL pointer in the table
  * with \c ht_insert().
  *
+ * \author Giovanni Bajo <rasky@develer.com>
+ *
  * $WIZ$ module_name = "hashtable"
  * $WIZ$ module_configuration = "bertos/cfg/cfg_hashtable.h"
  */
@@ -129,7 +133,8 @@ typedef struct
 
 /** Exactly like \c DECLARE_HASHTABLE, but the variable will be declared as static. */
 #define DECLARE_HASHTABLE_STATIC(name, size, hook_gk) \
-       static const void* name##_nodes[1 << UINT32_LOG2(size)]; \
+       enum { name##_SIZE = (1 << UINT32_LOG2(size)), }; \
+       static const void* name##_nodes[name##_SIZE]; \
        static struct HashTable name = \
                { \
                        .mem = name##_nodes, \
@@ -151,8 +156,10 @@ typedef struct
 
        /** Exactly like \c DECLARE_HASHTABLE_INTERNALKEY, but the variable will be declared as static. */
        #define DECLARE_HASHTABLE_INTERNALKEY_STATIC(name, size) \
-               static uint8_t name##_keys[(1 << UINT32_LOG2(size)) * (INTERNAL_KEY_MAX_LENGTH + 1)]; \
-               static const void* name##_nodes[1 << UINT32_LOG2(size)]; \
+               enum { name##_KEYS = ((1 << UINT32_LOG2(size)) * (INTERNAL_KEY_MAX_LENGTH + 1)), \
+                       name##_SIZE = (1 << UINT32_LOG2(size)), }; \
+               static uint8_t name##_keys[name##_KEYS]; \
+               static const void* name##_nodes[name##_SIZE]; \
                static struct HashTable name = \
                        { \
                                .mem = name##_nodes, \
@@ -285,4 +292,10 @@ INLINE HashIterator ht_iter_next(HashIterator h)
        return h;
 }
 
+int hashtable_testSetup(void);
+int hashtable_testRun(void);
+int hashtable_testTearDown(void);
+
+/** \} */ // \defgroup hashtable
+
 #endif /* STRUCT_HASHTABLE_H */