/**Modifica la información de alguna entrada*/ public void ActualizaEntradas(CCubeta cubAux, CCubeta nueva ) { CEntrada entAux; int nEnt, tamHash; tamHash = tHashExt.getListEntradas().Count; nEnt = (int)Math.Pow(2, (double)(tHashExt.getPrefAsociacion() - cubAux.getPrefAsoc())); for (int i = tamHash - 1; i >= 0 && nEnt != 0; i--) { entAux = tHashExt.getAtEntrada(i); if (entAux.getCubeta() == cubAux) { entAux.setCubeta(nueva); nEnt--; getArchivo().EscribeEntrada(entAux); } } }
private List<int> buscaEntradas(CTablaHashExt tH, CCubeta cub) { List<int> L; int numEnt; L = new List<int>(); numEnt = (int)Math.Pow((int)2,((int)(tH.getPrefAsociacion()-cub.getPrefAsoc()))); foreach (CEntrada e in tH.getListEntradas()) if (numEnt > 0) { if (e.getCubeta() == cub) { L.Add(e.getID()); numEnt--; } } else break; return(L); }
/**Se escribe un objeto cubeta de la organizacion Hash Dinamica en el archivo de trabajo * \param cubeta Cubeta a escribir, ya cuenta con su direccion en el archivo*/ public void EscribeCubeta(CCubeta cubeta) { bw.BaseStream.Seek(cubeta.getDir(), SeekOrigin.Begin); bw.Write(cubeta.getDir()); bw.Write(cubeta.getTamaño()); bw.Write(cubeta.getNumDirBloques()); bw.Write(cubeta.getPrefAsoc()); for (int i = 0; i < cubeta.getTamaño(); bw.Write(cubeta.getAtDirBloque(i)), i++) ; }
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); }