public class GSWrappedObject { public object Data { get; private set; } public GSDataType Type { get; private set; } public GSWrappedObject() { this.Data = null; this.Type = GSDataType.Null; } /// /// Returns this object in the GS binary format. /// /// public byte[] ToGSBinary() { List bytes = new List(); switch (Type) { case GSDataType.Null: bytes.Add((byte)GSDataType.Null); break; case GSDataType.Bool: bytes.Add((byte)GSDataType.Bool); bytes.AddRange(AsBool().ToGSBinary()); break; case GSDataType.BoolArray: bytes.Add((byte)GSDataType.ByteArray); bytes.AddRange(AsByteArray().ToGSBinary()); break; case GSDataType.Byte: bytes.Add((byte)GSDataType.Byte); bytes.Add(AsByte()); break; case GSDataType.ByteArray: bytes.Add((byte)GSDataType.ByteArray); bytes.AddRange(AsByteArray().ToGSBinary()); break; case GSDataType.Short: bytes.Add((byte)GSDataType.Short); bytes.AddRange(AsShort().ToGSBinary()); break; case GSDataType.ShortArray: bytes.Add((byte)GSDataType.ShortArray); bytes.AddRange(AsShortArray().ToGSBinary()); break; case GSDataType.Int: bytes.Add((byte)GSDataType.Int); bytes.AddRange(AsInt().ToGSBinary()); break; case GSDataType.IntArray: bytes.Add((byte)GSDataType.IntArray); bytes.AddRange(AsIntArray().ToGSBinary()); break; case GSDataType.Long: bytes.Add((byte)GSDataType.Long); bytes.AddRange(AsLong().ToGSBinary()); break; case GSDataType.LongArray: bytes.Add((byte)GSDataType.LongArray); bytes.AddRange(AsLongArray().ToGSBinary()); break; case GSDataType.Float: bytes.Add((byte)GSDataType.Float); bytes.AddRange(AsFloat().ToGSBinary()); break; case GSDataType.FloatArray: bytes.Add((byte)GSDataType.FloatArray); bytes.AddRange(AsFloatArray().ToGSBinary()); break; case GSDataType.Double: bytes.Add((byte)GSDataType.Double); bytes.AddRange(AsDouble().ToGSBinary()); break; case GSDataType.DoubleArray: bytes.Add((byte)GSDataType.DoubleArray); bytes.AddRange(AsDoubleArray().ToGSBinary()); break; case GSDataType.String: bytes.Add((byte)GSDataType.String); bytes.AddRange(AsString().ToGSBinary()); break; case GSDataType.StringArray: bytes.Add((byte)GSDataType.StringArray); bytes.AddRange(AsStringArray().ToGSBinary()); break; case GSDataType.GSArray: bytes.Add((byte)GSDataType.GSArray); bytes.AddRange(AsGSArray().ToGSBinary()); break; case GSDataType.GSObject: bytes.Add((byte)GSDataType.GSObject); bytes.AddRange(AsGSObject().ToGSBinary()); break; } return bytes.ToArray(); } public static implicit operator GSWrappedObject(bool value) { return new GSWrappedObject() { Data = value, Type = GSDataType.Bool }; } public static implicit operator GSWrappedObject(byte value) { return new GSWrappedObject() { Data = value, Type = GSDataType.Byte }; } public static implicit operator GSWrappedObject(short value) { return new GSWrappedObject() { Data = value, Type = GSDataType.Short }; } public static implicit operator GSWrappedObject(int value) { return new GSWrappedObject() { Data = value, Type = GSDataType.Int }; } public static implicit operator GSWrappedObject(long value) { return new GSWrappedObject() { Data = value, Type = GSDataType.Long }; } public static implicit operator GSWrappedObject(float value) { return new GSWrappedObject() { Data = value, Type = GSDataType.Float }; } public static implicit operator GSWrappedObject(double value) { return new GSWrappedObject() { Data = value, Type = GSDataType.Double }; } public static implicit operator GSWrappedObject(string value) { return new GSWrappedObject() { Data = value, Type = GSDataType.String }; } public static implicit operator GSWrappedObject(bool[] value) { return new GSWrappedObject() { Data = value, Type = GSDataType.BoolArray }; } public static implicit operator GSWrappedObject(byte[] value) { return new GSWrappedObject() { Data = value, Type = GSDataType.ByteArray }; } public static implicit operator GSWrappedObject(short[] value) { return new GSWrappedObject() { Data = value, Type = GSDataType.ShortArray }; } public static implicit operator GSWrappedObject(int[] value) { return new GSWrappedObject() { Data = value, Type = GSDataType.IntArray }; } public static implicit operator GSWrappedObject(long[] value) { return new GSWrappedObject() { Data = value, Type = GSDataType.LongArray }; } public static implicit operator GSWrappedObject(float[] value) { return new GSWrappedObject() { Data = value, Type = GSDataType.FloatArray }; } public static implicit operator GSWrappedObject(double[] value) { return new GSWrappedObject() { Data = value, Type = GSDataType.DoubleArray }; } public static implicit operator GSWrappedObject(string[] value) { return new GSWrappedObject() { Data = value, Type = GSDataType.StringArray }; } public static implicit operator GSWrappedObject(GSArray value) { return new GSWrappedObject() { Data = value, Type = GSDataType.GSArray }; } public static implicit operator GSWrappedObject(GSObject value) { return new GSWrappedObject() { Data = value, Type = GSDataType.GSObject }; } /// /// Determines whether the wrapped data is null. /// /// public bool IsNull() { return Type == GSDataType.Null || Data == null; } #region Bool, BoolArray /// /// Gets the wrapped data as a boolean. /// /// public bool AsBool() { return (bool)Data; } /// /// Gets the wrapped data as an array of booleans. /// /// public bool[] AsBoolArray() { return (bool[])Data; } #endregion #region Byte, ByteArray /// /// Gets the wrapped data as an 8-bit integer. /// /// public byte AsByte() { return (byte)Data; } /// /// Gets the wrapped data as an array of 8-bit integers. /// /// public byte[] AsByteArray() { return (byte[])Data; } #endregion #region Short, ShortArray /// /// Gets the wrapped data as a 16-bit integer. /// /// public short AsShort() { return (short)Data; } /// /// Gets the wrapped data as an array of 16-bit integers. /// /// public short[] AsShortArray() { return (short[])Data; } #endregion #region Int, IntArray /// /// Gets the wrapped data as a 32-bit integer. /// /// public int AsInt() { return (int)Data; } /// /// Gets the wrapped data as an array of 16-bit integers. /// /// public int[] AsIntArray() { return (int[])Data; } #endregion #region Long, LongArray /// /// Gets the wrapped data as a 64-bit integer. /// /// public long AsLong() { return (long)Data; } /// /// Gets the wrapped data as an array of 64-bit integers. /// /// public long[] AsLongArray() { return (long[])Data; } #endregion #region Float, FloatArray /// /// Gets the wrapped data as a 32-bit floating point number. /// /// public float AsFloat() { return (float)Data; } /// /// Gets the wrapped data as an array of 32-bit floating point numbers. /// /// public float[] AsFloatArray() { return (float[])Data; } #endregion #region Double, DoubleArray /// /// Gets the wrapped data as a 64-bit floating point number. /// /// public double AsDouble() { return (double)Data; } /// /// Gets the wrapped data as an array of 64-bit floating point numbers. /// /// public double[] AsDoubleArray() { return (double[])Data; } #endregion #region String, StringArray /// /// Gets the wrapped data as a string. /// /// public string AsString() { return (string)Data; } /// /// Gets the wrapped data as an array of strings. /// /// public string[] AsStringArray() { return (string[])Data; } #endregion #region GSArray, GSObject /// /// Gets the wrapped data as a GSArray. /// /// public IGSArray AsGSArray() { return (GSArray)Data; } /// /// Gets the wrapped data as an array of GSObject. /// /// public IGSObject AsGSObject() { return (GSObject)Data; } #endregion }