Compare commits

..

2 Commits

Author SHA1 Message Date
59951fb602 Extract common macros to a header 2023-12-30 20:08:17 +00:00
dfb19d4a1a Update README.md 2023-12-30 20:07:59 +00:00
4 changed files with 13 additions and 12 deletions

View File

@ -1,14 +1,9 @@
#include "../aliases.h" #include "../aliases.h"
#include "../helper_macros.h"
#include <stdio.h> #include <stdio.h>
#include <math.h> #include <math.h>
#define obj(o, m) o.m
#define stringify(x) #x
#define printf_spec(PI) stringify(PI) #define printf_spec(PI) stringify(PI)
#define typename_concat(C, I) vec##C##I##_t
#define typename(C, I) typename_concat(C, I)
#define funcname_concat(B, C, I) vec_##B##_vec##C##I##_t
#define funcname(B, C, I) funcname_concat(B, C, I)
typedef struct { typedef struct {
T x; T x;

View File

@ -1,14 +1,10 @@
#include "../aliases.h" #include "../aliases.h"
#include "../helper_macros.h"
#include <stdio.h> #include <stdio.h>
#include <math.h> #include <math.h>
#define obj(o, m) o.m #define obj(o, m) o.m
#define stringify(x) #x
#define printf_spec(PI) "%" stringify(PI) ", " #define printf_spec(PI) "%" stringify(PI) ", "
#define typename_concat(C, I) vec##C##I##_t
#define typename(C, I) typename_concat(C, I)
#define funcname_concat(B, C, I) vec_##B##_vec##C##I##_t
#define funcname(B, C, I) funcname_concat(B, C, I)
typedef struct { typedef struct {
#define VEC(type, name) type name; #define VEC(type, name) type name;

View File

@ -6,7 +6,7 @@ Exploring different ideas for implementing generics in C.
[02_macros](./02_macros) is an implementation that uses simple macros to define 2D and 3D vectors for different data types. [02_macros](./02_macros) is an implementation that uses simple macros to define 2D and 3D vectors for different data types.
[03_xmacros](./03_xmacros) is an implementation that relies on X macros to allow for defining any N-dimensional vector for different data types. In this case, it is only 2D and 3D vectors, but it can be easily expanded to other dimensions. [03_xmacros](./03_xmacros) is an implementation that relies on X macros to allow for defining any N-dimensional vector for different data types. In this case, only 2D and 3D vectors were defined, but it can be easily expanded to other dimensions.
## General assessment of the different techniques ## General assessment of the different techniques

10
helper_macros.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef HELPER_MACROS_H
#define HELPER_MACROS_H
#define stringify(x) #x
#define typename_concat(C, I) vec##C##I##_t
#define typename(C, I) typename_concat(C, I)
#define funcname_concat(B, C, I) vec_##B##_vec##C##I##_t
#define funcname(B, C, I) funcname_concat(B, C, I)
#endif // !HELPER_MACROS_H