nns.c  1.0.1
Nanowire Network simulator
tensors.h
Go to the documentation of this file.
1 
7 #ifndef TENSORS_H
8 #define TENSORS_H
9 
10 #include <stdbool.h>
11 #include <stdlib.h>
12 
19 #define vector(TYPE, MACRO_LENGTH) \
20  ({ \
21  TYPE* VECTOR_RESULT = (TYPE*)malloc((MACRO_LENGTH) * sizeof(TYPE)); \
22  if (VECTOR_RESULT == NULL) \
23  { \
24  exit(EXIT_FAILURE); \
25  } \
26  VECTOR_RESULT; \
27  })
28 
35 #define zeros_vector(TYPE, MACRO_LENGTH) \
36  ({ \
37  TYPE* VECTOR_RESULT = (TYPE*)calloc((MACRO_LENGTH), sizeof(TYPE)); \
38  if (VECTOR_RESULT == NULL) \
39  { \
40  exit(EXIT_FAILURE); \
41  } \
42  VECTOR_RESULT; \
43  })
44 
54 #define matrix(TYPE, MACRO_WIDTH, MACRO_HEIGHT) \
55  ({ \
56  TYPE** MATRIX_RESULT = vector(TYPE*, (MACRO_WIDTH)); \
57  for (int MACRO_i = 0; MACRO_i < (MACRO_WIDTH); MACRO_i++) \
58  { \
59  MATRIX_RESULT[MACRO_i] = vector(TYPE, (MACRO_HEIGHT)); \
60  } \
61  MATRIX_RESULT; \
62  })
63 
73 #define zeros_matrix(TYPE, MACRO_WIDTH, MACRO_HEIGHT) \
74  ({ \
75  TYPE** MATRIX_RESULT = zeros_vector(TYPE*, (MACRO_WIDTH)); \
76  for (int MACRO_i = 0; MACRO_i < (MACRO_WIDTH); MACRO_i++) \
77  { \
78  MATRIX_RESULT[MACRO_i] = zeros_vector(TYPE, (MACRO_HEIGHT)); \
79  } \
80  MATRIX_RESULT; \
81  })
82 
88 #define free_matrix(MATRIX, MACRO_WIDTH) \
89  ({ \
90  for (int MACRO_i = 0; MACRO_i < (MACRO_WIDTH); MACRO_i++) \
91  { \
92  free(MATRIX[MACRO_i]); \
93  } \
94  free(MATRIX); \
95  })
96 
97 #endif /* TENSORS_H */