[build] Change the way how mcs references are passed to compiler to always use full...
[mono.git] / mcs / class / I18N / Rare / CP1147.cs
index cf964f85f0429dcec7f71d7accf85c9f0ccf43c7..8c41518e08cb56fff4020ed388de130ac6e72588 100644 (file)
@@ -24,6 +24,9 @@
 
 // Generated from "ibm-1147.ucm".
 
+// WARNING: Modifying this file directly might be a bad idea.
+// You should edit the code generator tools/ucm2cp.c instead for your changes
+// to appear in all relevant classes.
 namespace I18N.Rare
 {
 
@@ -31,6 +34,7 @@ using System;
 using System.Text;
 using I18N.Common;
 
+[Serializable]
 public class CP1147 : ByteEncoding
 {
        public CP1147()
@@ -85,18 +89,63 @@ public class CP1147 : ByteEncoding
                '\u00DC', '\u00D9', '\u00DA', '\u009F', 
        };
 
+       // Get the number of bytes needed to encode a character buffer.
+       public unsafe override int GetByteCountImpl (char* chars, int count)
+       {
+               if (this.EncoderFallback != null)               {
+                       //Calculate byte count by actually doing encoding and discarding the data.
+                       return GetBytesImpl(chars, count, null, 0);
+               }
+               else
+               
+               {
+                       return count;
+               }
+       }
+       
+       // Get the number of bytes needed to encode a character buffer.
+       public override int GetByteCount (String s)
+       {
+               if (this.EncoderFallback != null)
+               {
+                       //Calculate byte count by actually doing encoding and discarding the data.
+                       unsafe
+                       {
+                               fixed (char *s_ptr = s)
+                               {
+                                       return GetBytesImpl(s_ptr, s.Length, null, 0);
+                               }
+                       }
+               }
+               else
+               {
+                       //byte count equals character count because no EncoderFallback set
+                       return s.Length;
+               }
+       }
+       
+       //ToBytes is just an alias for GetBytesImpl, but doesn't return byte count
        protected unsafe override void ToBytes(char* chars, int charCount,
                                        byte* bytes, int byteCount)
+       {
+               //Calling ToBytes with null destination buffer doesn't make any sense
+               if (bytes == null)
+                       throw new ArgumentNullException("bytes");
+               GetBytesImpl(chars, charCount, bytes, byteCount);
+       }
+       
+       public unsafe override int GetBytesImpl (char* chars, int charCount,
+                                                byte* bytes, int byteCount)
        {
                int ch;
                int charIndex = 0;
                int byteIndex = 0;
-#if NET_2_0
                EncoderFallbackBuffer buffer = null;
-#endif
-               while(charCount > 0)
+               while (charCount > 0)
                {
-                       ch = (int)(chars[charIndex++]);
+                       ch = (int)(chars[charIndex]);
+                       charIndex++;
+                       charCount--;
                        if(ch >= 4) switch(ch)
                        {
                                case 0x000B:
@@ -484,17 +533,16 @@ public class CP1147 : ByteEncoding
                                case 0xFF5D: ch = 0x54; break;
                                case 0xFF5E: ch = 0xBD; break;
                                default:
-#if NET_2_0
                                        HandleFallback (ref buffer, chars, ref charIndex, ref charCount, bytes, ref byteIndex, ref byteCount);
-#else
-                                               ch = 0x3F;
-#endif
-                                       break;
+                                       continue;
                        }
-                       bytes[byteIndex++] = (byte)ch;
-                       --charCount;
-                       --byteCount;
+                       //Write encoded byte to buffer, if buffer is defined and fallback was not used
+                       if (bytes != null)
+                               bytes[byteIndex] = (byte)ch;
+                       byteIndex++;
+                       byteCount--;
                }
+               return byteIndex;
        }
 
        /*
@@ -901,6 +949,7 @@ public class CP1147 : ByteEncoding
 
 }; // class CP1147
 
+[Serializable]
 public class ENCibm1147 : CP1147
 {
        public ENCibm1147() : base() {}