/**Se incrementa la tabla de direccionesa 2(i)*/ public void Incrementate(CArchivo file) { CEntrada nueva, aux, aux2; int numEntradas, idAux; numEntradas = listaEntradas.Count; for (int i = 0; i < numEntradas; i++) { aux = getAtEntrada(i); idAux = aux.getID(); nueva = new CEntrada(aux.getCubeta(), getAtEntrada(getListEntradas().Count - 1).getID() + 1, file.ENDF()); insEntrada(nueva); file.EscribeEntrada(nueva); aux2 = getAtEntrada(getListEntradas().Count - 2); aux2.setSigEntrada(nueva.getDir()); file.EscribeEntrada(aux2); } EstableceEspejos(file);//Se actulizan los espejos file.EscribeTablaHashExt(this); }
/**Función de Mantenimiento para la Hash Dinamica*/ private void MantenimientoHashDinamica(CArchivo fileOri, CArchivo fileNew, CNodoEntidad ent, CNodoEntidad entC, int tamBloque) { CTablaHashExt tH, nuevaTH; List<CCubeta> listCub; List<int> lE; CCubeta nuevaCub; long cabDatos; cabDatos = ent.getApCabDatos(); if (cabDatos != -1) { tH = fileOri.LeerTablaHashExt(cabDatos); nuevaTH = creaTabla(tH); listCub = dameCubetas(tH); foreach (CCubeta c in listCub) { lE = buscaEntradas(tH, c); nuevaCub = creaCubeta(c, fileNew, fileOri); foreach (int i in lE) nuevaTH.getAtEntrada(i).setCubeta(nuevaCub); } foreach (CEntrada e in nuevaTH.getListEntradas()) { e.setDir(fileNew.ENDF()); fileNew.EscribeEntrada(e); } for (int i = 0; i < nuevaTH.getListEntradas().Count - 1; i++) { nuevaTH.getAtEntrada(i).setSigEntrada(nuevaTH.getAtEntrada(i + 1).getDir()); fileNew.EscribeEntrada(nuevaTH.getAtEntrada(i)); } nuevaTH.setCabEntradas(nuevaTH.getAtEntrada(0).getDir()); nuevaTH.setDir(fileNew.ENDF()); fileNew.EscribeTablaHashExt(nuevaTH); entC.setApCabDatos(nuevaTH.getDir()); fileNew.escribeEntidad(entC,entC.getDir()); } }
/**Dobla la tabla, eliminado la mitad de entradas de la tabla hash dinamica y actulizando los espejos. */ public void Doblate(CArchivo file) { CEntrada entAux; int ultimaEnt; ultimaEnt = (listaEntradas.Count / 2) - 1; entAux = getAtEntrada(ultimaEnt); entAux.setSigEntrada(-1); decPrefAsociacion(); for (int i = (ultimaEnt * 2) + 1; i > ultimaEnt; i--) listaEntradas.Remove(getAtEntrada(i)); file.EscribeEntrada(entAux); file.EscribeTablaHashExt(this); EstableceEspejos(file); }