+2006-08-24 Atsushi Enomoto <atsushi@ximian.com>
+
+ * Encoding.cs :
+ Consider DecoderFallback and EncoderFallback in 2.0 Equals()
+ and GetHashCode().
+ * UTF32Encoding.cs, UTF7Encoding.cs :
+ Fixed GetHashCode() and Equals() as well.
+ Added several missing overrides in 2.0.
+
2006-08-24 Atsushi Enomoto <atsushi@ximian.com>
* Encoding.cs : implemented IsAlwaysNormalized().
{
Encoding enc = (obj as Encoding);
if (enc != null) {
+#if NET_2_0
+ return codePage == enc.codePage &&
+ DecoderFallback.Equals (enc.DecoderFallback) &&
+ EncoderFallback.Equals (enc.EncoderFallback);
+#else
return (codePage == enc.codePage);
+#endif
} else {
return false;
}
// Get a hash code for this instance.
public override int GetHashCode ()
{
+#if NET_2_0
+ return DecoderFallback.GetHashCode () << 24 + EncoderFallback.GetHashCode () << 16 + codePage;
+#else
return codePage;
+#endif
}
// Get the maximum number of bytes needed to encode a
// Get the hash code for this object.
public override int GetHashCode ()
{
- return base.GetHashCode ();
+ int basis = base.GetHashCode ();
+ if (bigEndian)
+ basis ^= 0x1F;
+ if (byteOrderMark)
+ basis ^= 0x3F;
+ return basis;
}
// UTF32 decoder implementation.
return base.GetBytes (s);
}
#endif
-
+
+#if NET_2_0
+ // a bunch of practically missing implementations (but should just work)
+
+ public override int GetByteCount (string s)
+ {
+ return base.GetByteCount (s);
+ }
+
+ [CLSCompliantAttribute (false)]
+ public override unsafe int GetBytes (char *chars, int charCount, byte *bytes, int byteCount)
+ {
+ return base.GetBytes (chars, charCount, bytes, byteCount);
+ }
+
+ public override int GetBytes (string s, int charIndex, int charCount, byte [] bytes, int byteIndex)
+ {
+ return base.GetBytes (s, charIndex, charCount, bytes, byteIndex);
+ }
+
+ [CLSCompliantAttribute (false)]
+ public override unsafe int GetCharCount (byte *bytes, int count)
+ {
+ return base.GetCharCount (bytes, count);
+ }
+
+ [CLSCompliantAttribute (false)]
+ public override unsafe int GetChars (byte *bytes, int byteCount, char* chars, int charCount)
+ {
+ return base.GetChars (bytes, byteCount, chars, charCount);
+ }
+
+ public override string GetString (byte [] bytes, int index, int count)
+ {
+ return base.GetString (bytes, index, count);
+ }
+
+ public override Encoder GetEncoder ()
+ {
+ return base.GetEncoder ();
+ }
+#endif
}; // class UTF32Encoding
windows_code_page = UnicodeEncoding.UNICODE_CODE_PAGE;
}
+#if NET_2_0
+ public override int GetHashCode ()
+ {
+ int basis = base.GetHashCode ();
+ return allowOptionals ? -basis : basis;
+ }
+
+ public override bool Equals (object other)
+ {
+ UTF7Encoding e = other as UTF7Encoding;
+ if (e == null)
+ return false;
+ return allowOptionals == e.allowOptionals &&
+ EncoderFallback.Equals (e.EncoderFallback) &&
+ DecoderFallback.Equals (e.DecoderFallback);
+ }
+#endif
+
// Internal version of "GetByteCount" that can handle
// a rolling state between calls.
private static int InternalGetByteCount
} // class UTF7Encoder
+#if NET_2_0
+ // a bunch of practically missing implementations (but should just work)
+
+ [CLSCompliantAttribute (false)]
+ public override unsafe int GetByteCount (char *chars, int count)
+ {
+ return base.GetByteCount (chars, count);
+ }
+
+ public override int GetByteCount (string s)
+ {
+ return base.GetByteCount (s);
+ }
+
+ [CLSCompliantAttribute (false)]
+ public override unsafe int GetBytes (char *chars, int charCount, byte* bytes, int byteCount)
+ {
+ return base.GetBytes (chars, charCount, bytes, byteCount);
+ }
+
+ public override int GetBytes (string s, int charIndex, int charCount, byte [] bytes, int byteIndex)
+ {
+ return base.GetBytes (s, charIndex, charCount, bytes, byteIndex);
+ }
+
+ [CLSCompliantAttribute (false)]
+ public override unsafe int GetCharCount (byte *bytes, int count)
+ {
+ return base.GetCharCount (bytes, count);
+ }
+
+ [CLSCompliantAttribute (false)]
+ public override unsafe int GetChars (byte* bytes, int byteCount, char* chars, int charCount)
+ {
+ return base.GetChars (bytes, byteCount, chars, charCount);
+ }
+
+ public override string GetString (byte [] bytes, int index, int count)
+ {
+ return base.GetString (bytes, index, count);
+ }
+
+#endif
+
}; // class UTF7Encoding
}; // namespace System.Text