/**\brief Inseta una clave en el nodo en forma ordenada*/ public void insClaveOrd(Object clave, CBloque bloque, CArchivo file, int posClave) { //Movimiento de claves, dirClaves y dirNodos for (int i = getNumElemnt(); i > posClave; i--) { claves[i] = claves[i - 1]; dirClaves[i] = dirClaves[i - 1]; if (getTipoNodo() == 1 || getTipoNodo() == 4)//Si la clave a insertar es diferente a una hoja dirNodos[i+1] = dirNodos[i]; else dirNodos[i] = dirNodos[i - 1]; } if (getTipoNodo() == 2 || getTipoNodo() == 3)//La clave se va a insertar en una hoja o en la raizHoja { dirNodos[posClave] = file.ENDF(); file.EscribeBloque(bloque, file.ENDF()); } claves[posClave] = clave; incNumElem(); if (getTipoNodo() == 2 || getTipoNodo() == 3)//Si la clave a insertar es diferente a una raiz o pagima { dirClaves[posClave] = file.ENDF(); escribeClave(clave, file.ENDF(), bloque.getTipoCA(), file); } }
private CCubeta creaCubeta(CCubeta c, CArchivo aN, CArchivo aO) { CCubeta nuevaCub; CBloque bloqAux; nuevaCub = new CCubeta(aN.ENDF(), c.getTamaño()); nuevaCub.setNumDirBloques(c.getNumDirBloques()); nuevaCub.setPrefAsoc(c.getPrefAsoc()); for (int i = 0; i < c.getTamaño(); i++) if ((bloqAux = aO.leerBloque(c.getAtDirBloque(i), tamBloque)) != null) { bloqAux.setTamBlo(tamBloque); nuevaCub.setAtDirBloque(i, aN.ENDF()); aN.EscribeBloque(bloqAux, aN.ENDF()); } nuevaCub.setDir(aN.ENDF()); aN.EscribeCubeta(nuevaCub); return (nuevaCub); }
/**Crea cada uno de los nodos de arbol en forma recursiva, asindo un recorrido en preorden * y va agranagando todos estos nodos al nuevo archivo*/ public long generaArbolRec(CArchivo aO, CArchivo aD, int tamBloque, long dirCab) { CNodo nodoAux, nuevoNodo; CBloque bloqueAux,bloqueNuevo; long dirNodo = -1; int LS; if (dirCab != -1) { nodoAux = aO.leerNodo(dirCab); nuevoNodo = creaNodo(aO,aD,nodoAux); if (nodoAux.getTipoNodo() == HOJA || nodoAux.getTipoNodo() == RAIZHOJA) LS = nodoAux.getNumElemnt(); else LS = nodoAux.getNumElemnt() + 1; for (int i = 0; i < LS; i++) if (nodoAux.getTipoNodo() == HOJA || nodoAux.getTipoNodo() == RAIZHOJA) { bloqueAux = aO.leerBloque(nodoAux.getAtDirNodo(i), tamBloque); bloqueNuevo = new CBloque(); bloqueNuevo.setBloque(bloqueAux.getBloque()); bloqueNuevo.setTamBlo(tamBloque); bloqueNuevo.setDir(aD.ENDF()); aD.EscribeBloque(bloqueNuevo, aD.ENDF()); nuevoNodo.setAtDirNodo(i, bloqueNuevo.getDir()); } else nuevoNodo.setAtDirNodo(i,generaArbolRec(aO,aD,tamBloque,nodoAux.getAtDirNodo(i))); aD.escribeNodo(nuevoNodo); dirNodo = nuevoNodo.getDir(); } return(dirNodo); }
private long CopiarListaCubetasRec(long dirCub, CArchivo aO, CArchivo aN, int tamBloque) { Cubeta cubAux, nuevaCub = null; CBloque bloqAux; long sigCub = -1; if( dirCub != -1) { cubAux = aO.LeerCubetaHashEstatica(dirCub); sigCub = CopiarListaCubetasRec(cubAux.getSigCubeta(), aO, aN, tamBloque); nuevaCub = new Cubeta(aN.ENDF(), cubAux.getTamaño()); nuevaCub.setNumDirBloques(cubAux.getNumDirBloques()); for (int i = 0; i < cubAux.getTamaño(); i++) if ((bloqAux = aO.leerBloque(cubAux.getAtDirBloque(i), tamBloque)) != null) { bloqAux.setTamBlo(tamBloque); nuevaCub.setAtDirBloque(i, aN.ENDF()); aN.EscribeBloque(bloqAux, aN.ENDF()); } nuevaCub.setDir(aN.ENDF()); nuevaCub.setSigCubeta(sigCub); aN.EscribeCubetaHashEstatia(nuevaCub); sigCub = nuevaCub.getDir(); } return (sigCub); }
/**Copia toda la lista de bloques al nuevo archivo*/ public void CopiarSec(CArchivo fileOri, CArchivo fileNew, long dirEnt, int tamBloque, ref List<CBloque> listBloque) { CBloque bloqueAux, bloqueNuevo; while (dirEnt != -1) { bloqueAux = fileOri.leerBloque(dirEnt, tamBloque); bloqueNuevo = new CBloque(); bloqueNuevo.setBloque(bloqueAux.getBloque()); bloqueNuevo.setTamBlo(tamBloque); bloqueNuevo.setDir(fileNew.ENDF()); fileNew.EscribeBloque(bloqueNuevo, fileNew.ENDF()); listBloque.Add(bloqueNuevo); dirEnt = bloqueAux.getSigBlo(); } for (int i = 0; i < listBloque.Count - 1; i++) { listBloque[i].setSigBlo(listBloque[i + 1].getDir()); fileNew.EscribeBloque(listBloque[i], listBloque[i].getDir()); } }