Exemple #1
0
 internal Nodo(int orden, int posicion, int padre, IGaseosasTamañoTextoFijo <T> gaseosa)
 {
     if ((orden < OrdenMinimo) || (orden > OrdenMaximo))
     {
         throw new ArgumentException("No es valido el tamaño");
     }
     if (posicion < 0)
     {
         throw new ArgumentOutOfRangeException("Posicion invalida");
     }
     Orden = orden; Posicion = posicion; Padre = padre;
     LimpiarNodo(gaseosa);
 }
Exemple #2
0
        private void LimpiarNodo(IGaseosasTamañoTextoFijo <T> gaseosas)
        {
            Hijos = new List <int>();

            for (int i = 0; i < Orden; i++)
            {
                Hijos.Add(Utilidades.apuntadoVacio);
            }
            Llaves = new List <string>();

            for (int i = 0; i < Orden - 1; i++)
            {
                Llaves.Add("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
            }

            Datos = new List <T>();

            for (int i = 0; i < Orden - 1; i++)
            {
                Datos.Add(gaseosas.CreateNulo());
            }
        }
Exemple #3
0
        public ArbolBAsterisk(int orden, string nombreArchivo, IGaseosasTamañoTextoFijo <T> bebidas)
        {
            _archivoNombre       = nombreArchivo;
            _gaseosa             = bebidas;
            _archivo             = new FileStream(_archivoNombre, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
            _raiz                = Utilidades.LeerEntero(_archivo, 0);
            _ultimaPosicionLibre = Utilidades.LeerEntero(_archivo, 1);
            Tamaño               = Utilidades.LeerEntero(_archivo, 2);
            Orden                = Utilidades.LeerEntero(_archivo, 3);
            Altura               = Utilidades.LeerEntero(_archivo, 4);

            if (_ultimaPosicionLibre == Utilidades.apuntadoVacio)
            {
                _ultimaPosicionLibre = 0;
            }
            if (Tamaño == Utilidades.apuntadoVacio)
            {
                Tamaño = 0;
            }
            if (Orden == Utilidades.apuntadoVacio)
            {
                Orden = orden;
            }
            if (Altura == Utilidades.apuntadoVacio)
            {
                Altura = 1;
            }
            if (_raiz == Utilidades.apuntadoVacio)
            {
                Nodo <T> nodoCabeza = new Nodo <T>(Orden, _ultimaPosicionLibre, Utilidades.apuntadoVacio, _gaseosa);
                _ultimaPosicionLibre++;
                _raiz = nodoCabeza.Posicion;
                nodoCabeza.GuardarNodoEnDisco(_archivo, _tamañoEncabezadoBinario);
            }
            GuardarEncabezado();
        }
Exemple #4
0
 internal void LimpiarNodoEnDisco(FileStream archivo, int tamañoEncabezado, IGaseosasTamañoTextoFijo <T> gaseosas)
 {
     LimpiarNodo(gaseosas);
     GuardarNodoEnDisco(archivo, tamañoEncabezado);
 }
Exemple #5
0
        internal static Nodo <T> LeerNodoDesdeDisco(FileStream archivo, int tamañoEncabezado, int orden, int posicion, IGaseosasTamañoTextoFijo <T> gaseosas)
        {
            if (archivo == null)
            {
                throw new ArgumentNullException("archivo");
            }
            if (tamañoEncabezado < 0)
            {
                throw new ArgumentOutOfRangeException("tamañoEncabezado");
            }
            if ((orden < OrdenMinimo) || (orden > OrdenMaximo))
            {
                throw new ArgumentOutOfRangeException("orden");
            }
            if (posicion < 0)
            {
                throw new ArgumentOutOfRangeException("posicion");
            }
            if (gaseosas == null)
            {
                throw new ArgumentNullException("fabrica");
            }
            Nodo <T> nuevoNodo = new Nodo <T>(orden, posicion, 0, gaseosas);

            byte[] datosBinario = new byte[nuevoNodo.TamañoEnBytes];
            string datosCadena  = "";

            string[] datosSeparados        = null;
            int      PosicionEnDatosCadena = 1;

            archivo.Seek(nuevoNodo.CalcularPosicionEnDisco(tamañoEncabezado), SeekOrigin.Begin);
            archivo.Read(datosBinario, 0, nuevoNodo.TamañoEnBytes);
            datosCadena     = Utilidades.ConvertirBinarioYTexto(datosBinario);
            datosCadena     = datosCadena.Replace(Utilidades.TextoNuevaLinea, "");
            datosCadena     = datosCadena.Replace("".PadRight(3, Utilidades.TextoSeparador), Utilidades.TextoSeparador.ToString());
            datosSeparados  = datosCadena.Split(Utilidades.TextoSeparador);
            nuevoNodo.Padre = Convert.ToInt32(datosSeparados[PosicionEnDatosCadena]);
            PosicionEnDatosCadena++;
            for (int i = 0; i < nuevoNodo.Hijos.Count; i++)
            {
                nuevoNodo.Hijos[i] = Convert.ToInt32(datosSeparados[PosicionEnDatosCadena]);
                PosicionEnDatosCadena++;
            }
            for (int i = 0; i < nuevoNodo.Llaves.Count; i++)
            {
                nuevoNodo.Llaves[i] = datosSeparados[PosicionEnDatosCadena];
                PosicionEnDatosCadena++;
            }
            for (int i = 0; i < nuevoNodo.Datos.Count; i++)
            {
                datosSeparados[PosicionEnDatosCadena] = datosSeparados[PosicionEnDatosCadena].Replace(Utilidades.TextoSustitutoSeparador, Utilidades.TextoSeparador);
                nuevoNodo.Datos[i] = gaseosas.Create(datosSeparados[PosicionEnDatosCadena]);
                PosicionEnDatosCadena++;
            }
            return(nuevoNodo);
        }