/**Escribe una tabla hash*/ public void EscribeTablaHash(CHash tabla) { bw.BaseStream.Seek(tabla.getDir(), SeekOrigin.Begin); bw.Write(tabla.getDir()); bw.Write(tabla.getTamaño()); bw.Write(tabla.getNumCubetas()); for (int i = 0; i < tabla.getTamaño(); bw.Write(tabla.getAtDirCubeta(i)), i++) ; }
/**\brief Eliima un bloque de datos*/ private void EliminaBloque(CHash tablaH, CBloque b) { /** * \details * Se lleva a cabo la eliminación de algun registro. Aplicando la función has en la tabla y la cubeta * \param tablaH Tabla hash donde existe la cubeta * \param b Bloque a eliminar * */ Cubeta cubetaAux, cubetaAnt; long dirAux; cubetaAnt = cubetaAux = null; pH = pC = -1; FuncionHash(b, ref pH, ref pC);//Se hacen las funciones has en la tabla has y la cubeta dirAux = tablaH.getAtDirCubeta(pH); while (dirAux != -1)//Se intenta eliminar el registro { cubetaAux = getArchivo().LeerCubetaHashEstatica(dirAux); if (RegEliminado(cubetaAux, b, pC) == false) { cubetaAnt = cubetaAux; dirAux = cubetaAux.getSigCubeta(); } else break; } if (cubetaAux.getNumDirBloques() == 0) if (dirAux == tablaH.getAtDirCubeta(pH)) { tablaH.setAtDirCubeta(pH, cubetaAux.getSigCubeta()); if (cubetaAux.getSigCubeta() == -1) { tablaH.decNumCubetas(); cubetasRestantes = tablaH.getNumCubetas(); } getArchivo().EscribeTablaHash(tablaH); } else { cubetaAnt.setSigCubeta(cubetaAux.getSigCubeta()); getArchivo().EscribeCubetaHashEstatia(cubetaAnt); } }