Example #1
0
        /**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);
                }
        }