#include #include "m-array.h" #include "m-algo.h" /* Define a dynamic array of int */ ARRAY_DEF(vector_int, int) /* Register the oplist of this dynamic array globally (using implicitely M_BASIC_OPLIST) */ #define M_OPL_vector_int_t() ARRAY_OPLIST(vector_int) /* Define some standards algorithms on this dynamic array. We can reuse the prefix of the dynamic array */ ALGO_DEF(vector_int, vector_int_t) /* Define a dynamic array of bool */ ARRAY_DEF(vector_bool, bool) /* Register the oplist of this dynamic array globally */ #define M_OPL_vector_bool_t() ARRAY_OPLIST(vector_bool, M_BOOL_OPLIST) /* Define some standards algorithms on this dynamic array. We can reuse the prefix of the dynamic array */ ALGO_DEF(vector_bool, vector_bool_t) /* ID function */ static bool id(bool x) { return x ; } int main(void) { // Define, init (& later clear) myvector & tmp as vector_int_t M_LET(myvector, tmp, vector_int_t) { // Fill myvector with 3 int equal to 20 vector_int_fill_n(myvector, 3, 20); // Fill tmp with 3 int equal to 33 vector_int_fill_n(tmp, 3, 33); // Append all tmp in myvector vector_int_splice(myvector, tmp); // Fill tmp with 2 int equal to 10 vector_int_fill_n(tmp, 2, 10); // Append all tmp in myvector vector_int_splice(myvector, tmp); // Display the result printf("myvector contains:"); // In C11, the for loop can be simplified as : #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) ALGO_FOR_EACH(myvector, vector_int_t, M_PRINT, " "); #else for M_EACH(it, myvector, vector_int_t) { printf(" %d", *it); } #endif printf("\n"); } /* End of M_LET: myvector & tmp are automaticly cleared */ // Same thing but with booleans M_LET(myvector, tmp, vector_bool_t) { vector_bool_fill_n(myvector, 3, false); vector_bool_fill_n(tmp, 3, true); vector_bool_splice(myvector, tmp); vector_bool_fill_n(tmp, 2, false); vector_bool_splice(myvector, tmp); printf("myvector contains:"); for M_EACH(it, myvector, vector_bool_t) { printf(" %d", (int)*it); } printf("\n"); printf ("ALL: %d ANY: %d NONE: %d\n", vector_bool_all_of_p(myvector, id), vector_bool_any_of_p(myvector, id), vector_bool_none_of_p(myvector, id) ); } /* End of M_LET: myvector & tmp are automaticly cleared */ return 0; }