\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
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;
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;
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;
}
return 0;
}
-
/** 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 {
/** Compara 2 claves de la forma c1 == c2 */
int emufs_indice_es_igual(INDICE *idx, CLAVE c1, CLAVE c2);
#endif
-
(*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;
}
/** 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_ */