private void buscaDirBloque(CBloque bO) { CCubeta cubetaAux; CBloque bAux; cubetaAux = tHashExt.getAtEntrada(cubetaSel).getCubeta(); for (int i = 0; i < cubetaAux.getTamaño(); i++) if (cubetaAux.getAtDirBloque(i) != -1) { bAux = getArchivo().leerBloque(cubetaAux.getAtDirBloque(i), bO.getTamBlo()); if (bO.ComparateTo(bAux) == 0) { dirBO = cubetaAux.getAtDirBloque(i); return; } } }
private bool buscaBloqueRep(CBloque nuevo) { CCubeta cubetaAux; CBloque bloqueAux; int posCub; posCub = ConvertDecimal(tHashExt, nuevo.ConvertClaveToBinary()); cubetaAux = tHashExt.getAtEntrada(posCub).getCubeta(); for (int i = 0; i < cubetaAux.getTamaño(); i++) { bloqueAux = getArchivo().leerBloque(cubetaAux.getAtDirBloque(i), nuevo.getTamBlo()); if (bloqueAux != null && nuevo.ComparateTo(bloqueAux) == 0) return (true); } return (false); }
private bool Repetidos(CBloque b, CCubeta cubeta) { CBloque bAux; for (int i = 0; i < cubeta.getTamaño(); i++) { bAux = getArchivo().leerBloque(cubeta.getAtDirBloque(i), b.getTamBlo()); if (bAux != null && (b.ComparateTo(bAux) == 0)) return (true); } return (false); }
/**Busca la direccion del bloque que será modificado*/ public void buscaDirBloque(CBloque bO) { Cubeta cub; CBloque bAux; long dirCub; dirCub = tablaHashStatic.getAtDirCubeta(cubetaSel); while (dirCub != -1) { cub = getArchivo().LeerCubetaHashEstatica(tablaHashStatic.getAtDirCubeta(cubetaSel)); for(int i = 0; i < cub.getTamaño(); i++) if (cub.getAtDirBloque(i) != -1) { bAux = getArchivo().leerBloque(cub.getAtDirBloque(i), bO.getTamBlo()); if (bO.ComparateTo(bAux) == 0) { dirBO = cub.getAtDirBloque(i); return; } } dirCub = cub.getSigCubeta(); } }
/**Escribe un bloque en algun archivo*/ public void EscribeBloque(CBloque nuevo, long pos) { if (pos != -1) { bw.BaseStream.Seek(pos, SeekOrigin.Begin); bw.Write(pos); bw.Write(nuevo.getBloque(), 0, nuevo.getTamBlo()); } }
private bool RegEliminado(Cubeta cubeta, CBloque b, int pC) { CBloque bAux; bool res = true; int posOrg = pC; while (true) { bAux = getArchivo().leerBloque(cubeta.getAtDirBloque(pC), b.getTamBlo()); if ( bAux != null && (b.ComparateTo(bAux) == 0)) break; else { pC++; if (pC == cubeta.getTamaño()) pC = 0; if (pC == posOrg) { res = false; break; } } } if (res == true) { cubeta.setAtDirBloque(pC, -1); cubeta.decNumDirBloques(); getArchivo().EscribeCubetaHashEstatia(cubeta); } return (res); }
private bool BuscaBloque(CBloque bN, long cabListCub, int indCub) { Cubeta cubAux; CBloque bAux; int posOri = indCub; while (cabListCub != -1) { cubAux = getArchivo().LeerCubetaHashEstatica(cabListCub); for (; ; ) { bAux = getArchivo().leerBloque(cubAux.getAtDirBloque(indCub), bN.getTamBlo()); if (bAux != null && bN.ComparateTo(bAux) == 0) return (true); else indCub++; if (indCub == cubAux.getTamaño()) indCub = 0; if (indCub == posOri) break; } cabListCub = cubAux.getSigCubeta(); } return (false); }
/**Elimian un bloque del archivo implementado en la organización*/ public void eliminaBloque(ref CIndice ind, CBloque b) { CBloque bloAux, bloAnt; long ptrAux, ptrAnt; int tamB; bloAux = bloAnt = null; ptrAux = ptrAnt = -1; tamB = b.getTamBlo(); ptrAux = ind.getCabBloques(); while (ptrAux != -1)//Se ubica el registro en el archivo { bloAux = getArchivo().leerBloque(ptrAux, tamB); if (b.ComparateTo(bloAux) != 0) { ptrAnt = ptrAux; bloAnt = bloAux; bloAnt.setTamBlo(tamB); ptrAux = bloAux.getSigBlo(); } else break; } if (ptrAux == ind.getCabBloques())//Se actualiza la cabecera de datos de la entidad en caso de que sea el primero { ind.setCabBloques( bloAux.getSigBlo()); getArchivo().EscribeIndicePrimario(ind); } else { bloAnt.setSigBlo(bloAux.getSigBlo()); bloAnt.setTamBlo(tamB); getArchivo().EscribeBloque(bloAnt, ptrAnt); } }
/**Inserta el bloque de datos, accediendo a la estructura de datos implementada en el archivo*/ public int insBloque(CIndice ind, CBloque nuevo, long posB) { CBloque bAux, bAnt = null; long ptrAux, ptrAnt = -1; int band = -1; ptrAux = ind.getCabBloques(); while (ptrAux != -1) { bAux = getArchivo().leerBloque(ptrAux, nuevo.getTamBlo()); if ((band = nuevo.ComparateTo(bAux)) > 0) { ptrAnt = ptrAux; bAnt = bAux; bAnt.setTamBlo(nuevo.getTamBlo()); ptrAux = bAux.getSigBlo(); } else break; } if (band == 0) return 0; else if (ptrAux == ind.getCabBloques()) { ind.setCabBloques(posB); getArchivo().EscribeIndicePrimario(ind); } else { bAnt.setSigBlo(posB); getArchivo().EscribeBloque(bAnt, ptrAnt); } nuevo.setSigBlo(ptrAux); getArchivo().EscribeBloque(nuevo, posB); return (band); }
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); }