Bladeren bron

2002-08-16 Gonzalo Paniagua Javier <[email protected]>

	* FormatterServices.cs: New file with some implementation.

svn path=/trunk/mcs/; revision=6677
Gonzalo Paniagua Javier 23 jaren geleden
bovenliggende
commit
7fa479a7be

+ 4 - 0
mcs/class/corlib/System.Runtime.Serialization/ChangeLog

@@ -1,3 +1,7 @@
+2002-08-16  Gonzalo Paniagua Javier <[email protected]>
+
+	* FormatterServices.cs: New file with some implementation.
+
 2002-08-16  Dietmar Maurer  <[email protected]>
 
 	* SerializationInfo.cs: special case for null values.

+ 111 - 0
mcs/class/corlib/System.Runtime.Serialization/FormatterServices.cs

@@ -0,0 +1,111 @@
+//
+// System.Runtime.Serialization.FormatterServices
+//
+// Authors:
+//	Gonzalo Paniagua Javier ([email protected])
+//
+// (C) 2002 Ximian, Inc (http://www.ximian.com)
+//
+using System;
+using System.Reflection;
+
+namespace System.Runtime.Serialization
+{
+	public sealed class FormatterServices
+	{
+		private FormatterServices ()
+		{
+		}
+
+		public static object [] GetObjectData (object obj, MemberInfo [] members)
+		{
+			if (obj == null)
+				throw new ArgumentNullException ("obj");
+
+			if (members == null)
+				throw new ArgumentNullException ("members");
+
+			int n = members.Length;
+			object [] result = new object [n];
+			for (int i = 0; i < n; i++) {
+				MemberInfo member = members [i];
+				if (member == null)
+					throw new ArgumentNullException (String.Format ("members[{0}]", i));
+
+				if (member.MemberType != MemberTypes.Field)
+					throw new SerializationException (
+							String.Format ("members [{0}] is not a field.", i));
+
+				FieldInfo fi = member as FieldInfo; //FIXME: Can fi be null?
+				result [i] = fi.GetValue (obj);
+			}
+
+			return result;
+		}
+
+		public static MemberInfo [] GetSerializableMembers (Type type)
+		{
+			StreamingContext st = new StreamingContext (StreamingContextStates.All);
+			return GetSerializableMembers (type, st);
+		}
+
+		[MonoTODO]
+		public static MemberInfo [] GetSerializableMembers (Type type, StreamingContext context)
+		{
+			if (type == null)
+				throw new ArgumentNullException ("type");
+
+			throw new NotImplementedException ();
+
+		}
+
+		public static Type GetTypeFromAssembly (Assembly assem, string name)
+		{
+			if (assem == null)
+				throw new ArgumentNullException ("assem");
+
+			if (name == null)
+				throw new ArgumentNullException ("name");
+
+			return assem.GetType (name);
+		}
+
+		[MonoTODO]
+		public static object GetUninitializedObject (Type type)
+		{
+			throw new NotImplementedException ();
+		}
+
+		public static object PopulateObjectMembers (object obj, MemberInfo [] members, object [] data)
+		{
+			if (obj == null)
+				throw new ArgumentNullException ("obj");
+
+			if (members == null)
+				throw new ArgumentNullException ("members");
+
+			if (data == null)
+				throw new ArgumentNullException ("data");
+
+			int length = members.Length;
+			if (length != data.Length)
+				throw new ArgumentException ("different length in members and data");
+
+			for (int i = 0; i < length; i++) {
+				MemberInfo member = members [i];
+				if (member == null)
+					throw new ArgumentNullException (String.Format ("members[{0}]", i));
+					
+				if (member.MemberType != MemberTypes.Field)
+					throw new SerializationException (
+							String.Format ("members [{0}] is not a field.", i));
+
+				FieldInfo fi = member as FieldInfo; //FIXME: can fi be null?
+				fi.SetValue (obj, data [i]);
+			}
+
+			return obj;
+		}
+	}
+}
+