#include "type_boolarray.h" barray *create_barray(const uint size) { barray *b = malloc(sizeof(barray)); if (b == NULL) { fprintf(stderr, "Erreur d'allocation de mémoire\n"); exit(EXIT_FAILURE); } b->size = size; if (size % 8 == 0) { b->size_array = size / 8; } else { b->size_array = size / 8 + 1; } b->array = calloc(b->size_array, sizeof(uchar)); if (b->array == NULL) { fprintf(stderr, "Erreur d'allocation de mémoire\n"); exit(EXIT_FAILURE); } return b; } uint getsize_barray(barray *thearray) { return thearray->size; } void delete_barray(barray *thearray) { free(thearray->array); free(thearray); } void settrue_barray(barray *thearray, const uint thecell) { thearray->array[thecell / 8] |= (1 << thecell % 8); } void setfalse_barray(barray *thearray, const uint thecell) { thearray->array[thecell / 8] &= ~(1 << thecell % 8); } bool getval_barray(barray *thearray, const uint thecell) { return thearray->array[thecell / 8] & (1 << thecell % 8); } void print_array(barray *ptr) { for (uint i = 0; i < getsize_barray(ptr); i++) { printf("%d ", getval_barray(ptr, i)); } printf("\n"); } barray *or_barray(barray *array1, barray *array2) { if (array1->size != array2->size) { return NULL; } barray *b = create_barray(array1->size); for (uint i = 0; i < b->size_array; i++) { b->array[i] = array1->array[i] | array2->array[i]; } return b; } barray *and_barray(barray *array1, barray *array2) { if (array1->size != array2->size) { return NULL; } barray *b = create_barray(array1->size); for (uint i = 0; i < b->size_array; i++) { b->array[i] = array1->array[i] & array2->array[i]; } return b; } barray *copy_barray(barray *thearray) { barray *b = create_barray(thearray->size); for (uint i = 0; i < b->size_array; i++) { b->array[i] = thearray->array[i]; } return b; }