Explorar el Código

2005-11-15 Atsushi Enomoto <[email protected]>

	* Encoding.cs : added ICloneable, Clone() and new GetEncoding().


svn path=/trunk/mcs/; revision=53052
Atsushi Eno hace 20 años
padre
commit
418222a64d

+ 4 - 0
mcs/class/corlib/System.Text/ChangeLog

@@ -1,3 +1,7 @@
+2005-11-15  Atsushi Enomoto  <[email protected]>
+
+	* Encoding.cs : added ICloneable, Clone() and new GetEncoding().
+
 2005-11-15  Atsushi Enomoto  <[email protected]>
 
 	* Encoding.cs : Added IsReadOnly, DecoderFallback and EncoderFallback.

+ 45 - 1
mcs/class/corlib/System.Text/Encoding.cs

@@ -32,9 +32,13 @@ using System.Reflection;
 using System.Globalization;
 using System.Security;
 using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
 
 [Serializable]
 public abstract class Encoding
+#if NET_2_0
+	: ICloneable
+#endif
 {
 	// Code page used by this encoding.
 	internal int codePage;
@@ -65,12 +69,13 @@ public abstract class Encoding
 	DecoderFallback decoder_fallback = new DecoderReplacementFallback (String.Empty);
 	EncoderFallback encoder_fallback = new EncoderReplacementFallback (String.Empty);
 
-	[MonoTODO]
+	[ComVisible (false)]
 	public bool IsReadOnly {
 		get { return is_readonly; }
 	}
 
 	[MonoTODO ("not used yet")]
+	[ComVisible (false)]
 	public DecoderFallback DecoderFallback {
 		get { return decoder_fallback; }
 		set {
@@ -83,6 +88,7 @@ public abstract class Encoding
 	}
 
 	[MonoTODO ("not used yet")]
+	[ComVisible (false)]
 	public EncoderFallback EncoderFallback {
 		get { return encoder_fallback; }
 		set {
@@ -405,6 +411,44 @@ public abstract class Encoding
 
 #if !ECMA_COMPAT
 
+#if NET_2_0
+
+	public virtual object Clone ()
+	{
+		return MemberwiseClone ();
+	}
+
+	public static Encoding GetEncoding (int codePage,
+		EncoderFallback encoderFallback, DecoderFallback decoderFallback)
+	{
+		if (encoderFallback == null)
+			throw new ArgumentNullException ("encoderFallback");
+		if (decoderFallback == null)
+			throw new ArgumentNullException ("decoderFallback");
+
+		Encoding e = GetEncoding (codePage).Clone () as Encoding;
+		e.is_readonly = false;
+		e.EncoderFallback = encoderFallback;
+		e.DecoderFallback = decoderFallback;
+		return e;
+	}
+
+	public static Encoding GetEncoding (string name,
+		EncoderFallback encoderFallback, DecoderFallback decoderFallback)
+	{
+		if (encoderFallback == null)
+			throw new ArgumentNullException ("encoderFallback");
+		if (decoderFallback == null)
+			throw new ArgumentNullException ("decoderFallback");
+
+		Encoding e = GetEncoding (name).Clone () as Encoding;
+		e.is_readonly = false;
+		e.EncoderFallback = encoderFallback;
+		e.DecoderFallback = decoderFallback;
+		return e;
+	}
+#endif
+
 	// Table of builtin web encoding names and the corresponding code pages.
 	private static readonly object[] encodings =
 		{