/**Lee un nodo especifico que forma parte del arbol B+*/ public CNodo leerNodo(long pos) { CNodo nuevo = new CNodo(); br.BaseStream.Seek(pos, SeekOrigin.Begin); nuevo.setDir(br.ReadInt64()); nuevo.setTipoNodo(br.ReadInt32()); nuevo.setNumElemnt(br.ReadInt32()); nuevo.setGrado(br.ReadInt32()); nuevo.setTipoClave(br.ReadInt32()); nuevo.creaArrayDirNodos(nuevo.getGrado()); nuevo.creaArrayDirClaves(nuevo.getGrado()); nuevo.creaArrayClaves(nuevo.getGrado()); //Leer las direcciones de sus nodos descendientes for (int i = 0; i < (nuevo.getGrado() * 2) + 1; i++) nuevo.setAtDirNodo(i, br.ReadInt64()); //Leer las direciones de las claves del nodo( Hoja, pagina o Raiz ) for (int i = 0; i < nuevo.getGrado() * 2; i++) nuevo.setAtDirClaves(i, br.ReadInt64()); //Se leen las claves primarias y se almacenan en el vector de objectos leerClaves(nuevo); return (nuevo); }
/**Escribe un objeto CNodo utilizado en Arbol B+*/ public void escribeNodo(CNodo nuevo) { bw.BaseStream.Seek(nuevo.getDir(), SeekOrigin.Begin); bw.Write(nuevo.getDir()); bw.Write(nuevo.getTipoNodo()); bw.Write(nuevo.getNumElemnt()); bw.Write(nuevo.getGrado()); bw.Write(nuevo.getTipoClave()); //Escribir la dir de las paginas u hojas for (int i = 0; i < (nuevo.getGrado() * 2) + 1; i++) bw.Write(nuevo.getAtDirNodo(i)); //Escribir la dir de las llaves de las paginas del arbol for (int i = 0; i < nuevo.getGrado() * 2; i++) bw.Write(nuevo.getAtDirClaves(i)); }
private CNodo creaNodo(CArchivo aO, CArchivo aN, CNodo nodoAux) { CNodo nuevo; nuevo = new CNodo(nodoAux.getTipoNodo(), nodoAux.getGrado()); nuevo.setNumElemnt(nodoAux.getNumElemnt()); nuevo.setTipoClave(nodoAux.getTipoClave()); for(int i = 0; i< nodoAux.getNumElemnt(); i++) { nuevo.setAtDirClaves(i, aN.ENDF()); nuevo.escribeClave(nodoAux.getAtClave(i), aN.ENDF(), nodoAux.getTipoClave(), aN); } nuevo.setDir(aN.ENDF()); aN.escribeNodo(nuevo); return (nuevo); }