Fast forward changes on new way to generate macros
This commit is contained in:
1 parent
720e55bfcc
commit
85bef64551
5 files changed
+120
-53
No files matched your search
+31
-26
@@ -60,25 +60,8 @@
|
||||
#define CMC_DEF_FKEY(SNAME) CMC_(SNAME, CMC_INTERNAL_PREFIX_FKEY)
|
||||
|
||||
/**
|
||||
* A PARAM is a unified way to pass arguments to all macros that generate code.
|
||||
* It is a tuple that contains the following parameters in order:
|
||||
*
|
||||
* PFX - Functions prefix
|
||||
* SNAME - `struct` name
|
||||
* SIZE - Size for SAC library
|
||||
* K - Key type
|
||||
* V - Value type
|
||||
*
|
||||
* PARAM := (PFX, SNAME, SIZE, K, V)
|
||||
* Code to get specific arguments from tuples.
|
||||
*/
|
||||
|
||||
// clang-format off
|
||||
/*
|
||||
for i in range(5):
|
||||
print(f"#define CMC_TUP_{i}_({', '.join(chr(x) for x in range(65, 65 + i + 1))}, ...) {chr(65 + i)}\n#define CMC_TUP_{i}(TUP) CMC_TUP_{i}_ TUP")
|
||||
*/
|
||||
// clang-format on
|
||||
|
||||
#define CMC_TUP_0_(A, ...) A
|
||||
#define CMC_TUP_0(TUP) CMC_TUP_0_ TUP
|
||||
#define CMC_TUP_1_(A, B, ...) B
|
||||
@@ -90,6 +73,18 @@ for i in range(5):
|
||||
#define CMC_TUP_4_(A, B, C, D, E, ...) E
|
||||
#define CMC_TUP_4(TUP) CMC_TUP_4_ TUP
|
||||
|
||||
/**
|
||||
* A PARAM is a unified way to pass arguments to all macros that generate code.
|
||||
* It is a tuple that contains the following parameters in order:
|
||||
*
|
||||
* PFX - Functions prefix
|
||||
* SNAME - `struct` name
|
||||
* SIZE - Size for SAC library
|
||||
* K - Key type
|
||||
* V - Value type
|
||||
*
|
||||
* PARAM := (PFX, SNAME, SIZE, K, V)
|
||||
*/
|
||||
#define CMC_PARAM_PFX CMC_TUP_0
|
||||
#define CMC_PARAM_SNAME CMC_TUP_1
|
||||
#define CMC_PARAM_SIZE CMC_TUP_2
|
||||
@@ -97,15 +92,25 @@ for i in range(5):
|
||||
#define CMC_PARAM_V CMC_TUP_4
|
||||
|
||||
/**
|
||||
* struct cmc_string
|
||||
* A __VA_ARGS__ argument counter. This argument counter is slightly shifted:
|
||||
*
|
||||
* Used by all collections when calling the to_string function.
|
||||
* CMC_NARG(HELLO) -> 0
|
||||
* CMC_NARG(HELLO,) -> 1
|
||||
* CMC_NARG(HELLO, WORLD,) -> 2
|
||||
*/
|
||||
struct cmc_string
|
||||
{
|
||||
char s[400];
|
||||
};
|
||||
|
||||
static const size_t cmc_string_len = 400;
|
||||
#define CMC_NARG(...) CMC_NARG_(__VA_ARGS__, CMC_SEQ_N())
|
||||
#define CMC_NARG_(...) CMC_ARG_N(__VA_ARGS__)
|
||||
#define CMC_ARG_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, \
|
||||
_14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, \
|
||||
_26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, \
|
||||
_38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, \
|
||||
_50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, \
|
||||
_62, _63, N, ...) \
|
||||
N
|
||||
#define CMC_SEQ_N() \
|
||||
63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, \
|
||||
45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, \
|
||||
28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, \
|
||||
11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
|
||||
|
||||
#endif /* CMC_COR_CORE_H */
|
||||
+4
-2
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* deque.h
|
||||
*
|
||||
* Creation Date: 25/05/2019
|
||||
* Creation Date: 25/05/2020
|
||||
*
|
||||
* Authors:
|
||||
* Leonardo Vencovsky (https://github.com/LeoVen)
|
||||
@@ -17,7 +17,9 @@
|
||||
#ifndef CMC_EXT_CMC_DEQUE_H
|
||||
#define CMC_EXT_CMC_DEQUE_H
|
||||
|
||||
#include "../../cor/params.h"
|
||||
#include "../../cor/core.h"
|
||||
|
||||
#define CMC_EXT_CMC_DEQUE_PARTS INIT,
|
||||
|
||||
/**
|
||||
* INIT
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* hashbidimap.h
|
||||
*
|
||||
* Creation Date: 26/05/2020
|
||||
*
|
||||
* Authors:
|
||||
* Leonardo Vencovsky (https://github.com/LeoVen)
|
||||
*
|
||||
*/
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* hashmap.h
|
||||
*
|
||||
* Creation Date: 25/05/2019
|
||||
* Creation Date: 25/05/2020
|
||||
*
|
||||
* Authors:
|
||||
* Leonardo Vencovsky (https://github.com/LeoVen)
|
||||
@@ -17,7 +17,9 @@
|
||||
#ifndef CMC_EXT_CMC_HASHMAP_H
|
||||
#define CMC_EXT_CMC_HASHMAP_H
|
||||
|
||||
#include "../../cor/params.h"
|
||||
#include "../../cor/core.h"
|
||||
|
||||
#define CMC_EXT_CMC_HASHMAP_PARTS INIT, ITER
|
||||
|
||||
/**
|
||||
* INIT
|
||||
|
||||
+72
-23
@@ -11,25 +11,6 @@
|
||||
#ifndef CMC_MACRO_COLLECTIONS_H
|
||||
#define CMC_MACRO_COLLECTIONS_H
|
||||
|
||||
#define CMC_CONCAT_(C, T) CMC_WRAPGEN_##C##_##T
|
||||
|
||||
#define CMC_CONCAT(C, T) CMC_CONCAT_(C, T)
|
||||
|
||||
#define CMC_COLLECTION_GENERATE(C, PFX, SNAME, K, V) \
|
||||
CMC_COLLECTION_GENERATE_HEADER(C, PFX, SNAME, K, V) \
|
||||
CMC_COLLECTION_GENERATE_SOURCE(C, PFX, SNAME, K, V)
|
||||
|
||||
#define CMC_COLLECTION_GENERATE_HEADER(C, PFX, SNAME, K, V) \
|
||||
CMC_CONCAT(C, HEADER)(PFX, SNAME, K, V)
|
||||
|
||||
#define CMC_COLLECTION_GENERATE_SOURCE(C, PFX, SNAME, K, V) \
|
||||
CMC_CONCAT(C, SOURCE)(PFX, SNAME, K, V)
|
||||
|
||||
#include "cor/bitset.h" /* Added in 20/05/2020 */
|
||||
#include "cor/core.h" /* Added in 17/03/2020 */
|
||||
#include "cor/flags.h" /* Added in 14/05/2020 */
|
||||
#include "cor/hashtable.h" /* Added in 17/03/2020 */
|
||||
|
||||
#include "cmc/bitset.h" /* Added in 30/04/2020 */
|
||||
#include "cmc/deque.h" /* Added in 20/03/2019 */
|
||||
#include "cmc/hashbidimap.h" /* Added in 26/09/2019 */
|
||||
@@ -46,10 +27,13 @@
|
||||
#include "cmc/stack.h" /* Added in 14/02/2019 */
|
||||
#include "cmc/treemap.h" /* Added in 28/03/2019 */
|
||||
#include "cmc/treeset.h" /* Added in 27/03/2019 */
|
||||
|
||||
#include "sac/queue.h"
|
||||
#include "sac/stack.h"
|
||||
|
||||
#include "cor/alloc.h" /* Added in 24/05/2020 */
|
||||
#include "cor/bitset.h" /* Added in 20/05/2020 */
|
||||
#include "cor/callbacks.h" /* Added in 24/05/2020 */
|
||||
#include "cor/core.h" /* Added in 17/03/2020 */
|
||||
#include "cor/flags.h" /* Added in 14/05/2020 */
|
||||
#include "cor/hashtable.h" /* Added in 17/03/2020 */
|
||||
#include "ext/cmc/deque.h" /* Added in 25/05/2020 */
|
||||
#include "utl/assert.h" /* Added in 27/06/2019 */
|
||||
#include "utl/foreach.h" /* Added in 25/02/2019 */
|
||||
#include "utl/futils.h" /* Added in 15/04/2020 */
|
||||
@@ -59,4 +43,69 @@
|
||||
#include "utl/thread.h" /* Added in 14/05/2020 */
|
||||
#include "utl/timer.h" /* Added in 12/04/2019 */
|
||||
|
||||
/**
|
||||
* Generate a specific part of a collection
|
||||
*/
|
||||
#define C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
C_MACRO_COLLECTIONS_(LIB, COLLECTION, PART, FILE)(PARAMS)
|
||||
#define C_MACRO_COLLECTIONS_(LIB, COLLECTION, PART, FILE) \
|
||||
CMC_##LIB##_##COLLECTION##_##PART##_##FILE
|
||||
|
||||
/**
|
||||
* Generate everything provided by a collection included in ext
|
||||
*/
|
||||
#define C_MACRO_COLLECTIONS_ALL(LIB, COLLECTION, PARAMS) \
|
||||
C_MACRO_COLLECTIONS_ALL_HEADER(LIB, COLLECTION, PARAMS) \
|
||||
C_MACRO_COLLECTIONS_ALL_SOURCE(LIB, COLLECTION, PARAMS)
|
||||
|
||||
#define C_MACRO_COLLECTIONS_ALL_HEADER(LIB, COLLECTION, PARAMS) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE, HEADER, PARAMS) \
|
||||
CMC_MAP(CMC_(EXT_, LIB), COLLECTION, HEADER, PARAMS, \
|
||||
C_MACRO_COLLECTIONS_PARTS(LIB, COLLECTION))
|
||||
|
||||
#define C_MACRO_COLLECTIONS_ALL_SOURCE(LIB, COLLECTION, PARAMS) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, CORE, SOURCE, PARAMS) \
|
||||
CMC_MAP(CMC_(EXT_, LIB), COLLECTION, SOURCE, PARAMS, \
|
||||
C_MACRO_COLLECTIONS_PARTS(LIB, COLLECTION))
|
||||
|
||||
/* Gets the macro with all EXT parts of a collection */
|
||||
#define C_MACRO_COLLECTIONS_PARTS(LIB, COLLECTION) \
|
||||
CMC_EXT_##LIB##_##COLLECTION##_PARTS
|
||||
|
||||
#define CMC_MAP(LIB, COLLECTION, FILE, PARAMS, ...) \
|
||||
CMC_(CMC_MAP_, CMC_NARG(__VA_ARGS__)) \
|
||||
(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
|
||||
#define CMC_MAP_0(LIB, COLLECTION, FILE, PARAMS, PART, ...)
|
||||
#define CMC_MAP_1(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_0(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_2(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_1(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_3(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_2(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_4(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_3(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_5(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_4(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_6(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_5(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_7(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_6(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_8(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_7(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_9(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_8(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
#define CMC_MAP_10(LIB, COLLECTION, FILE, PARAMS, PART, ...) \
|
||||
C_MACRO_COLLECTIONS(LIB, COLLECTION, PART, FILE, PARAMS) \
|
||||
CMC_MAP_9(LIB, COLLECTION, FILE, PARAMS, __VA_ARGS__)
|
||||
|
||||
#endif /* CMC_MACRO_COLLECTIONS_H */
|
||||
Reference in new issue
Block a user