//constructor public ATRIBUTOS(List <Entidad> ent, Archivo arch) { ent_ = new List <Entidad>(); atrib_ = new List <Atrib>(); this.arch = arch; type = '-'; ent_ = ent; index_entidad = index_atributo = 0; InitializeComponent(); foreach (Entidad e in ent_) { Entidad.Items.Add(new String(e.GS_NombreEntidad)); } Entidad.Enabled = true; }
//modificar cajon public void modificaCajon(Archivo arch) { long dir_inicial = 0; dir_inicial = GS_dirInicial; FileStream stream = new FileStream(arch.GS_path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite); BinaryWriter writer = new BinaryWriter(stream); stream.Seek(dir_inicial, SeekOrigin.Begin); writer.Write(GS_dirInicial); writer.Write(GS_dirCubeta); writer.Write(GS_dirFinal); writer.Close(); writer.Dispose(); stream.Close(); stream.Dispose(); }
//modificar valores public void modificaValores(Archivo arch) { long dir_inicial = 0; dir_inicial = GS_dirInicial; FileStream stream = new FileStream(arch.GS_path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite); BinaryWriter writer = new BinaryWriter(stream); stream.Seek(dir_inicial, SeekOrigin.Begin); writer.Write(GS_dirInicial); writer.Write(dir_valor); writer.Write(valor_entero); writer.Write(dir_sig_cubeta); // escribe solamente en la 3a cubeta writer.Write(dir_final); writer.Close(); writer.Dispose(); stream.Close(); stream.Dispose(); }
//Asignar memoria a un cajon en el archivo public void asignaMemoriaCajon(Archivo arch, int i) { long dir_inicial = 0; dir_inicial = arch.Tam_archivo(); GS_dirInicial = dir_inicial; FileStream stream = new FileStream(arch.GS_path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite); BinaryWriter writer = new BinaryWriter(stream); stream.Seek(dir_inicial, SeekOrigin.Begin); writer.Write(GS_dirInicial); writer.Write(GS_dirCubeta); if (i < 2) { GS_dirFinal = GS_dirInicial + 24; } writer.Write(GS_dirFinal); writer.Close(); writer.Dispose(); stream.Close(); stream.Dispose(); }
//agrega valores a cubeta y cajones public void AgregaValores(DataGridView tabla, int filas, int posCelda, Archivo arch) { int c1, c2, c3; c1 = c2 = c3 = 0; for (int i = 0; i < filas; i++) { int modulo = Convert.ToInt32(tabla.Rows[i].Cells[posCelda].Value) % 3; switch (modulo) { case 0: reiniciaValores(c1++, modulo, Convert.ToInt32(tabla.Rows[i].Cells[posCelda].Value), Convert.ToInt64(tabla.Rows[i].Cells[0].Value), arch); break; case 1: reiniciaValores(c2++, modulo, Convert.ToInt32(tabla.Rows[i].Cells[posCelda].Value), Convert.ToInt64(tabla.Rows[i].Cells[0].Value), arch); break; case 2: reiniciaValores(c3++, modulo, Convert.ToInt32(tabla.Rows[i].Cells[posCelda].Value), Convert.ToInt64(tabla.Rows[i].Cells[0].Value), arch); break; } } }
//asigna memoria en archivo public void AsignaMemoria(Archivo arch) { long dir_inicial = 0; dir_inicial = arch.Tam_archivo(); GS_direccion = dir_inicial; FileStream stream = new FileStream(arch.GS_path, FileMode.Open, FileAccess.Write, FileShare.ReadWrite); BinaryWriter writer = new BinaryWriter(stream); stream.Seek(dir_inicial, SeekOrigin.Begin); writer.Write(GS_direccion); writer.Write(GS_tipo); foreach (Nodo n in GS_nodos) { writer.Write(n.GS_dirSiguiente); writer.Write(n.GS_valor); } writer.Write(GS_dirSiguiente); writer.Close(); writer.Dispose(); stream.Close(); stream.Dispose(); }
//asigna valor a las nuevas cubetas public void agregaValorenNuevaCubeta(Archivo arch, int caso, int valor, long dirValor) { int indice = 0; switch (caso) { case 0: if (cajon[0].GS_cubeta[2].GS_dirSigCubeta == -1) { cajon[0].AgregaCubetaDesbordada(arch); cajon[0].GS_cubeta[3].GS_valor = valor; cajon[0].GS_cubeta[3].GS_dirvalor = dirValor; } else { indice = cajon[0].GS_CantidadValores() - 1; if (indice >= 2 && indice < 5) { cajon[0].GS_cubeta[indice + 1].GS_valor = valor; cajon[0].GS_cubeta[indice + 1].GS_dirvalor = dirValor; } } break; case 1: if (cajon[1].GS_cubeta[2].GS_dirSigCubeta == -1) { cajon[1].AgregaCubetaDesbordada(arch); cajon[1].GS_cubeta[3].GS_valor = valor; cajon[1].GS_cubeta[3].GS_dirvalor = dirValor; } else { indice = cajon[1].GS_CantidadValores() - 1; if (indice >= 2 && indice < 5) { cajon[1].GS_cubeta[indice + 1].GS_valor = valor; cajon[1].GS_cubeta[indice + 1].GS_dirvalor = dirValor; } } break; case 2: if (cajon[2].GS_cubeta[2].GS_dirSigCubeta == -1) { cajon[2].AgregaCubetaDesbordada(arch); cajon[2].GS_cubeta[3].GS_valor = valor; cajon[2].GS_cubeta[3].GS_dirvalor = dirValor; } else { indice = cajon[2].GS_CantidadValores() - 1; if (indice >= 2 && indice < 5) { cajon[2].GS_cubeta[indice + 1].GS_valor = valor; cajon[2].GS_cubeta[indice + 1].GS_dirvalor = dirValor; } } break; } modifica(caso, arch); }
//reinicia valores especificos public void reiniciaValores(int contador, int modulo, int valor, long dirValor, Archivo arch) { if (cajon[modulo].GS_dirCubeta != -1) { cajon[modulo].GS_cubeta[contador].GS_valor = valor; cajon[modulo].GS_cubeta[contador].GS_dirvalor = dirValor; } else { cajon[modulo].AgregaCubetaEnteros(arch); cajon[modulo].GS_cubeta[contador].GS_valor = valor; cajon[modulo].GS_cubeta[contador].GS_dirvalor = dirValor; } modifica(modulo, arch); }
//funcion para agregar valores enteros public void agregaValorEntero(int valor, long dirValor, Archivo arch) { int modulo = valor % 3; int indice = 0; switch (modulo) { case 0: cajon[0].GS_color = Color.Red; indice = cajon[0].GS_CantidadValores() - 1; if (indice >= 0 && indice < 2) { cajon[0].GS_cubeta[indice + 1].GS_valor = valor; cajon[0].GS_cubeta[indice + 1].GS_dirvalor = dirValor; } else if (indice < 0) { cajon[0].GS_cubeta[0].GS_valor = valor; cajon[0].GS_cubeta[0].GS_dirvalor = dirValor; } else { agregaValorenNuevaCubeta(arch, modulo, valor, dirValor); } break; case 1: cajon[1].GS_color = Color.Purple; indice = cajon[1].GS_CantidadValores() - 1; if (indice >= 0 && indice < 2 && cajon[1].GS_dirCubeta != -1) { cajon[1].GS_cubeta[indice + 1].GS_valor = valor; cajon[1].GS_cubeta[indice + 1].GS_dirvalor = dirValor; } else if (indice < 0 && cajon[1].GS_dirCubeta == -1) { cajon[1].AgregaCubetaEnteros(arch); indice = cajon[1].GS_CantidadValores() - 1; if (indice < 0) { cajon[1].GS_cubeta[0].GS_valor = valor; cajon[1].GS_cubeta[0].GS_dirvalor = dirValor; } } else { agregaValorenNuevaCubeta(arch, modulo, valor, dirValor); } break; case 2: cajon[2].GS_color = Color.Blue; indice = cajon[2].GS_CantidadValores() - 1; if (indice >= 0 && indice < 2 && cajon[2].GS_dirCubeta != -1) { cajon[2].GS_cubeta[indice + 1].GS_valor = valor; cajon[2].GS_cubeta[indice + 1].GS_dirvalor = dirValor; } // inicializar cubeta else if (indice < 0 && cajon[2].GS_dirCubeta == -1) { cajon[2].AgregaCubetaEnteros(arch); indice = cajon[2].GS_CantidadValores() - 1; if (indice < 0) { cajon[2].GS_cubeta[0].GS_valor = valor; cajon[2].GS_cubeta[0].GS_dirvalor = dirValor; } } else { agregaValorenNuevaCubeta(arch, modulo, valor, dirValor); } break; } modifica(modulo, arch); }