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); }
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()); } }
/**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); }
public bool eliminaClave(int pos, CBloque b, CArchivo file) { CBloque bAux; bool res = false; if (getNumDirBloques() == 0) return (true); for (; ; ) { bAux = file.leerBloque(getAtDirBloque(pos), b.getTamBlo()); if (bAux != null && (b.ComparateTo(bAux) == 0)) { setAtDirBloque(pos, -1); decNumDirBloques(); if (getNumDirBloques() == 0) res = true; break; } else if (++pos == getTamaño()) pos = 0; } return (res); }