/// <summary> /// Encodes a value into a byte array /// </summary> /// <typeparam name="T">The type of value to encode</typeparam> /// <param name="value">The value to encode</param> /// <returns>The byte array</returns> public static byte[] EncodeBytes <T>(T value) { using (MemoryStream ms = new MemoryStream()) { TagWriter writer = new TagWriter(ms); TagWriterSink sink = new TagWriterSink(writer, Value <T> .Schema); Value <T> .Save(sink, value); return(ms.ToArray()); } }
/// <summary> /// Encodes a value into a byte array /// </summary> /// <typeparam name="T">The type of value to encode</typeparam> /// <param name="buffer">The buffer to encode into</param> /// <param name="offset">The offset to begin encoding</param> /// <param name="value">The value to encode</param> /// <returns>The next offset</returns> public static int Encode <T>(byte[] buffer, int offset, T value) { using (var ms = new MemoryStream(buffer, offset, buffer.Length, true)) { TagWriter writer = new TagWriter(ms); TagWriterSink sink = new TagWriterSink(writer, Value <T> .Schema); Value <T> .Save(sink, value); offset = (int)ms.Position; } return(offset); }
/// <summary> /// Encodes a value to a generic object /// </summary> /// <typeparam name="T">The type of the value</typeparam> /// <param name="value">The value to encode</param> /// <returns>The generic object</returns> public static GenericValue Encode <T>(T value) { byte[] tag; using (var ms = new MemoryStream()) { TagWriter writer = new TagWriter(ms); TagWriterSink sink = new TagWriterSink(writer, Value <T> .Schema); Value <T> .Save(sink, value); tag = ms.ToArray(); } return(new TaggedGenericValue(tag, 0, tag.Length)); }
/// <summary> /// Constructs a new TagWriterSink /// </summary> /// <param name="writer">The tag writer instance to write to</param> /// <param name="schema">The schema for the types to write</param> public TagWriterSink(TagWriter writer, ISchema schema) { this._writer = writer; this._state = new SchemaState(schema, 255, -1); this._stack = new Stack <SchemaState>(4); }
/// <summary> /// Constructs a new TagWriterSink /// </summary> /// <param name="writer">The tag writer instance to write to</param> /// <param name="schema">The schema for the types to write</param> public TagWriterSink(TagWriter writer, ISchema schema) { this._writer = writer; this._state = new SchemaState(schema, 255, -1); this._stack = new Stack<SchemaState>(4); }