diff --git a/src/cmc/bitset.h b/src/cmc/bitset.h index 6872533..9dff4a7 100644 --- a/src/cmc/bitset.h +++ b/src/cmc/bitset.h @@ -43,19 +43,39 @@ /** * Core BitSet implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_BITSET_CORE(PARAMS) \ - CMC_CMC_BITSET_CORE_HEADER(PARAMS) \ +#define CMC_CMC_BITSET_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_BITSET_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_BITSET_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_BITSET_CORE_STRUCT(PARAMS) \ + CMC_CMC_BITSET_CORE_HEADER(PARAMS) + +#define CMC_CMC_BITSET_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_BITSET_CORE_SOURCE(PARAMS) + +#define CMC_CMC_BITSET_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_BITSET_CORE_HEADER(PARAMS) + +#define CMC_CMC_BITSET_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_BITSET_CORE_STRUCT(PARAMS) \ CMC_CMC_BITSET_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_BITSET_CORE_STRUCT(PARAMS) CMC_CMC_BITSET_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS)) + #define CMC_CMC_BITSET_CORE_HEADER(PARAMS) CMC_CMC_BITSET_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS)) #define CMC_CMC_BITSET_CORE_SOURCE(PARAMS) CMC_CMC_BITSET_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_BITSET_CORE_HEADER_(PFX, SNAME) \ +#define CMC_CMC_BITSET_CORE_STRUCT_(PFX, SNAME) \ \ /* BitSet Structure */ \ struct SNAME \ @@ -74,7 +94,12 @@ \ /* Custom callback functions */ \ CMC_CALLBACKS_DECL; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_BITSET_CORE_HEADER_(PFX, SNAME) \ \ /* BitSet Iterator */ \ struct CMC_DEF_ITER(SNAME) \ @@ -157,6 +182,8 @@ struct SNAME *CMC_(PFX, _new_custom)(size_t n_bits, struct CMC_ALLOC_NODE_NAME * alloc, \ struct CMC_CALLBACKS_NAME * callbacks) \ { \ + CMC_CALLBACKS_MAYBE_UNUSED(callbacks); \ +\ if (n_bits < 1) \ return NULL; \ \ diff --git a/src/cmc/deque.h b/src/cmc/deque.h index d2783b4..07c78ec 100644 --- a/src/cmc/deque.h +++ b/src/cmc/deque.h @@ -36,17 +36,34 @@ * ------------------------------------------------------------------------- */ #include "../cor/core.h" -/* ------------------------------------------------------------------------- - * Deque Specific - * ------------------------------------------------------------------------- */ - /** * Core Deque implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_DEQUE_CORE(PARAMS) \ - CMC_CMC_DEQUE_CORE_HEADER(PARAMS) \ +#define CMC_CMC_DEQUE_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_DEQUE_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_DEQUE_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_DEQUE_CORE_STRUCT(PARAMS) \ + CMC_CMC_DEQUE_CORE_HEADER(PARAMS) + +#define CMC_CMC_DEQUE_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_DEQUE_CORE_SOURCE(PARAMS) + +#define CMC_CMC_DEQUE_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_DEQUE_CORE_HEADER(PARAMS) + +#define CMC_CMC_DEQUE_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_DEQUE_CORE_STRUCT(PARAMS) \ CMC_CMC_DEQUE_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_DEQUE_CORE_STRUCT(PARAMS) \ + CMC_CMC_DEQUE_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_DEQUE_CORE_HEADER(PARAMS) \ CMC_CMC_DEQUE_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -54,9 +71,9 @@ CMC_CMC_DEQUE_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_DEQUE_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_DEQUE_CORE_STRUCT_(PFX, SNAME, V) \ \ /* Deque Structure */ \ struct SNAME \ @@ -86,7 +103,12 @@ \ /* Custom callback functions */ \ CMC_CALLBACKS_DECL; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_DEQUE_CORE_HEADER_(PFX, SNAME, V) \ \ struct CMC_DEF_FVAL(SNAME) \ { \ diff --git a/src/cmc/hashbidimap.h b/src/cmc/hashbidimap.h index 9a92328..9edab75 100644 --- a/src/cmc/hashbidimap.h +++ b/src/cmc/hashbidimap.h @@ -38,11 +38,35 @@ /** * Core HashBidiMap implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_HASHBIDIMAP_CORE(PARAMS) \ - CMC_CMC_HASHBIDIMAP_CORE_HEADER(PARAMS) \ +#define CMC_CMC_HASHBIDIMAP_CORE(ACCESS, FILE, PARAMS) \ + CMC_(CMC_(CMC_CMC_HASHBIDIMAP_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_HASHBIDIMAP_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_HASHBIDIMAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHBIDIMAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHBIDIMAP_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_HASHBIDIMAP_CORE_SOURCE(PARAMS) + +#define CMC_CMC_HASHBIDIMAP_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + struct CMC_DEF_ENTRY(CMC_PARAM_SNAME(PARAMS)); \ + CMC_CMC_HASHBIDIMAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHBIDIMAP_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_HASHBIDIMAP_CORE_STRUCT(PARAMS) \ CMC_CMC_HASHBIDIMAP_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_HASHBIDIMAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHBIDIMAP_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_K(PARAMS), \ + CMC_PARAM_V(PARAMS)) + #define CMC_CMC_HASHBIDIMAP_CORE_HEADER(PARAMS) \ CMC_CMC_HASHBIDIMAP_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_K(PARAMS), \ CMC_PARAM_V(PARAMS)) @@ -52,9 +76,9 @@ CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_HASHBIDIMAP_CORE_HEADER_(PFX, SNAME, K, V) \ +#define CMC_CMC_HASHBIDIMAP_CORE_STRUCT_(PFX, SNAME, K, V) \ \ /* HashBidiMap Structure */ \ struct SNAME \ @@ -114,7 +138,12 @@ /* ref[0] is relative to K -> V */ \ /* ref[1] is relative to V -> K */ \ struct CMC_DEF_ENTRY(SNAME) * *ref[2]; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_HASHBIDIMAP_CORE_HEADER_(PFX, SNAME, K, V) \ \ /* Key struct function table */ \ struct CMC_DEF_FKEY(SNAME) \ diff --git a/src/cmc/hashmap.h b/src/cmc/hashmap.h index c0e2e06..73d71cd 100644 --- a/src/cmc/hashmap.h +++ b/src/cmc/hashmap.h @@ -31,11 +31,34 @@ /** * Core HashMap implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_HASHMAP_CORE(PARAMS) \ - CMC_CMC_HASHMAP_CORE_HEADER(PARAMS) \ +#define CMC_CMC_HASHMAP_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_HASHMAP_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_HASHMAP_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_HASHMAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHMAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHMAP_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_HASHMAP_CORE_SOURCE(PARAMS) + +#define CMC_CMC_HASHMAP_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + struct CMC_DEF_ENTRY(CMC_PARAM_SNAME(PARAMS)); \ + CMC_CMC_HASHMAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHMAP_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_HASHMAP_CORE_STRUCT(PARAMS) \ CMC_CMC_HASHMAP_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_HASHMAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHMAP_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_K(PARAMS), \ + CMC_PARAM_V(PARAMS)) + #define CMC_CMC_HASHMAP_CORE_HEADER(PARAMS) \ CMC_CMC_HASHMAP_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_K(PARAMS), \ CMC_PARAM_V(PARAMS)) @@ -45,11 +68,11 @@ CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_HASHMAP_CORE_HEADER_(PFX, SNAME, K, V) \ +#define CMC_CMC_HASHMAP_CORE_STRUCT_(PFX, SNAME, K, V) \ \ - /* Hashmap Structure */ \ + /* HashMap Structure */ \ struct SNAME \ { \ /* Array of Entries */ \ @@ -80,7 +103,7 @@ CMC_CALLBACKS_DECL; \ }; \ \ - /* Hashmap Entry */ \ + /* HashMap Entry */ \ struct CMC_DEF_ENTRY(SNAME) \ { \ /* Entry Key */ \ @@ -95,7 +118,12 @@ \ /* The sate of this node (DELETED, EMPTY, FILLED) */ \ enum cmc_entry_state state; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_HASHMAP_CORE_HEADER_(PFX, SNAME, K, V) \ \ /* Key struct function table */ \ struct CMC_DEF_FKEY(SNAME) \ diff --git a/src/cmc/hashmultimap.h b/src/cmc/hashmultimap.h index b6eb64e..16e20b2 100644 --- a/src/cmc/hashmultimap.h +++ b/src/cmc/hashmultimap.h @@ -56,11 +56,35 @@ /** * Core HashMultiMap implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_HASHMULTIMAP_CORE(PARAMS) \ - CMC_CMC_HASHMULTIMAP_CORE_HEADER(PARAMS) \ +#define CMC_CMC_HASHMULTIMAP_CORE(ACCESS, FILE, PARAMS) \ + CMC_(CMC_(CMC_CMC_HASHMULTIMAP_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_HASHMULTIMAP_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_HASHMULTIMAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHMULTIMAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHMULTIMAP_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_HASHMULTIMAP_CORE_SOURCE(PARAMS) + +#define CMC_CMC_HASHMULTIMAP_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + struct CMC_DEF_ENTRY(CMC_PARAM_SNAME(PARAMS)); \ + CMC_CMC_HASHMULTIMAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHMULTIMAP_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_HASHMULTIMAP_CORE_STRUCT(PARAMS) \ CMC_CMC_HASHMULTIMAP_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_HASHMULTIMAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHMULTIMAP_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_K(PARAMS), \ + CMC_PARAM_V(PARAMS)) + #define CMC_CMC_HASHMULTIMAP_CORE_HEADER(PARAMS) \ CMC_CMC_HASHMULTIMAP_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_K(PARAMS), \ CMC_PARAM_V(PARAMS)) @@ -70,9 +94,9 @@ CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_HASHMULTIMAP_CORE_HEADER_(PFX, SNAME, K, V) \ +#define CMC_CMC_HASHMULTIMAP_CORE_STRUCT_(PFX, SNAME, K, V) \ \ /* HashMultimap Structure */ \ struct SNAME \ @@ -119,7 +143,12 @@ \ /* Previous entry on the linked list */ \ struct CMC_DEF_ENTRY(SNAME) * prev; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_HASHMULTIMAP_CORE_HEADER_(PFX, SNAME, K, V) \ \ /* Key struct function table */ \ struct CMC_DEF_FKEY(SNAME) \ diff --git a/src/cmc/hashmultiset.h b/src/cmc/hashmultiset.h index 0ee8fc2..f94ac96 100644 --- a/src/cmc/hashmultiset.h +++ b/src/cmc/hashmultiset.h @@ -38,11 +38,34 @@ /** * Core HashMultiSet implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_HASHMULTISET_CORE(PARAMS) \ - CMC_CMC_HASHMULTISET_CORE_HEADER(PARAMS) \ +#define CMC_CMC_HASHMULTISET_CORE(ACCESS, FILE, PARAMS) \ + CMC_(CMC_(CMC_CMC_HASHMULTISET_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_HASHMULTISET_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_HASHMULTISET_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHMULTISET_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHMULTISET_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_HASHMULTISET_CORE_SOURCE(PARAMS) + +#define CMC_CMC_HASHMULTISET_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + struct CMC_DEF_ENTRY(CMC_PARAM_SNAME(PARAMS)); \ + CMC_CMC_HASHMULTISET_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHMULTISET_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_HASHMULTISET_CORE_STRUCT(PARAMS) \ CMC_CMC_HASHMULTISET_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_HASHMULTISET_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHMULTISET_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_HASHMULTISET_CORE_HEADER(PARAMS) \ CMC_CMC_HASHMULTISET_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -50,9 +73,9 @@ CMC_CMC_HASHMULTISET_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_HASHMULTISET_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_HASHMULTISET_CORE_STRUCT_(PFX, SNAME, V) \ \ /* HashMultiset Structure */ \ struct SNAME \ @@ -99,7 +122,12 @@ \ /* The sate of this node (DELETED, EMPTY, FILLED) */ \ enum cmc_entry_state state; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_HASHMULTISET_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/hashset.h b/src/cmc/hashset.h index 1cc9b87..04b2c2e 100644 --- a/src/cmc/hashset.h +++ b/src/cmc/hashset.h @@ -31,11 +31,33 @@ /** * Core HashSet implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_HASHSET_CORE(PARAMS) \ - CMC_CMC_HASHSET_CORE_HEADER(PARAMS) \ +#define CMC_CMC_HASHSET_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_HASHSET_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_HASHSET_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_HASHSET_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHSET_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHSET_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_HASHSET_CORE_SOURCE(PARAMS) + +#define CMC_CMC_HASHSET_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + struct CMC_DEF_ENTRY(CMC_PARAM_SNAME(PARAMS)); \ + CMC_CMC_HASHSET_CORE_HEADER(PARAMS) + +#define CMC_CMC_HASHSET_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_HASHSET_CORE_STRUCT(PARAMS) \ CMC_CMC_HASHSET_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_HASHSET_CORE_STRUCT(PARAMS) \ + CMC_CMC_HASHSET_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_HASHSET_CORE_HEADER(PARAMS) \ CMC_CMC_HASHSET_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -43,9 +65,9 @@ CMC_CMC_HASHSET_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_HASHSET_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_HASHSET_CORE_STRUCT_(PFX, SNAME, V) \ \ /* Hashset Structure */ \ struct SNAME \ @@ -86,7 +108,12 @@ \ /* The sate of this node (DELETED, EMPTY, FILLED) */ \ enum cmc_entry_state state; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_HASHSET_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/heap.h b/src/cmc/heap.h index 6d0d19e..aa654d6 100644 --- a/src/cmc/heap.h +++ b/src/cmc/heap.h @@ -42,11 +42,32 @@ /** * Core Heap implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_HEAP_CORE(PARAMS) \ - CMC_CMC_HEAP_CORE_HEADER(PARAMS) \ +#define CMC_CMC_HEAP_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_HEAP_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_HEAP_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_HEAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_HEAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_HEAP_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_HEAP_CORE_SOURCE(PARAMS) + +#define CMC_CMC_HEAP_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_HEAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_HEAP_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_HEAP_CORE_STRUCT(PARAMS) \ CMC_CMC_HEAP_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_HEAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_HEAP_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_HEAP_CORE_HEADER(PARAMS) \ CMC_CMC_HEAP_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -54,9 +75,9 @@ CMC_CMC_HEAP_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_HEAP_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_HEAP_CORE_STRUCT_(PFX, SNAME, V) \ \ /* Heap Structure */ \ struct SNAME \ @@ -84,7 +105,12 @@ \ /* Custom callback functions */ \ CMC_CALLBACKS_DECL; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_HEAP_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/intervalheap.h b/src/cmc/intervalheap.h index ac82682..4094108 100644 --- a/src/cmc/intervalheap.h +++ b/src/cmc/intervalheap.h @@ -28,11 +28,33 @@ /** * Core IntervalHeap implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_INTERVALHEAP_CORE(PARAMS) \ - CMC_CMC_INTERVALHEAP_CORE_HEADER(PARAMS) \ +#define CMC_CMC_INTERVALHEAP_CORE(ACCESS, FILE, PARAMS) \ + CMC_(CMC_(CMC_CMC_INTERVALHEAP_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_INTERVALHEAP_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_INTERVALHEAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_INTERVALHEAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_INTERVALHEAP_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_INTERVALHEAP_CORE_SOURCE(PARAMS) + +#define CMC_CMC_INTERVALHEAP_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_INTERVALHEAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_INTERVALHEAP_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_INTERVALHEAP_CORE_STRUCT(PARAMS) \ CMC_CMC_INTERVALHEAP_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_INTERVALHEAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_INTERVALHEAP_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_INTERVALHEAP_CORE_HEADER(PARAMS) \ CMC_CMC_INTERVALHEAP_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -40,9 +62,9 @@ CMC_CMC_INTERVALHEAP_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_INTERVALHEAP_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_INTERVALHEAP_CORE_STRUCT_(PFX, SNAME, V) \ \ /* IntervalHeap Structure */ \ struct SNAME \ @@ -71,7 +93,12 @@ \ /* Custom callback functions */ \ CMC_CALLBACKS_DECL; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_INTERVALHEAP_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/linkedlist.h b/src/cmc/linkedlist.h index af1f82c..88479a0 100644 --- a/src/cmc/linkedlist.h +++ b/src/cmc/linkedlist.h @@ -35,11 +35,33 @@ /** * Core LinkedList implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_LINKEDLIST_CORE(PARAMS) \ - CMC_CMC_LINKEDLIST_CORE_HEADER(PARAMS) \ +#define CMC_CMC_LINKEDLIST_CORE(ACCESS, FILE, PARAMS) \ + CMC_(CMC_(CMC_CMC_LINKEDLIST_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_LINKEDLIST_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_LINKEDLIST_CORE_STRUCT(PARAMS) \ + CMC_CMC_LINKEDLIST_CORE_HEADER(PARAMS) + +#define CMC_CMC_LINKEDLIST_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_LINKEDLIST_CORE_SOURCE(PARAMS) + +#define CMC_CMC_LINKEDLIST_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_LINKEDLIST_CORE_HEADER(PARAMS) + +#define CMC_CMC_LINKEDLIST_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_LINKEDLIST_CORE_STRUCT(PARAMS) \ CMC_CMC_LINKEDLIST_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_LINKEDLIST_CORE_STRUCT(PARAMS) \ + CMC_CMC_LINKEDLIST_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_LINKEDLIST_CORE_HEADER(PARAMS) \ CMC_CMC_LINKEDLIST_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -47,9 +69,9 @@ CMC_CMC_LINKEDLIST_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_LINKEDLIST_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_LINKEDLIST_CORE_STRUCT_(PFX, SNAME, V) \ \ /* Linked List Structure */ \ struct SNAME \ @@ -87,7 +109,12 @@ \ /* Pointer to the previous node on the linked list */ \ struct CMC_DEF_NODE(SNAME) * prev; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_LINKEDLIST_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/list.h b/src/cmc/list.h index 1e67123..c98fe87 100644 --- a/src/cmc/list.h +++ b/src/cmc/list.h @@ -50,11 +50,32 @@ /** * Core List implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_LIST_CORE(PARAMS) \ - CMC_CMC_LIST_CORE_HEADER(PARAMS) \ +#define CMC_CMC_LIST_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_LIST_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_LIST_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_LIST_CORE_STRUCT(PARAMS) \ + CMC_CMC_LIST_CORE_HEADER(PARAMS) + +#define CMC_CMC_LIST_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_LIST_CORE_SOURCE(PARAMS) + +#define CMC_CMC_LIST_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_LIST_CORE_HEADER(PARAMS) + +#define CMC_CMC_LIST_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_LIST_CORE_STRUCT(PARAMS) \ CMC_CMC_LIST_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_LIST_CORE_STRUCT(PARAMS) \ + CMC_CMC_LIST_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_LIST_CORE_HEADER(PARAMS) \ CMC_CMC_LIST_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -62,9 +83,9 @@ CMC_CMC_LIST_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_LIST_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_LIST_CORE_STRUCT_(PFX, SNAME, V) \ \ /* List Structure */ \ struct SNAME \ @@ -89,7 +110,12 @@ \ /* Custom callback functions */ \ CMC_CALLBACKS_DECL; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_LIST_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/queue.h b/src/cmc/queue.h index abbc466..3e47e99 100644 --- a/src/cmc/queue.h +++ b/src/cmc/queue.h @@ -50,11 +50,32 @@ /** * Core Queue implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_QUEUE_CORE(PARAMS) \ - CMC_CMC_QUEUE_CORE_HEADER(PARAMS) \ +#define CMC_CMC_QUEUE_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_QUEUE_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_QUEUE_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_QUEUE_CORE_STRUCT(PARAMS) \ + CMC_CMC_QUEUE_CORE_HEADER(PARAMS) + +#define CMC_CMC_QUEUE_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_QUEUE_CORE_SOURCE(PARAMS) + +#define CMC_CMC_QUEUE_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_QUEUE_CORE_HEADER(PARAMS) + +#define CMC_CMC_QUEUE_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_QUEUE_CORE_STRUCT(PARAMS) \ CMC_CMC_QUEUE_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_QUEUE_CORE_STRUCT(PARAMS) \ + CMC_CMC_QUEUE_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_QUEUE_CORE_HEADER(PARAMS) \ CMC_CMC_QUEUE_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -62,9 +83,9 @@ CMC_CMC_QUEUE_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_QUEUE_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_QUEUE_CORE_STRUCT_(PFX, SNAME, V) \ \ /* Queue Structure */ \ struct SNAME \ @@ -95,7 +116,12 @@ \ /* Custom callback functions */ \ CMC_CALLBACKS_DECL; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_QUEUE_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/sortedlist.h b/src/cmc/sortedlist.h index 34879ed..5f36f32 100644 --- a/src/cmc/sortedlist.h +++ b/src/cmc/sortedlist.h @@ -29,11 +29,33 @@ /** * Core SortedList implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_SORTEDLIST_CORE(PARAMS) \ - CMC_CMC_SORTEDLIST_CORE_HEADER(PARAMS) \ +#define CMC_CMC_SORTEDLIST_CORE(ACCESS, FILE, PARAMS) \ + CMC_(CMC_(CMC_CMC_SORTEDLIST_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_SORTEDLIST_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_SORTEDLIST_CORE_STRUCT(PARAMS) \ + CMC_CMC_SORTEDLIST_CORE_HEADER(PARAMS) + +#define CMC_CMC_SORTEDLIST_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_SORTEDLIST_CORE_SOURCE(PARAMS) + +#define CMC_CMC_SORTEDLIST_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_SORTEDLIST_CORE_HEADER(PARAMS) + +#define CMC_CMC_SORTEDLIST_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_SORTEDLIST_CORE_STRUCT(PARAMS) \ CMC_CMC_SORTEDLIST_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_SORTEDLIST_CORE_STRUCT(PARAMS) \ + CMC_CMC_SORTEDLIST_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_SORTEDLIST_CORE_HEADER(PARAMS) \ CMC_CMC_SORTEDLIST_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -41,9 +63,9 @@ CMC_CMC_SORTEDLIST_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_SORTEDLIST_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_SORTEDLIST_CORE_STRUCT_(PFX, SNAME, V) \ \ /* List Structure */ \ struct SNAME \ @@ -71,7 +93,12 @@ \ /* Custom callback functions */ \ CMC_CALLBACKS_DECL; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_SORTEDLIST_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/stack.h b/src/cmc/stack.h index 09a1bc4..a5e9527 100644 --- a/src/cmc/stack.h +++ b/src/cmc/stack.h @@ -35,11 +35,32 @@ /** * Core Stack implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_STACK_CORE(PARAMS) \ - CMC_CMC_STACK_CORE_HEADER(PARAMS) \ +#define CMC_CMC_STACK_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_STACK_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_STACK_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_STACK_CORE_STRUCT(PARAMS) \ + CMC_CMC_STACK_CORE_HEADER(PARAMS) + +#define CMC_CMC_STACK_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_STACK_CORE_SOURCE(PARAMS) + +#define CMC_CMC_STACK_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_STACK_CORE_HEADER(PARAMS) + +#define CMC_CMC_STACK_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_STACK_CORE_STRUCT(PARAMS) \ CMC_CMC_STACK_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_STACK_CORE_STRUCT(PARAMS) \ + CMC_CMC_STACK_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_STACK_CORE_HEADER(PARAMS) \ CMC_CMC_STACK_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -47,9 +68,9 @@ CMC_CMC_STACK_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_STACK_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_STACK_CORE_STRUCT_(PFX, SNAME, V) \ \ /* Stack Structure */ \ struct SNAME \ @@ -74,7 +95,12 @@ \ /* Custom callback functions */ \ CMC_CALLBACKS_DECL; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_STACK_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cmc/treemap.h b/src/cmc/treemap.h index 3464bd5..f3580bf 100644 --- a/src/cmc/treemap.h +++ b/src/cmc/treemap.h @@ -26,11 +26,34 @@ /** * Core TreeMap implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_TREEMAP_CORE(PARAMS) \ - CMC_CMC_TREEMAP_CORE_HEADER(PARAMS) \ +#define CMC_CMC_TREEMAP_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_TREEMAP_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_TREEMAP_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_TREEMAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_TREEMAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_TREEMAP_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_TREEMAP_CORE_SOURCE(PARAMS) + +#define CMC_CMC_TREEMAP_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + struct CMC_DEF_NODE(CMC_PARAM_SNAME(PARAMS)); \ + CMC_CMC_TREEMAP_CORE_HEADER(PARAMS) + +#define CMC_CMC_TREEMAP_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_TREEMAP_CORE_STRUCT(PARAMS) \ CMC_CMC_TREEMAP_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_TREEMAP_CORE_STRUCT(PARAMS) \ + CMC_CMC_TREEMAP_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_K(PARAMS), \ + CMC_PARAM_V(PARAMS)) + #define CMC_CMC_TREEMAP_CORE_HEADER(PARAMS) \ CMC_CMC_TREEMAP_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_K(PARAMS), \ CMC_PARAM_V(PARAMS)) @@ -40,9 +63,9 @@ CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_TREEMAP_CORE_HEADER_(PFX, SNAME, K, V) \ +#define CMC_CMC_TREEMAP_CORE_STRUCT_(PFX, SNAME, K, V) \ \ /* Treemap Structure */ \ struct SNAME \ @@ -89,7 +112,12 @@ \ /* Parent node */ \ struct CMC_DEF_NODE(SNAME) * parent; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_TREEMAP_CORE_HEADER_(PFX, SNAME, K, V) \ \ /* Key struct function table */ \ struct CMC_DEF_FKEY(SNAME) \ diff --git a/src/cmc/treeset.h b/src/cmc/treeset.h index 7219092..9b9ed6c 100644 --- a/src/cmc/treeset.h +++ b/src/cmc/treeset.h @@ -26,11 +26,32 @@ /** * Core TreeSet implementation + * + * \param ACCESS Either PUBLIC or PRIVATE + * \param FILE Either HEADER or SOURCE + * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V) */ -#define CMC_CMC_TREESET_CORE(PARAMS) \ - CMC_CMC_TREESET_CORE_HEADER(PARAMS) \ +#define CMC_CMC_TREESET_CORE(ACCESS, FILE, PARAMS) CMC_(CMC_(CMC_CMC_TREESET_CORE_, ACCESS), CMC_(_, FILE))(PARAMS) + +/* PRIVATE or PUBLIC solver */ +#define CMC_CMC_TREESET_CORE_PUBLIC_HEADER(PARAMS) \ + CMC_CMC_TREESET_CORE_STRUCT(PARAMS) \ + CMC_CMC_TREESET_CORE_HEADER(PARAMS) + +#define CMC_CMC_TREESET_CORE_PUBLIC_SOURCE(PARAMS) CMC_CMC_TREESET_CORE_SOURCE(PARAMS) + +#define CMC_CMC_TREESET_CORE_PRIVATE_HEADER(PARAMS) \ + struct CMC_PARAM_SNAME(PARAMS); \ + CMC_CMC_TREESET_CORE_HEADER(PARAMS) + +#define CMC_CMC_TREESET_CORE_PRIVATE_SOURCE(PARAMS) \ + CMC_CMC_TREESET_CORE_STRUCT(PARAMS) \ CMC_CMC_TREESET_CORE_SOURCE(PARAMS) +/* Lowest level API */ +#define CMC_CMC_TREESET_CORE_STRUCT(PARAMS) \ + CMC_CMC_TREESET_CORE_STRUCT_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) + #define CMC_CMC_TREESET_CORE_HEADER(PARAMS) \ CMC_CMC_TREESET_CORE_HEADER_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) @@ -38,9 +59,9 @@ CMC_CMC_TREESET_CORE_SOURCE_(CMC_PARAM_PFX(PARAMS), CMC_PARAM_SNAME(PARAMS), CMC_PARAM_V(PARAMS)) /* ------------------------------------------------------------------------- - * Header + * Struct * ------------------------------------------------------------------------- */ -#define CMC_CMC_TREESET_CORE_HEADER_(PFX, SNAME, V) \ +#define CMC_CMC_TREESET_CORE_STRUCT_(PFX, SNAME, V) \ \ /* Treeset Structure */ \ struct SNAME \ @@ -81,7 +102,12 @@ \ /* Parent node */ \ struct CMC_DEF_NODE(SNAME) * parent; \ - }; \ + }; + +/* ------------------------------------------------------------------------- + * Header + * ------------------------------------------------------------------------- */ +#define CMC_CMC_TREESET_CORE_HEADER_(PFX, SNAME, V) \ \ /* Value struct function table */ \ struct CMC_DEF_FVAL(SNAME) \ diff --git a/src/cor/core.h b/src/cor/core.h index dc0f400..430d35d 100644 --- a/src/cor/core.h +++ b/src/cor/core.h @@ -98,13 +98,4 @@ #define CMC_PARAM_K CMC_TUP_3 #define CMC_PARAM_V CMC_TUP_4 -/** - * Marks a function parameter used or unused depending on the expanded value of - * MACRO. It need to expand to either TRUE or FALSE. - */ -#define CMC_UNUSED_PARAM(MACRO, PARAM) CMC_(CMC_UNUSED_PARAM_, MACRO)(PARAM) - -#define CMC_UNUSED_PARAM_FALSE(PARAM) PARAM -#define CMC_UNUSED_PARAM_TRUE(PARAM) - #endif /* CMC_COR_CORE_H */ diff --git a/src/cor/flags.h b/src/cor/flags.h index e080a53..0a39e02 100644 --- a/src/cor/flags.h +++ b/src/cor/flags.h @@ -11,6 +11,8 @@ #ifndef CMC_COR_FLAGS_H #define CMC_COR_FLAGS_H +#include "core.h" + /** * enum cmc_flags * @@ -37,7 +39,7 @@ enum cmc_flags * * Maps the error codes to their character representation. */ -const char *cmc_flags_to_str[10] = { "OK", "ALLOC", "EMPTY", "NOT_FOUND", "INVALID", - "RANGE", "DUPLICATE", "ERROR", "THREAD", "MUTEX" }; +CMC_UNUSED static const char *cmc_flags_to_str[10] = { "OK", "ALLOC", "EMPTY", "NOT_FOUND", "INVALID", + "RANGE", "DUPLICATE", "ERROR", "THREAD", "MUTEX" }; #endif /* CMC_COR_FLAGS_H */ diff --git a/src/macro_collections.h b/src/macro_collections.h index a19ff94..b6d91c4 100644 --- a/src/macro_collections.h +++ b/src/macro_collections.h @@ -121,7 +121,7 @@ * \param PARTS A non-empty tuple of all desired EXT parts */ #define C_MACRO_COLLECTIONS_GEN_HEADER(LIB, COLLECTION, PARAMS, PARTS) \ - C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE, HEADER, PARAMS) \ + C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE_PUBLIC, HEADER, PARAMS) \ CMC_MAP(CMC_(EXT_, LIB), COLLECTION, HEADER, PARAMS, CMC_EVAL PARTS) /** @@ -135,7 +135,7 @@ * \param PARTS A non-empty tuple of all desired EXT parts */ #define C_MACRO_COLLECTIONS_GEN_SOURCE(LIB, COLLECTION, PARAMS, PARTS) \ - C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE, SOURCE, PARAMS) \ + C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE_PUBLIC, SOURCE, PARAMS) \ CMC_MAP(CMC_(EXT_, LIB), COLLECTION, SOURCE, PARAMS, CMC_EVAL PARTS) /** @@ -162,7 +162,7 @@ * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V */ #define C_MACRO_COLLECTIONS_ALL_HEADER(LIB, COLLECTION, PARAMS) \ - C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE, HEADER, PARAMS) \ + C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE_PUBLIC, HEADER, PARAMS) \ CMC_MAP(CMC_(EXT_, LIB), COLLECTION, HEADER, PARAMS, C_MACRO_COLLECTIONS_PARTS(LIB, COLLECTION)) /** @@ -175,7 +175,7 @@ * \param PARAMS A tuple of form (PFX, SNAME, SIZE, K, V */ #define C_MACRO_COLLECTIONS_ALL_SOURCE(LIB, COLLECTION, PARAMS) \ - C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE, SOURCE, PARAMS) \ + C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE_PUBLIC, SOURCE, PARAMS) \ CMC_MAP(CMC_(EXT_, LIB), COLLECTION, SOURCE, PARAMS, C_MACRO_COLLECTIONS_PARTS(LIB, COLLECTION)) /** diff --git a/tests/to_string.c b/tests/to_string.c index a4e91f7..df8b926 100644 --- a/tests/to_string.c +++ b/tests/to_string.c @@ -3,6 +3,7 @@ #include "macro_collections.h" // clang-format off +C_MACRO_COLLECTIONS_ALL(CMC, BITSET, ( bs, bitset, , , )) C_MACRO_COLLECTIONS_ALL(CMC, DEQUE, ( d, deque, , , int)) C_MACRO_COLLECTIONS_ALL(CMC, HASHBIDIMAP, (hbm, hashbidimap, , int, int)) C_MACRO_COLLECTIONS_ALL(CMC, HASHMAP, ( hm, hashmap, , int, int))