/* * Copyright (C) 2007-2013 Xagasoft, All rights reserved. * * This file is part of the libgats library and is released under the * terms of the license contained in the file LICENSE. */ using System.IO; namespace Com.Xagasoft.Gats { /// /// Encapsulates a single byte array. /// /// /// A GATS string, unlike a C# string primitive, is simply an array of /// bytes. This is actually more flexible in many ways, as it allows a /// GatsString to contain any binary data. However, to encode textual data /// there is no hard and fast standard. If a string primitive is passed /// into a GatsString it will be encoded into UTF-8. If you would rather /// use a different encoding then encode your data first, and then pass it /// in as a byte array. /// /// The ToString implementation provided by GatsString also assumes that /// the contained data is UTF-8 encoded. This may cause some minor issues /// when attempting to debug strings that contain binary. /// public class GatsString : GatsObject { public byte[] Value { get; set; } public GatsString() { } public GatsString( byte[] val ) { Value = val; } public GatsString( string val ) { Value = System.Text.Encoding.UTF8.GetBytes( val ); } public override string ToString() { return System.Text.Encoding.UTF8.GetString( Value ); } public override void Read( Stream s, char cType ) { int Size = (int)GatsInteger.ReadPackedInt( s ); Value = new byte[Size]; int SoFar = 0; do { SoFar += s.Read( Value, SoFar, Size-SoFar ); } while( SoFar < Size ); } public override void Write( Stream s ) { s.WriteByte( (byte)'s' ); if( Value == null ) { GatsInteger.WritePackedInt( s, 0 ); } else { GatsInteger.WritePackedInt( s, Value.Length ); s.Write( Value, 0, Value.Length ); } } }; }