78 lines
1.9 KiB
C
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;
|
|
}
|