public Cubeta(Cubeta c) { noRegistro = 9; dirSigCubeta = -1; registros = new List <CRegistro>(); direccion = 0; }
private void MuestraDatos() { Cubeta C = new Cubeta(tabla.NoRegistros); long dirSig; int j = 0; for (int i = 0; i < tabla.NoCubetas; i++) { if (tabla.Cajones[i] != -1) { dirSig = tabla.Cajones[i]; do { archivo.LeerCubeta(dirSig, C); for (int k = 0; k < C.NoRegistros; k++, j++) { //if(dataGridView1.Rows[j] == null) dataGridView1.Rows.Add(); dataGridView1.Rows[j].Cells[0].Value = C.Registros[k].A; dataGridView1.Rows[j].Cells[1].Value = C.Registros[k].D; dataGridView1.Rows[j].Cells[2].Value = C.Registros[k].B; dataGridView1.Rows[j].Cells[3].Value = C.Registros[k].Clave; dataGridView1.Rows[j].Cells[4].Value = C.NoRegistros; dataGridView1.Rows[j].Cells[5].Value = C.DirSigCubeta; } dirSig = C.DirSigCubeta; C = new Cubeta(tabla.NoRegistros); } while (dirSig != -1); } } }
public void LeerCubeta(long dir, Cubeta C) { using (fs = new FileStream(path + nombre, FileMode.Open, FileAccess.Read)) { C.Direccion = dir; fs.Seek(dir, SeekOrigin.Begin); byte[] bytes = new byte[sizeof(int)]; fs.Read(bytes, 0, sizeof(int)); int NoRegistros = BitConverter.ToInt32(bytes, 0); bytes = new byte[sizeof(long)]; fs.Read(bytes, 0, sizeof(long)); C.DirSigCubeta = BitConverter.ToInt64(bytes, 0); for (int i = 0; i < NoRegistros; i++) { bytes = new byte[sizeof(int)]; fs.Read(bytes, 0, sizeof(int)); int clave = BitConverter.ToInt32(bytes, 0); bytes = new byte[sizeof(int)]; fs.Read(bytes, 0, sizeof(int)); int a = BitConverter.ToInt32(bytes, 0); bytes = new byte[sizeof(long)]; fs.Read(bytes, 0, sizeof(long)); long d = BitConverter.ToInt64(bytes, 0); bytes = new byte[10]; fs.Read(bytes, 0, 10); string s = Encoding.ASCII.GetString(bytes, 0, bytes.Length).TrimEnd('\0'); C.Insertar(new CRegistro(clave, a, d, s)); } } }
public void InsertaRegistro(CRegistro registro) { Cubeta C = new Cubeta(noRegistros); Archivo archivo = new Archivo(nombre, path); int posicion = tabla.Hash(registro.Clave); long dirC = tabla.Cajones[posicion]; if (dirC == -1) { dirC = tabla.PtrsCubetaVacia; if (dirC != -1) { archivo.LeerCubeta(dirC, C); tabla.PtrsCubetaVacia = C.DirSigCubeta; C.DirSigCubeta = -1; } C.Insertar(registro); C.Direccion = tabla.Cajones[posicion] = archivo.EscribirCubeta(C); archivo.EscribirTablaH(tabla); } else { long ant; dirC = tabla.Cajones[posicion]; do { C = new Cubeta(noRegistros); archivo.LeerCubeta(dirC, C); ant = dirC; dirC = C.DirSigCubeta; } while (C.NoRegistros >= noRegistros && dirC != -1); if (C.NoRegistros < noRegistros) { C.Insertar(registro); C.Direccion = ant; archivo.EscribirCubeta(C); } else { Cubeta cc = new Cubeta(noRegistros); if (tabla.PtrsCubetaVacia != -1) { archivo.LeerCubeta(tabla.PtrsCubetaVacia, cc); tabla.PtrsCubetaVacia = cc.DirSigCubeta; cc.DirSigCubeta = -1; } cc.Insertar(registro); C.Direccion = ant; C.DirSigCubeta = cc.Direccion = archivo.EscribirCubeta(cc); archivo.EscribirCubeta(C); } // archivo.LeerCubeta(dirC, C); // C.InsertaRegistro(registro); } }
public void EliminaRegistro(int clave) { bool encontrado = false; int p = tabla.Hash(clave); long dirC = tabla.Cajones[p]; Cubeta C = new Cubeta(noRegistros); Cubeta ant = new Cubeta(noRegistros); Archivo archivo = new Archivo(nombre, path); if (dirC != -1) { do { archivo.LeerCubeta(dirC, C); encontrado = C.Encontrado(clave); if (!encontrado) { ant = C; dirC = C.DirSigCubeta; C = new Cubeta(noRegistros); } } while (!encontrado && dirC != -1); if (encontrado) { C.EliminaRegistro(clave); if (C.Vacio()) { if (C.Direccion == tabla.Cajones[p]) { tabla.Cajones[p] = C.DirSigCubeta; } else { ant.DirSigCubeta = C.DirSigCubeta; archivo.EscribirCubeta(ant); } C.DirSigCubeta = tabla.PtrsCubetaVacia; tabla.PtrsCubetaVacia = C.Direccion; archivo.EscribirTablaH(tabla); } archivo.EscribirCubeta(C); } } }
public long EscribirCubeta(Cubeta C /*, byte[] bytes*/) { long d; using (fs = new FileStream(path + nombre, FileMode.Open, FileAccess.ReadWrite)) { if (C.Direccion != -1) { fs.Seek(C.Direccion, SeekOrigin.Begin); } else { fs.Seek(0, SeekOrigin.End); } d = fs.Position; byte[] bytes = new byte[10]; using (var bw = new BinaryWriter(fs)) { bw.Write(C.NoRegistros); bw.Write(C.DirSigCubeta); for (int i = 0; i < C.Max_reg; i++) { if (i < C.NoRegistros) { bw.Write(C.Registros[i].Clave); bw.Write(C.Registros[i].A); bw.Write(C.Registros[i].D); Encoding.ASCII.GetBytes(C.Registros[i].B, 0, C.Registros[i].B.Length, bytes, 0); bw.Write(bytes); } else { bw.Write((int)-1); bw.Write((int)-1); bw.Write((long)-1); bw.Write(bytes); } } } } return(d); }
public void InsertaRegistro(CRegistro registro) { Cubeta C = new Cubeta(noRegistros); Archivo a = new Archivo("", ""); int posicion = Hash(registro.Clave); long dirC = cajones[posicion]; if (dirC == -1) { dirC = ptrsCubetaVacia; if (dirC != -1) { a.LeerCubeta(cajones[posicion], C); ptrsCubetaVacia = C.DirSigCubeta; C.DirSigCubeta = -1; } C.InsertaRegistro(registro); //a = a eso cajones[posicion] = C.Direccion; // o cajones[posicion] = C.InsertaRegistro(registro); // cajones[posicion] = a.EscribirCubeta(C); a.EscribirTablaH(this); } else { long ant; dirC = cajones[posicion]; do { a.LeerCubeta(dirC, C); ant = dirC; } while ((dirC = C.DirSigCubeta) != -1 && C.Registros[C.Registros.Count - 1].Clave < registro.Clave); if (C.Registros[C.Registros.Count - 1].Clave > registro.Clave) { if (C.Registros[0].Clave > registro.Clave) { dirC = ant; } } a.LeerCubeta(dirC, C); C.InsertaRegistro(registro); } }
public void EliminaRegistro(int clave) { bool terminado = false; Archivo a = new Archivo("", ""); int p = Hash(clave); long dirC = cajones[p]; Cubeta C = new Cubeta(noRegistros); Cubeta ant = new Cubeta(noRegistros); if (dirC != -1) { do { a.LeerCubeta(dirC, C); if (C.Registros[C.Registros.Count - 1].Clave >= clave || dirC == -1) { terminado = true; if (C.EliminaRegistro(clave)) { if (C.Vacio()) { if (C.Direccion == cajones[p]) { cajones[p] = C.DirSigCubeta; } else { ant.DirSigCubeta = C.DirSigCubeta; } C.DirSigCubeta = ptrsCubetaVacia; ptrsCubetaVacia = C.Direccion; } } } else { ant = C; dirC = C.DirSigCubeta; } } while (!terminado); } }
public long InsertaRegistro(CRegistro registro /*, string path*/) { Archivo a = new Archivo("", ""); //maneja desbordamiento y insercion ordenanda long dir, ant, d = direccion; if (registros.Count < MAX_REG) { Inserta(registro); d = a.EscribirCubeta(this); //direccion = d = a.EscribirCubeta(this); checar retorno de cubeta con valor actualizdo } else { Cubeta cc = new Cubeta(MAX_REG); CRegistro regAux; if (registros[registros.Count - 1].Clave > registro.Clave) { regAux = new CRegistro(registros[registros.Count - 1]); registros.RemoveAt(registros.Count - 1); Inserta(registro); d = a.EscribirCubeta(this); } else { regAux = registro; } dir = dirSigCubeta; if (dir != -1) { a.LeerCubeta(dir, cc); cc.InsertaRegistro(regAux); } else { //crear cubeta y encadena dirSigCubeta = cc.InsertaRegistro(regAux); } } return(d); }