Esempio n. 1
0
        private void InsertaEnPag(TPagina nodo, int clave, TPagina nuevo, long dir)
        {
            int i;

            for (i = nodo.M - 1; i >= 0 && nodo.GetClave(i) > clave; i--)
            {
                nodo.SetClaves(nodo.GetClave(i), i + 1);
                if (nodo.Tipo == H)
                {
                    nodo.SetDireccion(nodo.GetDireccion(i), i + 1);
                }
                if (nodo.Tipo != H)
                {
                    nodo.SetDireccion(nodo.GetDireccion(i + 1), i + 2);
                    nodo.SetPtrs(nodo.GetPtrs(i + 1), i + 2);
                }
            }
            //  printf("\ni: %d\n", i);
            nodo.SetClaves(clave, i + 1);
            if (nodo.Tipo == H)
            {
                nodo.SetDireccion(dir, i + 1);
            }
            if (nodo.Tipo != H)
            {
                nodo.SetDireccion(dir, i + 2);
                nodo.SetPtrs(nuevo, i + 2);
            }
            nodo.M += 1;
        }
Esempio n. 2
0
        public void InsercionEnArbolB(Registro registro, string nombreArchivo)
        {
            pag_n = new TPagina();
            TPagina aux = new TPagina();

            WriteFile wf = new WriteFile(nombreArchivo);
            bool      b;


            if (raiz == null)
            {
                raiz = CreaPagina(d, H);
                raiz.SetClaves(clave, 0);
                raiz.M            += 1;
                raiz.DireccionNodo = 8;

                wf.EscribeCabecera(raiz.DireccionNodo);
                wf.InsertaNodo(raiz);
                wf.InsertaRegistro(registro);

                raiz.SetDireccion(registro.Direccion, 0);
                wf.ModificaNodo(raiz);
            }
            else
            {
                b = Baja(raiz, registro, nombreArchivo);
                if (b)
                {
                    aux       = CreaPagina(d, R);
                    raiz.Tipo = pag_n.Tipo;
                    aux.SetPtrs(raiz, 0);
                    aux.SetDireccion(raiz.DireccionNodo, 0);
                    aux.SetClaves(clave, 0);
                    aux.SetPtrs(pag_n, 1);
                    if (pag_n.Tipo != H)
                    {
                        wf.InsertaNodoIR(pag_n);
                        wf.ModificaNodoIR(raiz);
                    }
                    else
                    {
                        wf.InsertaNodo(pag_n);
                        wf.ModificaNodo(raiz);
                    }

                    aux.SetDireccion(pag_n.DireccionNodo, 1);
                    aux.M++;


                    raiz = aux;
                    wf.InsertaNodoIR(raiz);
                    wf.EscribeCabecera(raiz.DireccionNodo);
                }
            }
        }
Esempio n. 3
0
        private void CargaNodo(TPagina nodo, FileStream fs, long direccion)
        {
            fs.Seek(direccion, SeekOrigin.Begin);
            byte[] a = new byte[sizeof(long)];
            fs.Read(a, 0, sizeof(long));
            nodo.DireccionNodo = BitConverter.ToInt64(a, 0);
            a = new byte[sizeof(int)];
            fs.Read(a, 0, sizeof(int));
            nodo.Tipo = BitConverter.ToInt32(a, 0);

            int i;

            for (i = 0; i < 5; i++)
            {
                a = new byte[sizeof(long)];
                fs.Read(a, 0, sizeof(long));
                nodo.SetDireccion(BitConverter.ToInt64(a, 0), i);

                if (i < 4)
                {
                    a = new byte[sizeof(int)];
                    fs.Read(a, 0, sizeof(int));
                    nodo.SetClaves(BitConverter.ToInt32(a, 0), i);
                    if (nodo.GetClave(i) > 0)
                    {
                        nodo.M = i + 1;
                    }
                }
            }
        }
Esempio n. 4
0
        private void EliminaClave(TPagina nodo, int clave)
        {
            int i, index = Buscar(nodo, clave);


            for (i = Buscar(nodo, clave) - 1; i < nodo.M; i++)
            {
                nodo.SetClaves(nodo.GetClave(i + 1), i);
                nodo.SetDireccion(nodo.GetDireccion(i + 1), i);
                if (nodo.Tipo != H)
                {
                    nodo.SetPtrs(nodo.GetPtrs(i + 2), i + 1);
                }
            }
            if (nodo.Tipo != H)
            {
                nodo.SetPtrs(pag_n, index - 1 >= 0 ? index - 1 : 0);
                nodo.SetDireccion(pag_n.DireccionNodo, index - 1 >= 0 ? index - 1 : 0);
            }

            nodo.M -= 1;
        }
Esempio n. 5
0
        private void InsertaEnHoja(TPagina nodo, int clave, TPagina nuevo, long dir)
        {
            int i;

            for (i = nodo.M - 1; i >= 0 && nodo.GetClave(i + 1) > clave; i--)
            {
                nodo.SetClaves(nodo.GetClave(i + 1), i + 2);
                nodo.SetDireccion(nodo.GetDireccion(i + 1), i + 2);
                if (nodo.Tipo != H)
                {
                    nodo.SetPtrs(nodo.GetPtrs(i + 2), i + 3);
                }
            }

            nodo.SetClaves(clave, i + 2);
            nodo.SetDireccion(dir, i + 2);
            if (nodo.Tipo != H)
            {
                nodo.SetPtrs(nuevo, i + 3);
            }
            nodo.M += 1;
        }