A src/bitarr_io.c => src/bitarr_io.c +34 -0
@@ 0,0 1,34 @@
+#include "bitarr_io.h"
+#include "bitarr.h"
+#include <stdio.h>
+#include <stdint.h>
+
+
+// TODO: Documentation
+void BitArray_save(BitArray* bitarr, FILE *fp)
+{
+ fwrite(&bitarr->l, sizeof(uint8_t), 1, fp);
+ fwrite(&bitarr->width, sizeof(uint8_t), 1, fp);
+ fwrite(&bitarr->n, sizeof(uint32_t), 1, fp);
+
+ unsigned int n_entries = 1 + (((bitarr->l * bitarr->n) - 1) / WORD_SIZE);
+ printf("%u\n", n_entries);
+ for (int i = 0; i < n_entries; ++i) {
+ printf("%u\n", bitarr->v[i]);
+ fwrite(&(bitarr->v[i]), sizeof(unsigned int), 1, fp);
+ }
+}
+
+BitArray* BitArray_open(FILE *fp)
+{
+ uint8_t l, width;
+ uint32_t n;
+
+ fread(&l, sizeof(uint8_t), 1, fp);
+ fread(&width, sizeof(uint8_t), 1, fp);
+ fread(&n, sizeof(uint32_t), 1, fp);
+
+ BitArray* bitarr = BitArray_calloc(n, l);
+ fread(&(bitarr->v), WORD_SIZE, 1, fp);
+ return bitarr;
+}
A src/bitarr_io.h => src/bitarr_io.h +11 -0
@@ 0,0 1,11 @@
+#ifndef BITARR_IO_H_
+#define BITARR_IO_H_
+
+#include "bitarr.h"
+
+
+// TODO: Documentation
+BitArray* BitArray_open(FILE *fp);
+void BitArray_save(BitArray* bitarr, FILE *fp);
+
+#endif // BITARR_IO_H_
M src/tests.c => src/tests.c +12 -0
@@ 3,6 3,7 @@
#include <stdio.h>
#include "bitarr.h"
#include "bitops.h"
+#include "bitarr_io.h"
@@ 95,11 96,22 @@ TEST("bits read range") {
}
+// TODO: Add testing for I/O
+FILE *fp = fopen("test.bin", "wb");
+BitArray_save(bit_arr, fp);
+fclose(fp);
+
+fp = fopen("test.bin", "rb");
+BitArray* bit_arr_read = BitArray_open(fp);
+fclose(fp);
+
+printf("%u\n", BitArray_read(bit_arr_read, 6));
BitArray_free(bit_arr);
+
TEST("tree") {
// int matrix[16][16] = {
// {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,},