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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| #include <string.h>
typedef struct s_generator {
int tab_values[4];
size_t nb_values;
size_t current_value;
} t_generator;
void generator_add(t_generator* generator, int new_value) {
if ((generator != NULL) && (generator->nb_values < 4)) {
generator->tab_values[generator->nb_values] = new_value;
++generator->nb_values;
}
}
void generator_init(t_generator* generator) {
if (generator != NULL) {
generator->nb_values = 0;
generator->current_value = 0;
memset(generator->tab_values, 0, (4 * sizeof(int)));
}
}
unsigned char generator_get_nb_values(t_generator* generator, size_t* nb_values) {
unsigned char ret;
if ((generator != NULL) && (nb_values != NULL)) {
(*nb_values) = generator->nb_values;
ret = 1;
} else {
ret = 0;
}
return ret;
}
void generator_reset(t_generator* generator) {
if (generator != NULL) {
generator->current_value = 0;
}
}
unsigned char generator_yield(t_generator* generator, int* value) {
unsigned char ret;
if ((generator != NULL) && (value != NULL)) {
generator->current_value = ((generator->current_value + 1) % 4);
(*value) = generator->tab_values[generator->current_value];
ret = 1;
} else {
ret = 0;
}
return ret;
}
int main(int argc, char** argv)
{
t_generator generator;
size_t i, nb_values;
int value;
generator_init(&generator);
generator_add(&generator, 1);
generator_add(&generator, 5);
generator_add(&generator, 6);
generator_add(&generator, 22);
if ( generator_get_nb_values(&generator, &nb_values) ) {
nb_values *= 2;
printf("generator_get_nb_values, nb values : %lu\n", nb_values);
for(i=0; i < nb_values; ++i) {
if ( generator_yield(&generator, &value) ) {
printf("%02lu : %02d\n", (i + 1), value);
} else {
printf("%02lu : error - generator_yield\n", (i + 1));
}
}
} else {
printf("main - error : generator_get_nb_values");
}
return EXIT_SUCCESS;
} |
Partager