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;
}
}
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);
#include "bufford.h"
#include <stdio.h>
-/*
-typedef struct
-{
- int id;
- int estado;
- int nrofac;
-}
-RECORD;
-*/
-
int cmp(void* x, void* y)
{
int xx = *(int*)x;
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) {