]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
Un poco de orden:
authorLeandro Lucarella <llucax@gmail.com>
Sun, 30 May 2004 07:58:15 +0000 (07:58 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 30 May 2004 07:58:15 +0000 (07:58 +0000)
- Se separa el MERGEFILE.
- Se renombra el archivo de prueba.

emufs/external_sort/Makefile
emufs/external_sort/mergefile.c [new file with mode: 0644]
emufs/external_sort/mergefile.h [new file with mode: 0644]
emufs/external_sort/sort_test.c [moved from emufs/external_sort/bufford_test_sort.c with 63% similarity]

index 33cceadcdc7715ddd3bfc7e3649890fc271cf908..7cc6c1572bf538bf22d0376d8b376f49a7c48743 100644 (file)
@@ -9,7 +9,7 @@
 ################
 
 # Nombre del ejecutable.
 ################
 
 # Nombre del ejecutable.
-TARGETS = s_ext bufford_test bufford_test_sort
+TARGETS = s_ext bufford_test sort_test
 
 # Opciones para el compilador C.
 CFLAGS = -Wall -ggdb -DDEBUG
 
 # Opciones para el compilador C.
 CFLAGS = -Wall -ggdb -DDEBUG
@@ -25,7 +25,7 @@ CXXFLAGS = $(CFLAGS) -fno-inline
 all: $(TARGETS)
 
 bufford_test: bufford.o bufford_test.o
 all: $(TARGETS)
 
 bufford_test: bufford.o bufford_test.o
-bufford_test_sort: bufford.o bufford_test_sort.o
+sort_test: bufford.o mergefile.o sort_test.o
 
 clean:
        @$(RM) -fv *.o $(TARGETS)
 
 clean:
        @$(RM) -fv *.o $(TARGETS)
diff --git a/emufs/external_sort/mergefile.c b/emufs/external_sort/mergefile.c
new file mode 100644 (file)
index 0000000..2d59fb1
--- /dev/null
@@ -0,0 +1,129 @@
+/* vim: set noexpandtab tabstop=4 shiftwidth=4 wrap:
+ *----------------------------------------------------------------------------
+ *                                  emufs
+ *----------------------------------------------------------------------------
+ * This file is part of emufs.
+ *
+ * emufs is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * emufs is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with emufs; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA  02111-1307  USA
+ *----------------------------------------------------------------------------
+ * Creado:  dom may 30 04:54:53 ART 2004
+ * Autores: Leandro Lucarella <llucare@fi.uba.ar>
+ *----------------------------------------------------------------------------
+ *
+ * $Id: tipo1.c 548 2004-05-28 22:44:27Z llucare $
+ *
+ */
+
+/** \file
+ *
+ * Archivo temporal con un fragmento ordenado del archivo original.
+ * 
+ * Implementación de un archivo temporal con un fragmento ordenado del archivo
+ * original utilizado para hacer el ordenamiento por fusión (merge sort).
+ *
+ */
+
+#include "mergefile.h"
+#include <malloc.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+char* mergefile_makefilename(int i)
+{
+       size_t size = sizeof(MERGEFILE_TEMPLATE) + 8; /* 8 más para el int */
+       char* filename = malloc(size);
+       if (!filename) return 0;
+       /* Hasta que me de la memoria para crear el nombre del archivo */
+       while (snprintf(filename, size, MERGEFILE_TEMPLATE, i) >= size) {
+               char* new;
+               size += 8;
+               new = realloc(filename, size);
+               if (new) {
+                       filename = new;
+               } else {
+                       free(filename);
+                       return 0;
+               }
+       }
+       return filename;
+}
+
+MERGEFILE* mergefile_new(int i)
+{
+       MERGEFILE* mf = malloc(sizeof(MERGEFILE));
+       if (!mf) {
+               return 0;
+       }
+       /* asigno el nombre de archivo */
+       if (!(mf->filename = mergefile_makefilename(i))) {
+               free(mf);
+               return 0;
+       }
+       /* abre archivo */
+       if (!(mf->fp = fopen(mf->filename, "rb"))) {
+               free(mf->filename);
+               free(mf);
+               return 0;
+       }
+       /* obtiene dato */
+       if (fscanf(mf->fp, "%i", &(mf->next)) <= 0) {
+               fclose(mf->fp);
+               free(mf->filename);
+               free(mf);
+               return 0;
+       }
+       mf->more = 1;
+       return mf;
+}
+
+void mergefile_delete(MERGEFILE* mf)
+{
+       assert(mf);
+       assert(mf->fp);
+       assert(mf->filename);
+       fclose(mf->fp);
+       remove(mf->filename);
+       free(mf->filename);
+       free(mf);
+}
+
+int mergefile_peek_next(MERGEFILE* mf)
+{
+       assert(mf);
+       assert(mf->fp);
+       assert(mf->more);
+       return mf->next;
+}
+
+int mergefile_pop_next(MERGEFILE* mf)
+{
+       int ret;
+       assert(mf);
+       assert(mf->fp);
+       assert(mf->more);
+       ret = mf->next;
+       /* obtiene dato, si no hay más, se activa el flag */
+       if (fscanf(mf->fp, "%i", &(mf->next)) <= 0) mf->more = 0;
+       return ret;
+}
+
+int mergefile_has_more(MERGEFILE* mf)
+{
+       assert(mf);
+       assert(mf->fp);
+       return mf->more;
+}
+
diff --git a/emufs/external_sort/mergefile.h b/emufs/external_sort/mergefile.h
new file mode 100644 (file)
index 0000000..1183d14
--- /dev/null
@@ -0,0 +1,67 @@
+/* vim: set noexpandtab tabstop=4 shiftwidth=4:
+ *----------------------------------------------------------------------------
+ *                                  emufs
+ *----------------------------------------------------------------------------
+ * This file is part of emufs.
+ *
+ * emufs is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at your option) any later
+ * version.
+ *
+ * emufs is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with emufs; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place, Suite 330, Boston, MA  02111-1307  USA
+ *----------------------------------------------------------------------------
+ * Creado:  dom may 30 04:57:18 ART 2004
+ * Autores: Leandro Lucarella <llucare@fi.uba.ar>
+ *----------------------------------------------------------------------------
+ *
+ * $Id: tipo1.h 542 2004-05-28 19:45:02Z rmarkie $
+ *
+ */
+
+/** \file
+ *
+ * Archivo temporal con un fragmento ordenado del archivo original.
+ * 
+ * Interfaz de un archivo temporal con un fragmento ordenado del archivo
+ * original utilizado para hacer el ordenamiento por fusión (merge sort).
+ *
+ */
+
+#ifndef _MERGEFILE_H_
+#define _MERGEFILE_H_
+
+#include <stdio.h>
+
+#define MERGEFILE_TEMPLATE "sorted_chunk.%i"
+
+typedef struct
+{
+       FILE* fp;
+       char* filename;
+       int   next;
+       int   more;
+}
+MERGEFILE;
+
+char* mergefile_makefilename(int i);
+
+MERGEFILE* mergefile_new(int i);
+
+void mergefile_delete(MERGEFILE* mf);
+
+int mergefile_peek_next(MERGEFILE* mf);
+
+int mergefile_pop_next(MERGEFILE* mf);
+
+int mergefile_has_more(MERGEFILE* mf);
+
+#endif /* _MERGEFILE_H_ */
+
similarity index 63%
rename from emufs/external_sort/bufford_test_sort.c
rename to emufs/external_sort/sort_test.c
index 81b87f72608b2640f3e8a2f0cbdf72382cb958f9..65c653d467d10756d8cf24e9f475735e9941b2c0 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "bufford.h"
 
 #include "bufford.h"
+#include "mergefile.h"
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
@@ -14,103 +15,6 @@ typedef struct
 RECORD;
 */
 
 RECORD;
 */
 
-#define MERGEFILE_TEMPLATE "sorted_chunk.%i"
-
-typedef struct
-{
-       FILE* fp;
-       char* filename;
-       int   next;
-       int   more;
-}
-MERGEFILE;
-
-char* mergefile_makefilename(int i)
-{
-       size_t size = sizeof(MERGEFILE_TEMPLATE) + 8; /* 8 más para el int */
-       char* filename = malloc(size);
-       if (!filename) return 0;
-       /* Hasta que me de la memoria para crear el nombre del archivo */
-       while (snprintf(filename, size, MERGEFILE_TEMPLATE, i) >= size) {
-               char* new;
-               size += 8;
-               new = realloc(filename, size);
-               if (new) {
-                       filename = new;
-               } else {
-                       free(filename);
-                       return 0;
-               }
-       }
-       return filename;
-}
-
-MERGEFILE* mergefile_new(int i)
-{
-       MERGEFILE* mf = malloc(sizeof(MERGEFILE));
-       if (!mf) {
-               return 0;
-       }
-       /* asigno el nombre de archivo */
-       if (!(mf->filename = mergefile_makefilename(i))) {
-               free(mf);
-               return 0;
-       }
-       /* abre archivo */
-       if (!(mf->fp = fopen(mf->filename, "rb"))) {
-               free(mf->filename);
-               free(mf);
-               return 0;
-       }
-       /* obtiene dato */
-       if (fscanf(mf->fp, "%i", &(mf->next)) <= 0) {
-               fclose(mf->fp);
-               free(mf->filename);
-               free(mf);
-               return 0;
-       }
-       mf->more = 1;
-       return mf;
-}
-
-void mergefile_delete(MERGEFILE* mf)
-{
-       assert(mf);
-       assert(mf->fp);
-       assert(mf->filename);
-       fclose(mf->fp);
-       remove(mf->filename);
-       free(mf->filename);
-       free(mf);
-}
-
-int mergefile_peek_next(MERGEFILE* mf)
-{
-       assert(mf);
-       assert(mf->fp);
-       assert(mf->more);
-       return mf->next;
-}
-
-int mergefile_pop_next(MERGEFILE* mf)
-{
-       int ret;
-       assert(mf);
-       assert(mf->fp);
-       assert(mf->more);
-       ret = mf->next;
-       /* obtiene dato, si no hay más, se activa el flag */
-       if (fscanf(mf->fp, "%i", &(mf->next)) <= 0) mf->more = 0;
-       return ret;
-}
-
-int mergefile_has_more(MERGEFILE* mf)
-{
-       assert(mf);
-       assert(mf->fp);
-       return mf->more;
-}
-
 int cmp(void* x, void* y)
 {
        int xx = *(int*)x;
 int cmp(void* x, void* y)
 {
        int xx = *(int*)x;