/// <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); }
/// <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); }
/// <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); }
/// <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); }