コード例 #1
0
        /**Funciión Hash, implementada con el modulo*/
        public int FuncionHash(CBloque b)
        {
            //Aplicando modulo
            Object clave = b.dameClavePrim();
            int pos, c = 0;

            pos = -1;

            switch (b.getTipoCA())
            {
                case 3: //Entero
                    pos = (int)clave % TAM_CUBETA;
                break;
                case 5: //Long
                    pos = (int)((long)clave)%TAM_CUBETA;
                break;
                case 7: //Cadena
                    pos = Math.Abs(((string)clave).GetHashCode())%TAM_CUBETA;
                break;
            }

            return (pos);
        }
コード例 #2
0
        /**Implemeta un función hash con la tecnica del plegamiento para obtener la posición
         * donde se insertara la nueva deirección del registro en la cubeta y la tabla hash*/
        public void FuncionHash(CBloque b, ref int fH, ref int fC)
        {
           
            Object clave = b.dameClavePrim();
            int c = 0;

            switch (b.getTipoCA())
            {
                case 3: //Entero
                   c = (int)clave;
                break;
                case 5: //Long
                    c = (int)((long)clave);
                break;
                case 7: //Cadena
                    c =  Math.Abs(((string)clave).GetHashCode());
                break;
            }

            while (c / 10 != 0)
                c = plegamiento(c);

            fC = fH = c;

            if (fC >= TAM_CUBETA)
            {
                fC = (fC - TAM_CUBETA) - 2;
                if (fC < 0)
                    fC = 0;
            }
            
            if (fH >= TAM_HASH)
               fH -= TAM_HASH;

        }
コード例 #3
0
        /**Médoto principal para eliminar un  registro*/
        public void eliminaABplus(CNodoEntidad e, CBloque b)
        {
            long dirCabNueva = -1;

            if (eliminaClaveRec(e.getApCabDatos(), b.dameClavePrim(), ref dirCabNueva))
            {
                e.setApCabDatos(dirCabNueva);
                getArchivo().escribeEntidad(e, e.getDir());
            }
        }
コード例 #4
0
        /**\brief Modificacion de algun registro*/
        public bool actualizaRegistro(CBloque nuevo, long posN)
        {
            bool res = true;
            int b = -1;
            List<CNodoEntidad> lR;
            List<CBloque> lB;

            // El registro que se modifico no altero la CP, por lo tanto 
            // se sobreescribe el nuevo registro en la direccion correspondiente
            if (nuevo.ComparateTo(bloqueOriginal) == 0)
            {
                getArchivo().EscribeBloque(nuevo, dirBO);
                res = false;
            }
            else
            {
                //La clave primaria se ha modificado
                if (!(res = buscaBloqueRep(ent.getApCabDatos(), bloqueOriginal.dameClavePrim(), nuevo.dameClavePrim(),ref b)))
                {
                    eliminaABplus(ent, bloqueOriginal);
                    AltaArbolBplus(ent, nuevo, getArchivo().ENDF());
                    
                    lR = new List<CNodoEntidad>();
                    lR = buscaRelacionesEnt(ent);

                    if (lR.Count > 0)
                        foreach (CNodoEntidad nE in lR)
                        {
                            lB = new List<CBloque>();
                            dameBloques(ref lB, nE, bloqueOriginal, ent);
                            foreach (CBloque nB in lB)
                            {
                                nB.setClaveExt(nuevo.dameClave());
                                getArchivo().EscribeBloque(nB, nB.getDir());
                            }
                        }
                }
            }

            return (res);
        }
コード例 #5
0
        /**Metodo principal para la inserción de la clave junto con su bloque de datos*/
        public bool AltaArbolBplus(CNodoEntidad e, CBloque b, long posB)
        {
            CNodo nuevo = null;
            Object clave;
            bool res = true;
            long dirClave = -1;

            clave = b.dameClavePrim();

            if (e.getApCabDatos() == -1)//Si no hay algun arbol se crea la primera pagina
            {
                nuevo = new CNodo(RAIZHOJA, GRADO);
                nuevo.setDir(getArchivo().ENDF());
                nuevo.setTipoClave(b.getTipoCA());
                getArchivo().escribeNodo(nuevo);
                e.setApCabDatos(nuevo.getDir());
                getArchivo().escribeEntidad(e, e.getDir());
            }
            else
            {
                bool bandera = false;

                res = EmpujaDato(e.getApCabDatos(), ref clave, ref dirClave, b, posB, ref nuevo, ref bandera);

                if (bandera == true)//La raiz se partido
                {
                    CNodo nuevaRaiz;
                    nuevaRaiz = new CNodo(RAIZ, GRADO);

                    nuevaRaiz.setAtClave(0, clave);
                    nuevaRaiz.setAtDirClaves(0, dirClave);
                    nuevaRaiz.setAtDirNodo(0, ent.getApCabDatos());
                    nuevaRaiz.setAtDirNodo(1, nuevo.getDir());
                    nuevaRaiz.setDir(getArchivo().ENDF());
                    nuevaRaiz.setNumElemnt(1);
                    nuevaRaiz.setTipoClave(b.getTipoCA());
                    getArchivo().escribeNodo(nuevaRaiz);
                    e.setApCabDatos(nuevaRaiz.getDir());
                    getArchivo().escribeEntidad(e, e.getDir());
                }
            }

            return (res);
        }
コード例 #6
0
        private void tablaDatos_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            posReg = e.RowIndex;

            if (edicion == false)
                dirBO = -1;
            
            for (int i = 0; i < tablaDatos.Rows.Count; i++)
                if (i != e.RowIndex)
                {
                    tablaDatos.Rows[i].ReadOnly = true;
                    for (int j = 0; j < tablaDatos.Columns.Count; j++)
                        tablaDatos.Rows[i].Cells[j].Style.BackColor = Color.Gray;
                }
            
            if (tablaDatos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null && nuevoReg != true && edicion == false)
                nuevoReg = true;

            if (nuevoReg == false && tablaDatos.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null && edicion != true)
            {
                bloqueOriginal = creaBloqueDatos(e.RowIndex);
                getArchivo().AbrirArchivo();
                buscaDirBloqueRec(ent.getApCabDatos(), bloqueOriginal.dameClavePrim());
                edicion = true;
                getArchivo().CerrarArchivo();
            }
        }