Exemplo n.º 1
0
        /**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);
        }
Exemplo n.º 2
0
        /**Convierte una clave primaria(Binaria) a su representación decimal*/
        private int ConvertDecimal(CTablaHashExt tH , string cad)
        {
            int cont = cad.Length;
            int dec = 0;

            for (int i = tH.getPrefAsociacion(); i > 0 && cont != 0; i--, cont--)
                if (cad[cont - 1] != '0')
                    dec = dec + (int)(Math.Pow(2, (double)(cad.Length - cont)));

            return (dec);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        /**Se escribe la tabla hash extendible de la organización hash dinámica*/
        public void EscribeTablaHashExt(CTablaHashExt t)
        { 
            bw.BaseStream.Seek(t.getDir(), SeekOrigin.Begin);

            bw.Write(t.getDir());
            bw.Write(t.getPrefAsociacion());
            bw.Write(t.getCabEntradas());
            bw.Write(t.getNumReg());
        }
Exemplo n.º 5
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);

        }
Exemplo n.º 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);
        }