~obeancomputer/bitter

357dfb22dee9936894d3cee8ecf8456446451e4c — ocsmit 1 year, 2 months ago 92eef53
Add IO to save to disk
3 files changed, 57 insertions(+), 0 deletions(-)

A src/bitarr_io.c
A src/bitarr_io.h
M src/tests.c
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,},