changement dossier
This commit is contained in:
77
Aloyse et Vincent/type_boolarray.c
Normal file
77
Aloyse et Vincent/type_boolarray.c
Normal file
@@ -0,0 +1,77 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user