Files
2024-12-16 02:48:28 +01:00

78 lines
1.9 KiB
C

#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;
}