added units tests for TextReader ReadLine() and ReadToEnd()
[mono.git] / mcs / class / corlib / System.Runtime.Serialization.Formatters.Binary / BinaryCommon.cs
index d7f5b8180af6016e27c1efb032db26e2047b2641..ffe5b4320df8081c106ae61ecf9458606173de92 100644 (file)
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-\r
-using System;\r
-\r
-namespace System.Runtime.Serialization.Formatters.Binary\r
-{\r
-       internal class BinaryCommon\r
-       {\r
-               // Header present in all binary serializations\r
-               public static byte[] BinaryHeader = new Byte[] {0,1,0,0,0,255,255,255,255,1,0,0,0,0,0,0,0};\r
-\r
-               static Type[] _typeCodesToType;\r
-               static byte[] _typeCodeMap;\r
-               public static bool UseReflectionSerialization = false;\r
-\r
-               static BinaryCommon()\r
-               {\r
-                       _typeCodesToType = new Type [19];\r
-                       _typeCodesToType[(int)BinaryTypeCode.Boolean] = typeof (Boolean);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Byte] = typeof (Byte);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Char] = typeof (Char);\r
-                       _typeCodesToType[(int)BinaryTypeCode.TimeSpan] = typeof (TimeSpan);\r
-                       _typeCodesToType[(int)BinaryTypeCode.DateTime] = typeof (DateTime);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Decimal] = typeof (Decimal);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Double] = typeof (Double);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Int16] = typeof (Int16);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Int32] = typeof (Int32);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Int64] = typeof (Int64);\r
-                       _typeCodesToType[(int)BinaryTypeCode.SByte] = typeof (SByte);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Single] = typeof (Single);\r
-                       _typeCodesToType[(int)BinaryTypeCode.UInt16] = typeof (UInt16);\r
-                       _typeCodesToType[(int)BinaryTypeCode.UInt32] = typeof (UInt32);\r
-                       _typeCodesToType[(int)BinaryTypeCode.UInt64] = typeof (UInt64);\r
-                       _typeCodesToType[(int)BinaryTypeCode.Null] = null;\r
-                       _typeCodesToType[(int)BinaryTypeCode.String] = typeof (string);\r
-\r
-                       _typeCodeMap = new byte[30];\r
-                       _typeCodeMap[(int)TypeCode.Boolean] = (byte) BinaryTypeCode.Boolean;\r
-                       _typeCodeMap[(int)TypeCode.Byte] = (byte) BinaryTypeCode.Byte;\r
-                       _typeCodeMap[(int)TypeCode.Char] = (byte) BinaryTypeCode.Char;\r
-                       _typeCodeMap[(int)TypeCode.DateTime] = (byte) BinaryTypeCode.DateTime;\r
-                       _typeCodeMap[(int)TypeCode.Decimal] = (byte) BinaryTypeCode.Decimal;\r
-                       _typeCodeMap[(int)TypeCode.Double] = (byte) BinaryTypeCode.Double;\r
-                       _typeCodeMap[(int)TypeCode.Int16] = (byte) BinaryTypeCode.Int16;\r
-                       _typeCodeMap[(int)TypeCode.Int32] = (byte) BinaryTypeCode.Int32;\r
-                       _typeCodeMap[(int)TypeCode.Int64] = (byte) BinaryTypeCode.Int64;\r
-                       _typeCodeMap[(int)TypeCode.SByte] = (byte) BinaryTypeCode.SByte;\r
-                       _typeCodeMap[(int)TypeCode.Single] = (byte) BinaryTypeCode.Single;\r
-                       _typeCodeMap[(int)TypeCode.UInt16] = (byte) BinaryTypeCode.UInt16;\r
-                       _typeCodeMap[(int)TypeCode.UInt32] = (byte) BinaryTypeCode.UInt32;\r
-                       _typeCodeMap[(int)TypeCode.UInt64] = (byte) BinaryTypeCode.UInt64;\r
-                       _typeCodeMap[(int)TypeCode.String] = (byte) BinaryTypeCode.String;\r
-\r
-                       // TimeStamp does not have a TypeCode, so it is managed as a special\r
-                       // case in GetTypeCode()\r
-                       \r
-                       // This environment variable is only for test and benchmarking pourposes.\r
-                       // By default, mono will always use IL generated class serializers.\r
-                       string s = Environment.GetEnvironmentVariable("MONO_REFLECTION_SERIALIZER");\r
-                       if (s == null) s = "no";\r
-                       UseReflectionSerialization = (s != "no");\r
-               }\r
-\r
-               public static bool IsPrimitive (Type type)\r
-               {\r
-                       return (type.IsPrimitive && type != typeof (IntPtr)) || \r
-                               type == typeof (DateTime) || \r
-                               type == typeof (TimeSpan) || \r
-                               type == typeof (Decimal);\r
-               }\r
-\r
-               public static byte GetTypeCode (Type type)\r
-               {\r
-                       if (type == typeof(TimeSpan)) return (byte) BinaryTypeCode.TimeSpan;\r
-                       else return _typeCodeMap [(int)Type.GetTypeCode(type)];\r
-               }\r
-\r
-               public static Type GetTypeFromCode (int code)\r
-               {\r
-                       return _typeCodesToType [code];\r
-               }\r
-               \r
-               public static void CheckSerializable (Type type, ISurrogateSelector selector, StreamingContext context)\r
-               {\r
-                       if (!type.IsSerializable && !type.IsInterface) \r
-                       {\r
-                               if (selector != null && selector.GetSurrogate (type, context, out selector) != null)\r
-                                       return;\r
-\r
-                               throw new SerializationException ("Type " + type + " is not marked as Serializable.");\r
-                       }\r
+
+using System;
+
+namespace System.Runtime.Serialization.Formatters.Binary
+{
+       internal class BinaryCommon
+       {
+               // Header present in all binary serializations
+               public static byte[] BinaryHeader = new Byte[] {0,1,0,0,0,255,255,255,255,1,0,0,0,0,0,0,0};
+
+               static Type[] _typeCodesToType;
+               static byte[] _typeCodeMap;
+               public static bool UseReflectionSerialization = false;
+
+               static BinaryCommon()
+               {
+                       _typeCodesToType = new Type [19];
+                       _typeCodesToType[(int)BinaryTypeCode.Boolean] = typeof (Boolean);
+                       _typeCodesToType[(int)BinaryTypeCode.Byte] = typeof (Byte);
+                       _typeCodesToType[(int)BinaryTypeCode.Char] = typeof (Char);
+                       _typeCodesToType[(int)BinaryTypeCode.TimeSpan] = typeof (TimeSpan);
+                       _typeCodesToType[(int)BinaryTypeCode.DateTime] = typeof (DateTime);
+                       _typeCodesToType[(int)BinaryTypeCode.Decimal] = typeof (Decimal);
+                       _typeCodesToType[(int)BinaryTypeCode.Double] = typeof (Double);
+                       _typeCodesToType[(int)BinaryTypeCode.Int16] = typeof (Int16);
+                       _typeCodesToType[(int)BinaryTypeCode.Int32] = typeof (Int32);
+                       _typeCodesToType[(int)BinaryTypeCode.Int64] = typeof (Int64);
+                       _typeCodesToType[(int)BinaryTypeCode.SByte] = typeof (SByte);
+                       _typeCodesToType[(int)BinaryTypeCode.Single] = typeof (Single);
+                       _typeCodesToType[(int)BinaryTypeCode.UInt16] = typeof (UInt16);
+                       _typeCodesToType[(int)BinaryTypeCode.UInt32] = typeof (UInt32);
+                       _typeCodesToType[(int)BinaryTypeCode.UInt64] = typeof (UInt64);
+                       _typeCodesToType[(int)BinaryTypeCode.Null] = null;
+                       _typeCodesToType[(int)BinaryTypeCode.String] = typeof (string);
+
+                       _typeCodeMap = new byte[30];
+                       _typeCodeMap[(int)TypeCode.Boolean] = (byte) BinaryTypeCode.Boolean;
+                       _typeCodeMap[(int)TypeCode.Byte] = (byte) BinaryTypeCode.Byte;
+                       _typeCodeMap[(int)TypeCode.Char] = (byte) BinaryTypeCode.Char;
+                       _typeCodeMap[(int)TypeCode.DateTime] = (byte) BinaryTypeCode.DateTime;
+                       _typeCodeMap[(int)TypeCode.Decimal] = (byte) BinaryTypeCode.Decimal;
+                       _typeCodeMap[(int)TypeCode.Double] = (byte) BinaryTypeCode.Double;
+                       _typeCodeMap[(int)TypeCode.Int16] = (byte) BinaryTypeCode.Int16;
+                       _typeCodeMap[(int)TypeCode.Int32] = (byte) BinaryTypeCode.Int32;
+                       _typeCodeMap[(int)TypeCode.Int64] = (byte) BinaryTypeCode.Int64;
+                       _typeCodeMap[(int)TypeCode.SByte] = (byte) BinaryTypeCode.SByte;
+                       _typeCodeMap[(int)TypeCode.Single] = (byte) BinaryTypeCode.Single;
+                       _typeCodeMap[(int)TypeCode.UInt16] = (byte) BinaryTypeCode.UInt16;
+                       _typeCodeMap[(int)TypeCode.UInt32] = (byte) BinaryTypeCode.UInt32;
+                       _typeCodeMap[(int)TypeCode.UInt64] = (byte) BinaryTypeCode.UInt64;
+                       _typeCodeMap[(int)TypeCode.String] = (byte) BinaryTypeCode.String;
+
+                       // TimeStamp does not have a TypeCode, so it is managed as a special
+                       // case in GetTypeCode()
+#if !MOONLIGHT
+                       // This environment variable is only for test and benchmarking purposes.
+                       // By default, mono will always use IL generated class serializers.
+                       string s = Environment.GetEnvironmentVariable("MONO_REFLECTION_SERIALIZER");
+                       if (s == null) s = "no";
+                       UseReflectionSerialization = (s != "no");
+#endif
+               }
+
+               public static bool IsPrimitive (Type type)
+               {
+                       return (type.IsPrimitive && type != typeof (IntPtr)) || 
+                               type == typeof (DateTime) || 
+                               type == typeof (TimeSpan) || 
+                               type == typeof (Decimal);
+               }
+
+               public static byte GetTypeCode (Type type)
+               {
+                       if (type == typeof(TimeSpan)) return (byte) BinaryTypeCode.TimeSpan;
+                       else return _typeCodeMap [(int)Type.GetTypeCode(type)];
+               }
+
+               public static Type GetTypeFromCode (int code)
+               {
+                       return _typeCodesToType [code];
                }
-               \r
+               
+               public static void CheckSerializable (Type type, ISurrogateSelector selector, StreamingContext context)
+               {
+                       if (!type.IsSerializable && !type.IsInterface) 
+                       {
+                               if (selector != null && selector.GetSurrogate (type, context, out selector) != null)
+                                       return;
+
+                               throw new SerializationException ("Type " + type + " is not marked as Serializable.");
+                       }
+               }
+               
                public static void SwapBytes (byte[] byteArray, int size, int dataSize)
                {
                        byte b;
@@ -140,9 +141,9 @@ namespace System.Runtime.Serialization.Formatters.Binary
                                }
                        }
                }
-       }\r
-\r
-       internal enum BinaryElement : byte\r
+       }
+
+       internal enum BinaryElement : byte
        {
                Header = 0,
                RefTypeObject = 1,
@@ -186,9 +187,9 @@ namespace System.Runtime.Serialization.Formatters.Binary
                SingleDimensional = 0,
                Jagged = 1,
                MultiDimensional = 2
-       }\r
-\r
-       internal enum MethodFlags : byte
+       }
+
+       internal enum MethodFlags
        {
                NoArguments = 1,
                PrimitiveArguments = 2,
@@ -199,36 +200,38 @@ namespace System.Runtime.Serialization.Formatters.Binary
                IncludesSignature = 128,
 
                FormatMask = 15,
-               NeedsInfoArrayMask = 4 + 8 + 64 + 128
-       }\r
-\r
-       internal enum ReturnTypeTag : byte\r
-       {\r
-               Null = 2,\r
-               PrimitiveType = 8,\r
-               ObjectType = 16,\r
-               Exception = 32\r
-       }\r
-\r
-       enum BinaryTypeCode : byte\r
-       {\r
-               Boolean = 1,\r
-               Byte = 2,\r
-               Char = 3,\r
-               Decimal = 5,\r
-               Double = 6,\r
-               Int16 = 7,\r
-               Int32 = 8,\r
-               Int64 = 9,\r
-               SByte = 10,\r
-               Single = 11,\r
-               TimeSpan = 12,\r
-               DateTime = 13,\r
-               UInt16 = 14,\r
-               UInt32 = 15,\r
-               UInt64 = 16,\r
-               Null = 17,\r
-               String = 18\r
-       }\r
-\r
-}\r
+
+               GenericArguments = 0x8000,
+               NeedsInfoArrayMask = 4 + 8 + 64 + 128 + 0x8000,
+       }
+
+       internal enum ReturnTypeTag : byte
+       {
+               Null = 2,
+               PrimitiveType = 8,
+               ObjectType = 16,
+               Exception = 32
+       }
+
+       enum BinaryTypeCode : byte
+       {
+               Boolean = 1,
+               Byte = 2,
+               Char = 3,
+               Decimal = 5,
+               Double = 6,
+               Int16 = 7,
+               Int32 = 8,
+               Int64 = 9,
+               SByte = 10,
+               Single = 11,
+               TimeSpan = 12,
+               DateTime = 13,
+               UInt16 = 14,
+               UInt32 = 15,
+               UInt64 = 16,
+               Null = 17,
+               String = 18
+       }
+
+}