/**Lectura de una objeto de la clase CEntrada para cargarlo en la hash dinamica*/
        public CEntrada LeerEntrada(long dirEnt)
        {
            CEntrada entradaAux = null;
            
            if (dirEnt != -1)
            {
                entradaAux = new CEntrada();

                br.BaseStream.Seek(dirEnt, SeekOrigin.Begin);

                entradaAux.setDir(br.ReadInt64());
                entradaAux.setID(br.ReadInt32() );
                entradaAux.setDirCubeta(br.ReadInt64());
                entradaAux.setEspejo(br.ReadInt32());
                entradaAux.setSigEntrada(br.ReadInt64());
            }

            return (entradaAux);
        }
        /**´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);
        }
        /**Escribe un objeto de la clase CEntrada utilizado en la organizacion dinamica*/
        public void EscribeEntrada(CEntrada e)
        {
            bw.BaseStream.Seek(e.getDir(), SeekOrigin.Begin);

            bw.Write(e.getDir());
            bw.Write(e.getID());
            bw.Write(e.getDirCubeta());
            bw.Write(e.getEspejo());
            bw.Write(e.getSigEntrada());
        }
Exemple #4
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);
        }
 public void DeleteEntrada(CEntrada e)
 {
     listaEntradas.Remove(e);
 }
 public void insEntrada(CEntrada nuevaEntrada) 
 {
     listaEntradas.Add(nuevaEntrada);
 }
 /**Se incrementa la tabla de direccionesa 2(i)*/
 public void Incrementate(CArchivo file)
 { 
     CEntrada nueva, aux, aux2;
     int numEntradas, idAux;
     
     numEntradas = listaEntradas.Count;
  
     for (int i = 0; i < numEntradas; i++)
     {
         aux = getAtEntrada(i);
         idAux = aux.getID();
         nueva = new CEntrada(aux.getCubeta(), getAtEntrada(getListEntradas().Count - 1).getID() + 1, file.ENDF());
         insEntrada(nueva);
         file.EscribeEntrada(nueva);
         aux2 = getAtEntrada(getListEntradas().Count - 2);
         aux2.setSigEntrada(nueva.getDir());
         file.EscribeEntrada(aux2);
     }
     
     EstableceEspejos(file);//Se actulizan los espejos
     file.EscribeTablaHashExt(this);
 }