/* * * Este es el método que mando a llamar para insertar una Clave en un Arbol Secundario * */ public void InsertaEnArbolSecundario(Atributo atributo, string Ruta, int Clave, long Direccion, string RutaArchivoDicc) { Arbol ArbolS = new Arbol(ManejadorArchivo.ObtenNodos(atributo, archivo, Ruta), atributo); // Obtengo todos los nodos del arbol en cuestión if (ArbolS.ContieneClaveEnHojas(Clave)) // Si el árbol ya contiene la clave en sus hojas ( No es necesario crear el bloque, solo agregar la dirección al bloque) { long DireccionBloque = ArbolS.ObtenDireccionDeHoja(Clave); // Obtenemos la dirección del bloque List <long> BloqueLectura = ManejadorArchivo.LeeCajonIndiceSecundario(Ruta, archivo, DireccionBloque); // Leemos el bloque //MessageBox.Show("EL bloque tiene: " + BloqueLectura.Count); BloqueLectura.Add(Direccion); // Agregamos la dirección nueva al bloque que leimos anteriormente BloqueLectura.Sort(); // Ordenamos el bloque ManejadorArchivo.EscribeCajonSecundario(Ruta, archivo, DireccionBloque, BloqueLectura); // Volvemos a escribir el bloque ya con la dirección agregada y ordenada } else // Si no existe la Clave en el árbol (Necesitamos hacer una inserción en el árbol) { long DireccionBloque = ManejadorArchivo.ObtenUltimaDireccion(Ruta, archivo); // Obtenemos la dirección del bloque ManejadorArchivo.EscribeCajonInicialIndiceSecundario(Ruta, archivo, DireccionBloque); // Escribimos el cajón de 2048 bytes lleno de * en el archivo InsercionArbol(ArbolS, Clave, DireccionBloque, Ruta, atributo, RutaArchivoDicc); // Insertamos la clave en el árbol List <long> Bloque = ManejadorArchivo.LeeCajonIndiceSecundario(Ruta, archivo, DireccionBloque); // Leemos el cajón recién creado (Obviamente no va a tener nada) Bloque.Add(Direccion); // Agregamos la dirección del registro al bloque Bloque.Sort(); // Ordenamos el bloque ManejadorArchivo.EscribeCajonSecundario(Ruta, archivo, DireccionBloque, Bloque); // Escribimos el bloque en el cajón secundario } }
public void InsertaEnArbolSecundario(Atributo atributo, string Ruta, int Clave, long Direccion, string RutaArchivoDicc) { Arbol ArbolS = new Arbol(ManejadorArchivo.ObtenNodos(atributo, archivo, Ruta), atributo); if (ArbolS.ContieneClaveEnHojas(Clave)) { long DireccionBloque = ArbolS.ObtenDireccionDeHoja(Clave); List <long> BloqueLectura = ManejadorArchivo.LeeCajonIndiceSecundario(Ruta, archivo, DireccionBloque); MessageBox.Show("EL bloque tiene: " + BloqueLectura.Count); BloqueLectura.Add(Direccion); BloqueLectura.Sort(); ManejadorArchivo.EscribeCajonSecundario(Ruta, archivo, DireccionBloque, BloqueLectura); } else { long DireccionBloque = ManejadorArchivo.ObtenUltimaDireccion(Ruta, archivo); ManejadorArchivo.EscribeCajonInicialIndiceSecundario(Ruta, archivo, DireccionBloque); InsercionArbol(ArbolS, Clave, DireccionBloque, Ruta, atributo, RutaArchivoDicc); List <long> Bloque = ManejadorArchivo.LeeCajonIndiceSecundario(Ruta, archivo, DireccionBloque); Bloque.Add(Direccion); Bloque.Sort(); ManejadorArchivo.EscribeCajonSecundario(Ruta, archivo, DireccionBloque, Bloque); } }