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