/* * * 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); } }
public void EliminaEnArbolSecundario(Atributo atributo, string Ruta, int Clave, string RutaArchivoDicc, long Direccion) { Arbol ArbolS = new Arbol(ManejadorArchivo.ObtenNodos(atributo, archivo, Ruta), atributo); // Obtenemos los nodos del árbol secundario Nodo Nodo = ArbolS.ObtenNodoConLaClave(Clave); // Creamos un nodo que va a servir como auxiliar para long Dir = ArbolS.ObtenDireccionDeHoja(Clave); List <long> Bloque = ManejadorArchivo.LeeCajonIndiceSecundario(Ruta, archivo, Dir); Bloque.Remove(Direccion); if (Bloque.Count == 0) { EliminaEnArbol(ArbolS, Nodo, Clave, Direccion, Ruta, atributo, RutaArchivoDicc); } else { ManejadorArchivo.EscribeCajonSecundario(Ruta, archivo, Dir, Bloque); } if (ArbolS.Nodos.Count == 0) { ManejadorArchivo.CreaArchivo(Ruta, archivo); } }