Пример #1
0
        /*
         *
         * 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);
            }
        }