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

        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }