]> git.llucax.com Git - z.facultad/75.06/emufs.git/commitdiff
preparo un poco la cancha para empezar a insertar registros en el archivo de datos...
authorNicolás Dimov <ndimov@gmail.com>
Wed, 26 May 2004 06:44:16 +0000 (06:44 +0000)
committerNicolás Dimov <ndimov@gmail.com>
Wed, 26 May 2004 06:44:16 +0000 (06:44 +0000)
emufs/b_plus.h
emufs/b_plus_test.c
emufs/indices.c
emufs/indices.h
emufs/tipo3.c
emufs/tipo3.h

index edabda0e0eaca82981f29190c9647b8320a74039..873b5328740335ff18e518c9bcfd90481655a375 100644 (file)
@@ -32,7 +32,7 @@ typedef struct nodo_b_plus {
 \r
 /** TODO */\r
 int emufs_b_plus_crear(INDEXSPECS *idx);\r
-int emufs_b_plus_get_bloque(INDEXSPECS *idx, INDEX_DAT *dataset);\r
+int emufs_b_plus_get_bloque(INDEXSPECS *idx, INDEX_DAT *query);\r
 int emufs_b_plus_actualizar_nodo(INDEX_DAT *dataset);\r
 int emufs_b_plus_buscar();\r
 int emufs_b_plus_destuir();\r
index 3facd83915417d108e7fe7563231cb54f919a70c..0dc7603b2677fcdbe848d5e2848dbbd0fbe60716 100644 (file)
@@ -16,7 +16,6 @@ indice.filename = "idxbplus_primary.idx";
 printf("\nTam Nodo: %i  Size Claves: %i  Size_Hijos: %i\n",indice.tam_bloque,indice.size_claves,indice.size_hijos);
 emufs_b_plus_crear(&indice);
        
-
 for (i=1;i<34;++i)
 {      
 querydata.num_bloque = i;
@@ -30,12 +29,22 @@ querydata.clave.i_clave = 7;
 b_plus_insertar(&indice,&querydata);
 
 querydata.num_bloque = 7;
+<<<<<<< .mine
+querydata.clave.i_clave = 5;
+b_plus_insertar_clave(&indice,&querydata);
+=======
 querydata.clave.i_clave = 5;
 b_plus_insertar(&indice,&querydata);
+>>>>>>> .r497
 
 querydata.num_bloque = 5;
+<<<<<<< .mine
+querydata.clave.i_clave = 3;
+b_plus_insertar_clave(&indice,&querydata);
+=======
 querydata.clave.i_clave = 3;
 b_plus_insertar(&indice,&querydata);
+>>>>>>> .r497
 
 querydata.num_bloque = 8;
 querydata.clave.i_clave = 63;
index 1728d1984c45b8fa401461c442ee4540ec4685b1..2fcf1c4a40be2e9cab31577dc855bed16b80e71b 100644 (file)
@@ -65,6 +65,11 @@ INDICE *emufs_indice_crear(EMUFS *emu, char *nombre, INDICE_FUNCION funcion, IND
                        PERR("Creando indice con Arbol B*");
                        PERR("AÚN NO IMPLEMENTADO!!!!!!!!");
                        break;
+               case IND_B_PLUS:
+                       /* llenar metodos */
+                       PERR("Creando indice con Arbol B+");
+                       PERR("AÚN NO IMPLEMENTADO!!!!!!!!");
+                       break;
        }
 
        return tmp;
@@ -205,4 +210,3 @@ int emufs_indice_es_igual(INDICE *idx, CLAVE c1, CLAVE c2)
        }
        return 0;
 }
