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; }
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); } } }
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; } } } }
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; }
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; }