Exemple #1
0
        /// <summary>
        /// Read a sequence choice, relies on validation rules on the parsing to ensure parsing
        /// </summary>
        /// <remarks>The reader must be seekable</remarks>
        /// <param name="reader"></param>
        /// <param name="types"></param>
        /// <returns></returns>
        protected IStreamTypeParser RSC(DataReader reader, params Type[] types)
        {
            if (!reader.GetStream().CanSeek)
            {
                throw new ArgumentException(Properties.Resources.BaseParser_RSCStreamCannotSeek, "reader");
            }

            foreach (Type t in types)
            {
                long currPos     = reader.GetStream().Position;
                long currentRead = reader.ByteCount;

                try
                {
                    IStreamTypeParser ret = (IStreamTypeParser)Activator.CreateInstance(t);

                    ret.FromStream(reader, CS(), _logger);

                    return(ret);
                }
                catch (Exception)
                {
                }

                reader.GetStream().Position = currPos;
                reader.ByteCount = currentRead;
            }

            throw new ArgumentException(String.Format(Properties.Resources.BaseParser_NoValidSequenceChoice, this.GetType().Name));
        }
Exemple #2
0
        /// <summary>
        /// Read sequence choice, no fallback
        /// </summary>
        /// <param name="value">The value of the selected field</param>
        /// <param name="args">The arguments, should be laid out as 'expr', type, ... </param>
        /// <returns>The parsed sequence, null if not found a match</returns>
        protected IStreamTypeParser RSC(DataReader reader, object value, params object[] args)
        {
            for (int i = 0; i < args.Length; i += 2)
            {
                if (value != null ? Check(args[i].ToString(), value) : Check(args[i].ToString()))
                {
                    IStreamTypeParser ret = (IStreamTypeParser)Activator.CreateInstance((Type)args[i + 1]);
                    ret.FromStream(reader, CS(), _logger);

                    return(ret);
                }
            }

            throw new ArgumentException(String.Format(Properties.Resources.BaseParser_NoValidSequenceChoice, this.GetType().Name));
        }