/**´Méetodo principal para llevar a cabo la inserción de algun bloque*/ public bool Alta_HashDinamica(CNodoEntidad e, CBloque b) { /** * \param e Entidad a la que pertrnece el bloque * \param b Bloque Nuevo bloque a insertar * \return Retorna Falso(Si tuvo exito), True(Si ya existe el bloque alguna cubeta) * */ CCubeta cubetaAux; CEntrada entradaAux; bool res = false; if (e.getApCabDatos() == -1) { tHashExt = new CTablaHashExt(); cubetaAux = new CCubeta(-1, TAM_CUBETA); entradaAux = new CEntrada(cubetaAux, -1); tHashExt.insEntrada(entradaAux); cubetaAux.setDir(getArchivo().ENDF()); getArchivo().EscribeCubeta(cubetaAux); entradaAux.setDirCubeta(cubetaAux.getDir()); entradaAux.setDir(getArchivo().ENDF()); getArchivo().EscribeEntrada(entradaAux); tHashExt.setCabEntradas(entradaAux.getDir()); tHashExt.setDir(getArchivo().ENDF()); getArchivo().EscribeTablaHashExt(tHashExt); e.setApCabDatos(tHashExt.getDir()); getArchivo().escribeEntidad(e, e.getDir()); } else tHashExt = getArchivo().LeerTablaHashExt(e.getApCabDatos()); b.setDir(getArchivo().ENDF()); if ((res = InsBloque(b)) == false) { tHashExt.incNumReg(); getArchivo().EscribeTablaHashExt(tHashExt); } return (res); }
/**Se lee una objeto de la clase CTablaHashExt que sera utilizada el la Hash Dinámica*/ public CTablaHashExt LeerTablaHashExt(long dir) { CTablaHashExt tExt; CEntrada entradaAux; CCubeta cubetaAux; long aux; int posCub; entradaAux = null; tExt = null; if (dir != -1) { tExt = new CTablaHashExt(); br.BaseStream.Seek(dir, SeekOrigin.Begin); tExt.setDir(br.ReadInt64()); tExt.setPrefAsociacion(br.ReadInt32()); tExt.setCabEntradas(br.ReadInt64()); tExt.setNumReg(br.ReadInt32()); aux = tExt.getCabEntradas(); while (aux != -1) { entradaAux = LeerEntrada(aux); cubetaAux = LeerCubeta(entradaAux.getDirCubeta()); if ((posCub = buscaCubeta(cubetaAux.getDir(), tExt)) == -1) entradaAux.setCubeta(cubetaAux); else entradaAux.setCubeta(tExt.getAtEntrada(posCub).getCubeta()); tExt.insEntrada(entradaAux); aux = entradaAux.getSigEntrada(); } } return (tExt); }