/**Elimina un bloque el forma logica y fisica*/ public bool EliminaBloque(CBloque b, CTablaHashExt tH) { CEntrada entradaAux; CCubeta cubetaAux; int numEnt; bool res, band = false ; numEnt = ConvertDecimal(tH,b.ConvertClaveToBinary());//Se obtiene la poscion de la entrada entradaAux = tH.getListEntradas()[numEnt];//Se carga la entrada cubetaAux = entradaAux.getCubeta(); //Se elimina la clave de cuebta leida res = cubetaAux.eliminaClave(FuncionHash(b), b, getArchivo()); getArchivo().EscribeCubeta(cubetaAux); tH.decNumReg(); getArchivo().EscribeTablaHashExt(tH); if (res == true)//Si es verdadero es porque la cubeta se quedo vacia if (tH.getPrefAsociacion() == 0) band = true; else if (cubetaAux.getPrefAsoc() == tH.getPrefAsociacion())//Se checa los estados de prefijos, en la cubeta y la tabla hash { entradaAux.setCubeta(tH.getAtEntrada(entradaAux.getEspejo()).getCubeta()); getArchivo().EscribeEntrada(entradaAux); entradaAux.getCubeta().DecPrefAsoc(); getArchivo().EscribeCubeta(entradaAux.getCubeta()); while (!tH.validaPrefijos()) tH.Doblate(getArchivo()); if (tH.getNumReg() == 0) band = true; } return (band); }
private void ImprimeTablaHash(long dir) { dGTablaHash.Rows.Clear(); dGCubeta.Rows.Clear(); tablaDatos.Rows.Clear(); btI.Text = ""; btIJ.Text = ""; if (dir != -1) { tHashExt = getArchivo().LeerTablaHashExt(dir); btI.Text = "i = " + tHashExt.getPrefAsociacion().ToString(); for (int nC = 0, i = 0; i < tHashExt.getListEntradas().Count; i++, nC++) { dGTablaHash.Rows.Add(); dGTablaHash.Rows[i].HeaderCell.Value = nC.ToString(); dGTablaHash.Rows[i].Cells[0].Value = tHashExt.getAtEntrada(i).getDirCubeta().ToString(); } ImprimeCubeta(0); } }
/**Busca una cubeta en la tabla Hash Extendible*/ private int buscaCubeta(long dirCub, CTablaHashExt tH) { foreach (CEntrada e in tH.getListEntradas()) if (e.getDirCubeta() == dirCub) return (tH.getListEntradas().IndexOf(e)); return (-1); }
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); }
private List<CCubeta> dameCubetas(CTablaHashExt tH) { List<CCubeta> L; L = new List<CCubeta>(); foreach (CEntrada e in tH.getListEntradas()) if (L.Contains(e.getCubeta()) == false) L.Add(e.getCubeta()); return (L); }
private CTablaHashExt creaTabla(CTablaHashExt tH) { CTablaHashExt nueva; CEntrada entAux; nueva = new CTablaHashExt(); nueva.setPrefAsociacion(tH.getPrefAsociacion()); nueva.setNumReg(tH.getNumReg()); foreach (CEntrada e in tH.getListEntradas()) { entAux = new CEntrada(); entAux.setID(e.getID()); entAux.setEspejo(e.getEspejo()); nueva.insEntrada(entAux); } return (nueva); }