/// <summary>
 /// Attempts to interpret a TaggedGenericType instance as
 /// a specific type
 /// </summary>
 /// <param name="value">The value to interpet</param>
 /// <param name="schema">The type to interpret as</param>
 /// <param name="output">The output type</param>
 /// <returns>True if the interpretation succeeds, false otherwise</returns>
 public IValueStream CreateStream(GenericValue value, ISchema schema)
 {
     var tagged = (TaggedGenericValue)value;
     MemoryStream ms = new MemoryStream(tagged.tag, tagged.offset, tagged.end - tagged.offset);
     TagReader reader = new TagReader(ms);
     TagReaderStream stream = new TagReaderStream(reader, schema);
     return stream;
 }
        /// <summary>
        /// Attempts to interpret a TaggedGenericType instance as
        /// a specific type
        /// </summary>
        /// <param name="value">The value to interpet</param>
        /// <param name="schema">The type to interpret as</param>
        /// <param name="output">The output type</param>
        /// <returns>True if the interpretation succeeds, false otherwise</returns>
        public IValueStream CreateStream(GenericValue value, ISchema schema)
        {
            var             tagged = (TaggedGenericValue)value;
            MemoryStream    ms     = new MemoryStream(tagged.tag, tagged.offset, tagged.end - tagged.offset);
            TagReader       reader = new TagReader(ms);
            TagReaderStream stream = new TagReaderStream(reader, schema);

            return(stream);
        }
Beispiel #3
0
        /// <summary>
        /// Decodes a value from a byte array
        /// </summary>
        /// <typeparam name="T">The type of value to decode</typeparam>
        /// <param name="buffer">The buffer to decode from</param>
        /// <param name="offset">The offset to decode at</param>
        /// <param name="end">The last offset</param>
        /// <param name="value">The decoded value</param>
        /// <returns>The next offset</returns>
        public static int Decode <T>(byte[] buffer, int offset, int end, out T value)
        {
            using (var ms = new MemoryStream(buffer, offset, end - offset, false))
            {
                TagReader       reader = new TagReader(ms);
                TagReaderStream stream = new TagReaderStream(reader, Value <T> .Schema);
                value = Value <T> .Load(stream);

                offset = (int)ms.Position;
            }
            return(offset);
        }
Beispiel #4
0
 /// <summary>
 /// Constructs a new TagReaderStream
 /// </summary>
 /// <param name="reader">The tag reader instance to read from</param>
 /// <param name="schema">The schema for the types to read</param>
 public TagReaderStream(TagReader reader, ISchema schema)
 {
     this._reader = reader;
     this._state = new SchemaState(schema, 255, -1);
     this._stack = new Stack<SchemaState>(4);
 }
Beispiel #5
0
 /// <summary>
 /// Constructs a new TagReaderStream
 /// </summary>
 /// <param name="reader">The tag reader instance to read from</param>
 /// <param name="schema">The schema for the types to read</param>
 public TagReaderStream(TagReader reader, ISchema schema)
 {
     this._reader = reader;
     this._state  = new SchemaState(schema, 255, -1);
     this._stack  = new Stack <SchemaState>(4);
 }