From 3517730952259112a37d6d97fd8647f11d452337 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Sat, 29 May 2004 06:42:45 +0000 Subject: [PATCH] bufford andando. --- emufs/external_sort/bufford.c | 17 ++++++++++++++++- emufs/external_sort/bufford.h | 13 +++++++++++-- emufs/external_sort/bufford.txt | 13 +++++++++++++ emufs/external_sort/bufford_test.c | 12 +----------- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/emufs/external_sort/bufford.c b/emufs/external_sort/bufford.c index 4f7135c..0ea8f88 100644 --- a/emufs/external_sort/bufford.c +++ b/emufs/external_sort/bufford.c @@ -144,7 +144,22 @@ BUFFORD* bufford_new(size_t size, size_t reg_size, CMP_FUNC cmp) b->cmp = cmp; b->size = 0; b->root = 0; - b->max_size = size / reg_size; + b->max_size = size; + b->reg_size = reg_size; + return b; +} + +BUFFORD* bufford_new_bytes_size(size_t size, size_t reg_size, CMP_FUNC cmp) +{ + BUFFORD* b = malloc(sizeof(BUFFORD)); + if (!b) return 0; + assert(cmp); + assert(reg_size > 0); + assert(size > reg_size); + b->cmp = cmp; + b->size = 0; + b->root = 0; + b->max_size = size / (reg_size + sizeof(BUFFORD_NODE)); b->reg_size = reg_size; return b; } diff --git a/emufs/external_sort/bufford.h b/emufs/external_sort/bufford.h index 1a3cd75..99ce0e2 100644 --- a/emufs/external_sort/bufford.h +++ b/emufs/external_sort/bufford.h @@ -66,15 +66,24 @@ typedef struct } BUFFORD; -/** Crea un nuevo buffer ordenado. +/** Crea un nuevo buffer ordenado con una cantidad máxima de registros. * - * \param size Tamaño máximo (en bytes) del buffer. + * \param size Tamaño máximo (en cantidad de registros) del buffer. * \param reg_size Tamaño del registro que almacena. * \param cmp Función de comparación a usar. * \return Nuevo buffer ordenado o 0 si no hay más memoria. */ BUFFORD* bufford_new(size_t size, size_t reg_size, CMP_FUNC cmp); +/** Crea un nuevo buffer ordenado con una cantidad máxima de memoria a usar. + * + * \param size Tamaño máximo (en bytes) del buffer. + * \param reg_size Tamaño del registro que almacena. + * \param cmp Función de comparación a usar. + * \return Nuevo buffer ordenado o 0 si no hay más memoria. + */ +BUFFORD* bufford_new_bytes_size(size_t size, size_t reg_size, CMP_FUNC cmp); + /** Borra un buffer ordenado liberando su memoria. */ void bufford_delete(BUFFORD* buff); diff --git a/emufs/external_sort/bufford.txt b/emufs/external_sort/bufford.txt index acc5e87..4f7655c 100644 --- a/emufs/external_sort/bufford.txt +++ b/emufs/external_sort/bufford.txt @@ -17,3 +17,16 @@ 4 99 21 +9 +31 +3890 +1 +13 +761 +82 +93 +194 +57 +289 +59 +5 diff --git a/emufs/external_sort/bufford_test.c b/emufs/external_sort/bufford_test.c index ba3ea96..b0a039a 100644 --- a/emufs/external_sort/bufford_test.c +++ b/emufs/external_sort/bufford_test.c @@ -2,16 +2,6 @@ #include "bufford.h" #include -/* -typedef struct -{ - int id; - int estado; - int nrofac; -} -RECORD; -*/ - int cmp(void* x, void* y) { int xx = *(int*)x; @@ -33,7 +23,7 @@ void buffer_dump(BUFFORD* b) int main(int argc, char* argv[]) { FILE* fp; - BUFFORD* b = bufford_new(sizeof(int) * 8, sizeof(int), &cmp); + BUFFORD* b = bufford_new(8, sizeof(int), &cmp); if (!b) return 1; fp = fopen(argv[1], "r"); while (1) { -- 2.43.0