-
index 2928b141c9b29a96e992d1561f1d37fbb8762f3c..ad2686c340c757402337c8112a908584852ad625 100644 (file)
@@ -20,7 +20,8 @@ typedef struct _reg_def_ {
 /** Tipos de Indices conocidos */
 typedef enum {
        IND_B, /**< Utilizacion de Arboles B */
-       IND_B_ASC /**< Utilizacion de Arboles B* */
+       IND_B_ASC, /**< Utilizacion de Arboles B* */
+       IND_B_PLUS
 } INDICE_TIPO;
 
 typedef enum {
@@ -128,4 +129,3 @@ int emufs_indice_es_menor(INDICE *idx, CLAVE c1, CLAVE c2);
 /** Compara 2 claves de la forma c1 == c2 */
 int emufs_indice_es_igual(INDICE *idx, CLAVE c1, CLAVE c2);
 #endif
-
index a76725c33d4bbca3b47fbc69b2a4767debd2dc87..7333d7203ba6682c701396f9cad7026958d46bc5 100644 (file)
@@ -585,7 +585,47 @@ void emufs_tipo3_leer_bloque_raw(EMUFS *efs, EMUFS_BLOCK_ID id, char **actual, c
        (*size1) = (*size2) = (*size3) = efs->tam_bloque;
 }
 
-int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, CLAVE clave, int offset, EMUFS_BLOCK_ID num_bloque, int *err)
+CLAVE obtener_clave(void *ptr, INDICE *ind)
 {
+       CLAVE c;
+       switch (ind->tipo_dato) {
+               case IDX_INT: memcpy(&c, ptr+ind->offset, sizeof(int));
+                       break;
+               case IDX_FLOAT: memcpy(&c, ptr+ind->offset, sizeof(float));
+                       break;
+               case IDX_STRING: /*no hago nada pero saco el warning*/
+       }                       
+       return c;
+}
+
+int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, INDICE *indice, int *err)
+{
+       #ifdef ESTO_NO_ANDA_TODAVIA
+       CLAVE clave, clave_aux;
+       EMUFS_BLOCK_ID num_bloque = get_new_block_number(emu); /*implementar esto*/
+       INDEX_DAT query;
+       char *bloque, *new_bloque, *registro;
+       
+       /*le asigno un posible numero de bloque para el caso en que no encuentre donde meterlo*/
+       query.num_bloque = num_bloque;  
+       /*saco la clave del stream*/
+       query.clave = obtener_clave(ptr, indice);
+       /*mando a buscar en el arbol el bloque correspondiente a esa clave*/
+       indice->emufs_b_plus_get_bloque(ind, &query);
+       /*en query->num_bloque tengo el bloque donde debo meter el registro*/
+       
+       /*cargo el bloque*/
+       bloque = emufs_tipo3_leer_bloque(emu, query.num_bloque, err);
+       if (err != 0){
+               PERR("NO SE PUDO LEER EL BLOQUE");
+               return -1;
+       }
+       
+       /*debo insertar el reg en el bloque en forma ordenada*/
+       /*si es el menor de todos tengo que cambiar el ancla en el arbol*/
+       /*si no entra, tengo que insertar una nueva clave en el arbol y separar los registros en 2 bloques*/
+       
+       
+       #endif ESTO_NO_ANDA_TODAVIA
        return 0;
 }
index 8283acd803d1f80761ee272a916ee950df376096..84f610f6b89b298e30f661abc17d3554264d3e23 100644 (file)
@@ -138,10 +138,9 @@ void emufs_tipo3_leer_bloque_raw(EMUFS *emu, EMUFS_BLOCK_ID block_id, char **act
 /** Inserta un registro ordenado segun el Arbol B+ lo indique
   * \param emu Esructura para manejar los archivos.
   * \param ptr Cadena de datos contenedora del registro.
-  * \param clave Clave de ordenamiento.
-  * \param offset Distancia en bytes hasta la clave.
-  * \param num_bloque Numero de bloque donde se insertara el registro.
+  * \param ind Indice del archivo.
+  * \param err Codigo de error devuelto en caso de falla.
   */
-int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, CLAVE clave, int offset, EMUFS_BLOCK_ID num_bloque, int *err);
+int emufs_tipo3_insertar_ordenado(EMUFS *emu, void *ptr, INDICE *ind, int *err);
 
 #endif /* _EMUFS_TIPO3_H_ */