diff --git a/buffer.c b/buffer.c index 6fa2f64..8750210 100644 --- a/buffer.c +++ b/buffer.c @@ -22,10 +22,21 @@ void destroy_buffer(buffer* buff) free(buff); } -// #todo -buffer* split_buffer(buffer* original, int pieces) +buffer** split_buffer(buffer* original, int pieces) { - return NULL; + int size = original->capacity; + if (size <= 0) { + return NULL; + } + buffer** out = malloc(sizeof(buffer) * pieces); + for (int i = 0; i < pieces; i++) { + out[i]->length = 0; + out[i]->capacity = size; + out[i]->original = 0; + out[i]->location = original->location; + out[i]->location += i * size * sizeof(record); + } + return out; } int read_buffer(buffer* buff, FILE* in) diff --git a/buffer.h b/buffer.h index e6e3378..1b1b407 100644 --- a/buffer.h +++ b/buffer.h @@ -9,10 +9,9 @@ typedef struct { bool original; } buffer; -// #todo switch to returning a pointer, and write destroy_buffer method buffer* create_buffer(int capacity); void destroy_buffer(buffer* buff); -buffer* split_buffer(buffer* original, int pieces); +buffer** split_buffer(buffer* original, int pieces); int read_buffer(buffer* buff, FILE* in); int write_buffer(buffer* buff, FILE* in);