public async Task <string> Insertar(int value) { Tuple <Pagina, Nodo> pin = await raiz.Buscar(value); Nodo nodo = pin.Item2; Pagina pagina = pin.Item1; if (nodo != null) { return(string.Format("Valor {0} ya existe", value)); } else { await pagina.Insertar(value); if (raiz.PaginaPadre != null) { raiz = raiz.PaginaPadre; } await raiz.reajustarPocision(true); return(string.Format("Valor {0} insertado", value)); } }
public async Task dividir() { if (nodos.Count() <= BTree.D) { return; } Pagina iPagina = PaginaPadre == null ? this : PaginaPadre; PaginaHijo lHijo = new PaginaHijo(iPagina), rHijo = new PaginaHijo(iPagina); Pagina lPagina = new Pagina(lHijo), rPagina = new Pagina(rHijo); int mitad = nodos.Count / 2; Nodo mitadNodo = nodos[mitad]; Puntero lPointer = new Puntero(mitad) { PaginaPadre = iPagina }, rPointer = new Puntero(mitad + 1) { PaginaPadre = iPagina }; await lPointer.actualizar(); await rPointer.actualizar(); for (int i = 0; i < mitad; i++) { lPagina.nodos.Add(nodos[i]); nodos[i].PaginaPadre = lPagina; lPagina.hijos.Add(hijos[i]); hijos[i].paginaPadre = lPagina; hijos[i].puntero.PaginaPadre = lPagina; } lPagina.hijos.Add(hijos[mitad]); hijos[mitad].paginaPadre = lPagina; hijos[mitad].puntero.PaginaPadre = lPagina; for (int i = mitad + 1; i < nodos.Count; i++) { rPagina.nodos.Add(nodos[i]); nodos[i].PaginaPadre = rPagina; rPagina.hijos.Add(hijos[i]); hijos[i].paginaPadre = rPagina; hijos[i].puntero.PaginaPadre = rPagina; nodos[i].Indice = i - mitad - 1; hijos[i].puntero.Indice = i - mitad - 1; } rPagina.hijos.Add(hijos.Last()); hijos.Last().paginaPadre = rPagina; hijos.Last().puntero.PaginaPadre = rPagina; hijos.Last().puntero.Indice = hijos.Count - mitad - 2; lHijo.pagina = lPagina; rHijo.pagina = rPagina; rHijo.pagina.MouseDown += (s, e) => { }; lHijo.puntero = lPointer; rHijo.puntero = rPointer; nodos.Clear(); hijos.Clear(); if (PaginaPadre == null) { mitadNodo.Indice = 0; iPagina.nodos.Add(mitadNodo); lPointer.Indice = 0; rPointer.Indice = 1; iPagina.hijos.Add(lHijo); iPagina.hijos.Add(rHijo); iPagina.actualizarJerarquia(); await Task.WhenAll(iPagina.actualizarElementosVista(true), lPagina.actualizarElementosVista(true), rPagina.actualizarElementosVista(true), iPagina.reajustarPocision(true)); } else { await iPagina.Insertar_Nodo(mitadNodo, lHijo, rHijo); iPagina.UpdateLayout(); iPagina.actualizarJerarquia(); await Task.WhenAll(iPagina.reajustarPocision(true), lPagina.actualizarElementosVista(true), rPagina.actualizarElementosVista(true)); if (PaginaPadre != null) { ((Canvas)Parent).Children.Remove(this); } } await iPagina.dividir(); }