Ejemplo n.º 1
0
        /**Copia toda la lista de bloques al nuevo archivo*/
        public void CopiarSec(CArchivo fileOri, CArchivo fileNew, long dirEnt, int tamBloque, ref List<CBloque> listBloque)
        {
            CBloque bloqueAux, bloqueNuevo;
            
            while (dirEnt != -1)
            {
                bloqueAux = fileOri.leerBloque(dirEnt, tamBloque);
                bloqueNuevo = new CBloque();
                bloqueNuevo.setBloque(bloqueAux.getBloque());
                bloqueNuevo.setTamBlo(tamBloque);
                bloqueNuevo.setDir(fileNew.ENDF());
                fileNew.EscribeBloque(bloqueNuevo, fileNew.ENDF());
                listBloque.Add(bloqueNuevo);
                dirEnt = bloqueAux.getSigBlo();
            }

            for (int i = 0; i < listBloque.Count - 1; i++)
            {
                listBloque[i].setSigBlo(listBloque[i + 1].getDir());
                fileNew.EscribeBloque(listBloque[i], listBloque[i].getDir());
            }
        }
Ejemplo n.º 2
0
        /**Crea cada uno de los nodos de arbol en forma recursiva, asindo un recorrido en preorden
         * y va agranagando todos estos nodos al nuevo archivo*/
        public long generaArbolRec(CArchivo aO, CArchivo aD, int tamBloque, long dirCab)
        {
            CNodo nodoAux, nuevoNodo;
            CBloque bloqueAux,bloqueNuevo;
            long dirNodo = -1;
            int LS;

            if (dirCab != -1)
            {
                nodoAux = aO.leerNodo(dirCab);
                nuevoNodo = creaNodo(aO,aD,nodoAux);
                
                if (nodoAux.getTipoNodo() == HOJA || nodoAux.getTipoNodo() == RAIZHOJA)
                    LS = nodoAux.getNumElemnt();
                else
                    LS = nodoAux.getNumElemnt() + 1;

                for (int i = 0; i < LS; i++)
                    if (nodoAux.getTipoNodo() == HOJA || nodoAux.getTipoNodo() == RAIZHOJA)
                    {
                        bloqueAux = aO.leerBloque(nodoAux.getAtDirNodo(i), tamBloque);
                        bloqueNuevo = new CBloque();
                        bloqueNuevo.setBloque(bloqueAux.getBloque());
                        bloqueNuevo.setTamBlo(tamBloque);
                        bloqueNuevo.setDir(aD.ENDF());
                        aD.EscribeBloque(bloqueNuevo, aD.ENDF());
                        nuevoNodo.setAtDirNodo(i, bloqueNuevo.getDir());
                    }
                    else
                       nuevoNodo.setAtDirNodo(i,generaArbolRec(aO,aD,tamBloque,nodoAux.getAtDirNodo(i)));

               aD.escribeNodo(nuevoNodo);
               dirNodo = nuevoNodo.getDir();
             
            }

            return(dirNodo);   
        }
        /** \brief Alta de un registro*/
        public bool AltaOS()
        {
            long ptrAux, ptrAnt = 0;
            bool res = false;
            bool band = true;
            CBloque bloqueAux, bloqueAnt = null;

            getArchivo().AbrirArchivo();

            ptrAux = ent.getApCabDatos();
            //Se busca en la ubicacion del bloque en el archivo.
            while (ptrAux != -1 && band == true && res == false)
            {
                bloqueAux = getArchivo().leerBloque(ptrAux, tamBloque);
                bloqueAux.setTamBlo(tamBloque);
                
                switch(bloque.ComparateTo(bloqueAux))
                {
                    case -1:
                        res = band = true;
                    break;
                    case 0:
                        res = band = false;
                    break;
                    case 1:
                        ptrAnt = ptrAux;
                        bloqueAnt = bloqueAux;
                        ptrAux = bloqueAux.getSigBlo();
                    break;
                }

            }

            if (band == true)//No hay bloques repetidos
            {
                if (ptrAux == ent.getApCabDatos())//Se insertara en la primera posición
                {
                    ent.setApCabDatos(getArchivo().ENDF());
                    getArchivo().escribeEntidad(ent, ent.getDir());
                }
                else
                {
                    bloqueAnt.setSigBlo(getArchivo().ENDF());
                    getArchivo().EscribeBloque(bloqueAnt, ptrAnt);
                }
            }

            bloque.setSigBlo(ptrAux);
            getArchivo().EscribeBloque(bloque, getArchivo().ENDF());
        
            getArchivo().CerrarArchivo();

            return (res);
        }