Pastebin launched a little side project called HostCabi.net, check it out ;-)Pastebin is 300% more awesome when you are logged in. Sign Up, it's FREE!

GSWrappedObject

By: saadimran on Apr 2nd, 2012  |  syntax: None  |  size: 12.23 KB  |  hits: 6  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.     public class GSWrappedObject
  2.     {
  3.         public object Data
  4.         {
  5.             get;
  6.             private set;
  7.         }
  8.  
  9.         public GSDataType Type
  10.         {
  11.             get;
  12.             private set;
  13.         }
  14.  
  15.         public GSWrappedObject()
  16.         {
  17.             this.Data = null;
  18.             this.Type = GSDataType.Null;
  19.         }
  20.  
  21.         /// <summary>
  22.         /// Returns this object in the GS binary format.
  23.         /// </summary>
  24.         /// <returns></returns>
  25.         public byte[] ToGSBinary()
  26.         {
  27.             List<byte> bytes = new List<byte>();
  28.  
  29.             switch (Type)
  30.             {
  31.                 case GSDataType.Null:
  32.                     bytes.Add((byte)GSDataType.Null);
  33.                     break;
  34.                 case GSDataType.Bool:
  35.                     bytes.Add((byte)GSDataType.Bool);
  36.                     bytes.AddRange(AsBool().ToGSBinary());
  37.                     break;
  38.                 case GSDataType.BoolArray:
  39.                     bytes.Add((byte)GSDataType.ByteArray);
  40.                     bytes.AddRange(AsByteArray().ToGSBinary());
  41.                     break;
  42.                 case GSDataType.Byte:
  43.                     bytes.Add((byte)GSDataType.Byte);
  44.                     bytes.Add(AsByte());
  45.                     break;
  46.                 case GSDataType.ByteArray:
  47.                     bytes.Add((byte)GSDataType.ByteArray);
  48.                     bytes.AddRange(AsByteArray().ToGSBinary());
  49.                     break;
  50.                 case GSDataType.Short:
  51.                     bytes.Add((byte)GSDataType.Short);
  52.                     bytes.AddRange(AsShort().ToGSBinary());
  53.                     break;
  54.                 case GSDataType.ShortArray:
  55.                     bytes.Add((byte)GSDataType.ShortArray);
  56.                     bytes.AddRange(AsShortArray().ToGSBinary());
  57.                     break;
  58.                 case GSDataType.Int:
  59.                     bytes.Add((byte)GSDataType.Int);
  60.                     bytes.AddRange(AsInt().ToGSBinary());
  61.                     break;
  62.                 case GSDataType.IntArray:
  63.                     bytes.Add((byte)GSDataType.IntArray);
  64.                     bytes.AddRange(AsIntArray().ToGSBinary());
  65.                     break;
  66.                 case GSDataType.Long:
  67.                     bytes.Add((byte)GSDataType.Long);
  68.                     bytes.AddRange(AsLong().ToGSBinary());
  69.                     break;
  70.                 case GSDataType.LongArray:
  71.                     bytes.Add((byte)GSDataType.LongArray);
  72.                     bytes.AddRange(AsLongArray().ToGSBinary());
  73.                     break;
  74.                 case GSDataType.Float:
  75.                     bytes.Add((byte)GSDataType.Float);
  76.                     bytes.AddRange(AsFloat().ToGSBinary());
  77.                     break;
  78.                 case GSDataType.FloatArray:
  79.                     bytes.Add((byte)GSDataType.FloatArray);
  80.                     bytes.AddRange(AsFloatArray().ToGSBinary());
  81.                     break;
  82.                 case GSDataType.Double:
  83.                     bytes.Add((byte)GSDataType.Double);
  84.                     bytes.AddRange(AsDouble().ToGSBinary());
  85.                     break;
  86.                 case GSDataType.DoubleArray:
  87.                     bytes.Add((byte)GSDataType.DoubleArray);
  88.                     bytes.AddRange(AsDoubleArray().ToGSBinary());
  89.                     break;
  90.                 case GSDataType.String:
  91.                     bytes.Add((byte)GSDataType.String);
  92.                     bytes.AddRange(AsString().ToGSBinary());
  93.                     break;
  94.                 case GSDataType.StringArray:
  95.                     bytes.Add((byte)GSDataType.StringArray);
  96.                     bytes.AddRange(AsStringArray().ToGSBinary());
  97.                     break;
  98.                 case GSDataType.GSArray:
  99.                     bytes.Add((byte)GSDataType.GSArray);
  100.                     bytes.AddRange(AsGSArray().ToGSBinary());
  101.                     break;
  102.                 case GSDataType.GSObject:
  103.                     bytes.Add((byte)GSDataType.GSObject);
  104.                     bytes.AddRange(AsGSObject().ToGSBinary());
  105.                     break;
  106.             }
  107.  
  108.             return bytes.ToArray();
  109.         }
  110.  
  111.         public static implicit operator GSWrappedObject(bool value)
  112.         {
  113.             return new GSWrappedObject() { Data = value, Type = GSDataType.Bool };
  114.         }
  115.  
  116.         public static implicit operator GSWrappedObject(byte value)
  117.         {
  118.             return new GSWrappedObject() { Data = value, Type = GSDataType.Byte };
  119.         }
  120.  
  121.         public static implicit operator GSWrappedObject(short value)
  122.         {
  123.             return new GSWrappedObject() { Data = value, Type = GSDataType.Short };
  124.         }
  125.  
  126.         public static implicit operator GSWrappedObject(int value)
  127.         {
  128.             return new GSWrappedObject() { Data = value, Type = GSDataType.Int };
  129.         }
  130.  
  131.         public static implicit operator GSWrappedObject(long value)
  132.         {
  133.             return new GSWrappedObject() { Data = value, Type = GSDataType.Long };
  134.         }
  135.  
  136.         public static implicit operator GSWrappedObject(float value)
  137.         {
  138.             return new GSWrappedObject() { Data = value, Type = GSDataType.Float };
  139.         }
  140.  
  141.         public static implicit operator GSWrappedObject(double value)
  142.         {
  143.             return new GSWrappedObject() { Data = value, Type = GSDataType.Double };
  144.         }
  145.  
  146.         public static implicit operator GSWrappedObject(string value)
  147.         {
  148.             return new GSWrappedObject() { Data = value, Type = GSDataType.String };
  149.         }
  150.  
  151.         public static implicit operator GSWrappedObject(bool[] value)
  152.         {
  153.             return new GSWrappedObject() { Data = value, Type = GSDataType.BoolArray };
  154.         }
  155.  
  156.         public static implicit operator GSWrappedObject(byte[] value)
  157.         {
  158.             return new GSWrappedObject() { Data = value, Type = GSDataType.ByteArray };
  159.         }
  160.  
  161.         public static implicit operator GSWrappedObject(short[] value)
  162.         {
  163.             return new GSWrappedObject() { Data = value, Type = GSDataType.ShortArray };
  164.         }
  165.  
  166.         public static implicit operator GSWrappedObject(int[] value)
  167.         {
  168.             return new GSWrappedObject() { Data = value, Type = GSDataType.IntArray };
  169.         }
  170.  
  171.         public static implicit operator GSWrappedObject(long[] value)
  172.         {
  173.             return new GSWrappedObject() { Data = value, Type = GSDataType.LongArray };
  174.         }
  175.  
  176.         public static implicit operator GSWrappedObject(float[] value)
  177.         {
  178.             return new GSWrappedObject() { Data = value, Type = GSDataType.FloatArray };
  179.         }
  180.  
  181.         public static implicit operator GSWrappedObject(double[] value)
  182.         {
  183.             return new GSWrappedObject() { Data = value, Type = GSDataType.DoubleArray };
  184.         }
  185.  
  186.         public static implicit operator GSWrappedObject(string[] value)
  187.         {
  188.             return new GSWrappedObject() { Data = value, Type = GSDataType.StringArray };
  189.         }
  190.  
  191.         public static implicit operator GSWrappedObject(GSArray value)
  192.         {
  193.             return new GSWrappedObject() { Data = value, Type = GSDataType.GSArray };
  194.         }
  195.  
  196.         public static implicit operator GSWrappedObject(GSObject value)
  197.         {
  198.             return new GSWrappedObject() { Data = value, Type = GSDataType.GSObject };
  199.         }
  200.  
  201.         /// <summary>
  202.         /// Determines whether the wrapped data is null.
  203.         /// </summary>
  204.         /// <returns></returns>
  205.         public bool IsNull()
  206.         {
  207.             return Type == GSDataType.Null || Data == null;
  208.         }
  209.  
  210.         #region Bool, BoolArray
  211.         /// <summary>
  212.         /// Gets the wrapped data as a boolean.
  213.         /// </summary>
  214.         /// <returns></returns>
  215.         public bool AsBool()
  216.         {
  217.             return (bool)Data;
  218.         }
  219.  
  220.         /// <summary>
  221.         /// Gets the wrapped data as an array of booleans.
  222.         /// </summary>
  223.         /// <returns></returns>
  224.         public bool[] AsBoolArray()
  225.         {
  226.             return (bool[])Data;
  227.         }
  228.         #endregion
  229.  
  230.         #region Byte, ByteArray
  231.         /// <summary>
  232.         /// Gets the wrapped data as an 8-bit integer.
  233.         /// </summary>
  234.         /// <returns></returns>
  235.         public byte AsByte()
  236.         {
  237.             return (byte)Data;
  238.         }
  239.  
  240.         /// <summary>
  241.         /// Gets the wrapped data as an array of 8-bit integers.
  242.         /// </summary>
  243.         /// <returns></returns>
  244.         public byte[] AsByteArray()
  245.         {
  246.             return (byte[])Data;
  247.         }
  248.         #endregion
  249.  
  250.         #region Short, ShortArray
  251.         /// <summary>
  252.         /// Gets the wrapped data as a 16-bit integer.
  253.         /// </summary>
  254.         /// <returns></returns>
  255.         public short AsShort()
  256.         {
  257.             return (short)Data;
  258.         }
  259.  
  260.         /// <summary>
  261.         /// Gets the wrapped data as an array of 16-bit integers.
  262.         /// </summary>
  263.         /// <returns></returns>
  264.         public short[] AsShortArray()
  265.         {
  266.             return (short[])Data;
  267.         }
  268.         #endregion
  269.  
  270.         #region Int, IntArray
  271.         /// <summary>
  272.         /// Gets the wrapped data as a 32-bit integer.
  273.         /// </summary>
  274.         /// <returns></returns>
  275.         public int AsInt()
  276.         {
  277.             return (int)Data;
  278.         }
  279.  
  280.         /// <summary>
  281.         /// Gets the wrapped data as an array of 16-bit integers.
  282.         /// </summary>
  283.         /// <returns></returns>
  284.         public int[] AsIntArray()
  285.         {
  286.             return (int[])Data;
  287.         }
  288.         #endregion
  289.  
  290.         #region Long, LongArray
  291.         /// <summary>
  292.         /// Gets the wrapped data as a 64-bit integer.
  293.         /// </summary>
  294.         /// <returns></returns>
  295.         public long AsLong()
  296.         {
  297.             return (long)Data;
  298.         }
  299.  
  300.         /// <summary>
  301.         /// Gets the wrapped data as an array of 64-bit integers.
  302.         /// </summary>
  303.         /// <returns></returns>
  304.         public long[] AsLongArray()
  305.         {
  306.             return (long[])Data;
  307.         }
  308.         #endregion
  309.  
  310.         #region Float, FloatArray
  311.         /// <summary>
  312.         /// Gets the wrapped data as a 32-bit floating point number.
  313.         /// </summary>
  314.         /// <returns></returns>
  315.         public float AsFloat()
  316.         {
  317.             return (float)Data;
  318.         }
  319.  
  320.         /// <summary>
  321.         /// Gets the wrapped data as an array of 32-bit floating point numbers.
  322.         /// </summary>
  323.         /// <returns></returns>
  324.         public float[] AsFloatArray()
  325.         {
  326.             return (float[])Data;
  327.         }
  328.         #endregion
  329.  
  330.         #region Double, DoubleArray
  331.         /// <summary>
  332.         /// Gets the wrapped data as a 64-bit floating point number.
  333.         /// </summary>
  334.         /// <returns></returns>
  335.         public double AsDouble()
  336.         {
  337.             return (double)Data;
  338.         }
  339.  
  340.         /// <summary>
  341.         /// Gets the wrapped data as an array of 64-bit floating point numbers.
  342.         /// </summary>
  343.         /// <returns></returns>
  344.         public double[] AsDoubleArray()
  345.         {
  346.             return (double[])Data;
  347.         }
  348.         #endregion
  349.  
  350.         #region String, StringArray
  351.         /// <summary>
  352.         /// Gets the wrapped data as a string.
  353.         /// </summary>
  354.         /// <returns></returns>
  355.         public string AsString()
  356.         {
  357.             return (string)Data;
  358.         }
  359.  
  360.         /// <summary>
  361.         /// Gets the wrapped data as an array of strings.
  362.         /// </summary>
  363.         /// <returns></returns>
  364.         public string[] AsStringArray()
  365.         {
  366.             return (string[])Data;
  367.         }
  368.         #endregion
  369.  
  370.         #region GSArray, GSObject
  371.         /// <summary>
  372.         /// Gets the wrapped data as a GSArray.
  373.         /// </summary>
  374.         /// <returns></returns>
  375.         public IGSArray AsGSArray()
  376.         {
  377.             return (GSArray)Data;
  378.         }
  379.  
  380.         /// <summary>
  381.         /// Gets the wrapped data as an array of GSObject.
  382.         /// </summary>
  383.         /// <returns></returns>
  384.         public IGSObject AsGSObject()
  385.         {
  386.             return (GSObject)Data;
  387.         }
  388.         #endregion
  389.     }