Esempio n. 1
0
        public void AdicionarRegistro(string DataEvento, string CodigoEvento, string CodigoUsuario)
        {
            UInt16 ano           = UInt16.Parse(DataEvento.Substring(0, 4));                               /* Para representar o ano utilizamos 16 bits 0 - 65535 */
            byte   mes           = byte.Parse(DataEvento.Substring(4, 2));                                 /* Para o mês utilizamos 8bits 0 - 255 */
            byte   dia           = byte.Parse(DataEvento.Substring(6, 2));                                 /* O mesmo para o dia */
            byte   hora          = byte.Parse(DataEvento.Substring(8, 2));                                 /*O mesmo para hora */
            byte   minuto        = byte.Parse(DataEvento.Substring(10, 2));                                /* O mesmo para minuto */
            byte   segundos      = byte.Parse(DataEvento.Substring(12, 2));                                /* O mesmo para segundo */
            UInt16 milissegundos = UInt16.Parse(DataEvento.Substring(14, 3));                              /* Milissegundos vai de 0 - 999, portanto 16bits */
            long   codEvento     = Int64.Parse(CodigoEvento, System.Globalization.NumberStyles.HexNumber); /* Codigo do evento
                                                                                                            * representando em valor numero, utilizando apenas 32 bits, com string seria necessario 64bits */

            DateTime data = new DateTime(ano, mes, dia, hora, minuto, segundos, milissegundos);

            Registro registro = new Registro(data.Ticks, ulong.Parse(CodigoUsuario)); // Cria um registro

            // Indexação
            DateTime DateDictionary = new DateTime(ano, mes, dia, hora, 0, 0);

            Dictionary <long, List <Registro> > DicRegistros;

            /* Datetime.Ticks = representação numerica da data
             */
            if (Objetos.TryGetValue(DateDictionary.Ticks, out DicRegistros)) // Verifica se aquela data ja foi indexada
            {                                                                // Caso afirmativo referencia ela com DicRegistros
                List <Registro> ListRegistros;

                if (DicRegistros.TryGetValue(codEvento, out ListRegistros)) // Verifica se um evento ja foi indexado
                {                                                           // Caso afirmativa referencia com ListRegistro
                    ListRegistros.Add(registro);                            // Adiciona o registro
                }
                else
                {
                    ListRegistros = new List <Registro>();
                    ListRegistros.Add(registro);
                    DicRegistros.TryAdd(codEvento, ListRegistros);
                    // Caso o evento não tenha sido indexado, ele é indexado e adicionado o registro
                }
            }
            else // Se a data não foi indexada, ela é feita, bem como o evento a ser lido e posteriormente adicionado o registro
            {
                var ListRegistros = new List <Registro>();
                ListRegistros.Add(registro);
                var DicEventos = new Dictionary <long, List <Registro> >();
                DicEventos.Add(codEvento, ListRegistros);
                Objetos.Add(DateDictionary.Ticks, DicEventos);
            }
        }