replace uint32_t by size_t and rename *_areTheSame() function into *_areIdentical()
[cvector.git] / src / vector_declaration.h
blob54487fed946c13e639464731aa9fc55ed3d5ad26
1 #ifndef VECTOR_DECLARATION_H_
2 #define VECTOR_DECLARATION_H_
4 #include <stddef.h>
5 #include <stdbool.h>
8 #define DEFINE_VECTOR_TYPE(p_typename, p_ctype) \
9 typedef struct p_typename##Vector_s { \
10 size_t logicalSize; \
11 size_t memorySize; \
12 p_ctype* data; \
13 } p_typename##Vector_t;
15 #define DEFINE_VECTOR_ELEM_EQUAL_FUNCTION_SIGNATURE(p_typename, p_ctype) \
16 typedef bool (*p_typename##EqualFunction_t)(p_ctype, p_ctype);
18 #define VECTOR_CREATE_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
19 p_typename##Vector_t p_typename##Vector_create(const size_t size)
21 #define VECTOR_FREE_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
22 void p_typename##Vector_free(p_typename##Vector_t* const vec)
24 #define VECTOR_GET_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
25 p_ctype p_typename##Vector_get(const p_typename##Vector_t vec, const size_t index)
27 #define VECTOR_SET_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
28 void p_typename##Vector_set(const p_typename##Vector_t vec, const size_t index, p_ctype const val)
30 #define VECTOR_PUSHBACK_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
31 void p_typename##Vector_pushBack(p_typename##Vector_t* const vec, p_ctype const val)
33 #define VECTOR_PRINT_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
34 void p_typename##Vector_print(const p_typename##Vector_t vec, char const* const element_format, char const* const separator)
36 #define VECTOR_FRONT_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
37 p_ctype p_typename##Vector_front(const p_typename##Vector_t vec)
39 #define VECTOR_BACK_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
40 p_ctype p_typename##Vector_back(const p_typename##Vector_t vec)
42 #define VECTOR_DATA_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
43 p_ctype* p_typename##Vector_data(const p_typename##Vector_t vec)
45 #define VECTOR_EMPTY_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
46 bool p_typename##Vector_empty(const p_typename##Vector_t vec)
48 #define VECTOR_SIZE_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
49 size_t p_typename##Vector_size(const p_typename##Vector_t vec)
51 #define VECTOR_MAXSIZE_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
52 size_t p_typename##Vector_maxSize(const p_typename##Vector_t vec)
54 #define VECTOR_SHRINKTOFIT_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
55 void p_typename##Vector_shrinkToFit(p_typename##Vector_t* const vec)
57 #define VECTOR_CLEAR_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
58 void p_typename##Vector_clear(p_typename##Vector_t* const vec)
60 #define VECTOR_INSERT_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
61 void p_typename##Vector_insert(p_typename##Vector_t* const vec, const size_t pos, p_ctype const elem)
63 #define VECTOR_ERASE_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
64 void p_typename##Vector_erase(p_typename##Vector_t* const vec, const size_t pos)
66 #define VECTOR_POPBACK_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
67 p_ctype p_typename##Vector_popBack(p_typename##Vector_t* const vec)
69 #define VECTOR_SWAP_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
70 void p_typename##Vector_swap(p_typename##Vector_t* const vec1, p_typename##Vector_t* const vec2)
72 #define VECTOR_INSERTVECTOR_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
73 void p_typename##Vector_insertVector(p_typename##Vector_t* const vec, const size_t pos, const p_typename##Vector_t insVec)
75 #define VECTOR_INSERTARRAY_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
76 void p_typename##Vector_insertArray(p_typename##Vector_t* const vec, const size_t pos, p_ctype const* const array, const size_t arraySize)
78 #define VECTOR_PUSHBACKARRAY_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
79 void p_typename##Vector_pushBackArray(p_typename##Vector_t* const vec, p_ctype const* const array, const size_t arraySize)
81 #define VECTOR_PUSHBACKVECTOR_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
82 void p_typename##Vector_pushBackVector(p_typename##Vector_t* const vec, const p_typename##Vector_t pushVec)
84 #define VECTOR_COPY_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
85 p_typename##Vector_t p_typename##Vector_copy(const p_typename##Vector_t vec)
87 #define VECTOR_AREIDENTICAL_FUNCTION_PROTOTYPE(p_typename, p_ctype) \
88 bool p_typename##Vector_areIdentical(const p_typename##Vector_t vec1, const p_typename##Vector_t vec2, const p_typename##EqualFunction_t equal)
90 #define DECLARE_VECTOR(p_typename, p_ctype) \
91 DEFINE_VECTOR_TYPE(p_typename, p_ctype) \
92 DEFINE_VECTOR_ELEM_EQUAL_FUNCTION_SIGNATURE(p_typename, p_ctype) \
93 VECTOR_CREATE_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
94 VECTOR_FREE_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
95 VECTOR_GET_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
96 VECTOR_SET_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
97 VECTOR_PUSHBACK_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
98 VECTOR_PRINT_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
99 VECTOR_FRONT_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
100 VECTOR_BACK_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
101 VECTOR_DATA_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
102 VECTOR_EMPTY_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
103 VECTOR_SIZE_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
104 VECTOR_MAXSIZE_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
105 VECTOR_SHRINKTOFIT_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
106 VECTOR_CLEAR_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
107 VECTOR_INSERT_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
108 VECTOR_ERASE_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
109 VECTOR_POPBACK_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
110 VECTOR_SWAP_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
111 VECTOR_INSERTVECTOR_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
112 VECTOR_INSERTARRAY_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
113 VECTOR_PUSHBACKARRAY_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
114 VECTOR_PUSHBACKVECTOR_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
115 VECTOR_COPY_FUNCTION_PROTOTYPE(p_typename, p_ctype); \
116 VECTOR_AREIDENTICAL_FUNCTION_PROTOTYPE(p_typename, p_ctype);
118 #endif // VECTOR_DECLARATION_H_