コード例 #1
0
ファイル: FormOrg.cs プロジェクト: miguellgt/file-structures
        /**Función de Mantenimiento para la Hash Dinamica*/
        private void MantenimientoHashDinamica(CArchivo fileOri, CArchivo fileNew, CNodoEntidad ent, CNodoEntidad entC, int tamBloque)
        {
            CTablaHashExt tH, nuevaTH;
            List<CCubeta> listCub;
            List<int> lE;
            CCubeta nuevaCub;
            long cabDatos;

            cabDatos = ent.getApCabDatos();

            if (cabDatos != -1)
            {
                tH = fileOri.LeerTablaHashExt(cabDatos);
                nuevaTH = creaTabla(tH);

                listCub = dameCubetas(tH);
                foreach (CCubeta c in listCub)
                {
                    lE = buscaEntradas(tH, c);
                    nuevaCub = creaCubeta(c, fileNew, fileOri);

                    foreach (int i in lE)
                        nuevaTH.getAtEntrada(i).setCubeta(nuevaCub);
                }

                foreach (CEntrada e in nuevaTH.getListEntradas())
                {
                    e.setDir(fileNew.ENDF());
                    fileNew.EscribeEntrada(e);
                }

                for (int i = 0; i < nuevaTH.getListEntradas().Count - 1; i++)
                {
                    nuevaTH.getAtEntrada(i).setSigEntrada(nuevaTH.getAtEntrada(i + 1).getDir());
                    fileNew.EscribeEntrada(nuevaTH.getAtEntrada(i));
                }

                nuevaTH.setCabEntradas(nuevaTH.getAtEntrada(0).getDir());
                nuevaTH.setDir(fileNew.ENDF());
                fileNew.EscribeTablaHashExt(nuevaTH);
                entC.setApCabDatos(nuevaTH.getDir());
                fileNew.escribeEntidad(entC,entC.getDir());
            }
        }
コード例 #2
0
 /**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);
 }
コード例 #3
0
        /**Se establcen los espejos de cada entrada*/
        public void EstableceEspejos(CArchivo file)
        {
            int m, tam,i;

            tam = listaEntradas.Count;
            m = tam / 2;

            for (i = 0; i < m; i++)
            {
                listaEntradas[i].setEspejo(m+i);
                listaEntradas[m+i].setEspejo(i);
                file.EscribeEntrada(listaEntradas[i]);
                file.EscribeEntrada(listaEntradas[m+i]);
            }
        }
コード例 #4
0
        /**Dobla la tabla, eliminado la mitad de entradas de la tabla hash dinamica
           y actulizando los espejos.
         */
        public void Doblate(CArchivo file)
        {
            CEntrada entAux;
            int ultimaEnt;

            ultimaEnt = (listaEntradas.Count / 2) - 1;
            entAux = getAtEntrada(ultimaEnt);

            entAux.setSigEntrada(-1);
            decPrefAsociacion();

            for (int i = (ultimaEnt * 2) + 1; i > ultimaEnt; i--)
                listaEntradas.Remove(getAtEntrada(i));
            
            file.EscribeEntrada(entAux);
            file.EscribeTablaHashExt(this);
            EstableceEspejos(file);
        }