MLangCodePageEncoding.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / Text / MLangCodePageEncoding.cs / 1305376 / MLangCodePageEncoding.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 

// WARNING: 
// 
// This is just an IObjectReference proxy for the former MLang Encodings (V1.1)
// We keep the old name now even for the Whidbey V2.0 IObjectReference because it also 
// works with the Everett V1.1 version.
namespace System.Text
{
    using System; 
    using System.Runtime.Serialization;
    using System.Security.Permissions; 
    using System.Diagnostics.Contracts; 

    /*=================================MLangCodePageEncoding================================== 
    ** This class is here only to deserialize the MLang classes from Everett (V1.1) into
    ** Appropriate Whidbey (V2.0) objects.  We also serialize the Whidbey classes
    ** using this proxy since we pretty much need one anyway and that solves Whidbey
    ** to Everett compatibility as well. 
    ==============================================================================*/
 
    [Serializable] 
    internal sealed class MLangCodePageEncoding : ISerializable, IObjectReference
    { 
        // Temp stuff
        [NonSerialized]
        private int m_codePage;
        [NonSerialized] 
        private bool m_isReadOnly;
        [NonSerialized] 
        private bool m_deserializedFromEverett = false; 

        [NonSerialized] 
        private EncoderFallback encoderFallback = null;
        [NonSerialized]
        private DecoderFallback decoderFallback = null;
 
        // Might need this when GetRealObjecting
        [NonSerialized] 
        private Encoding realEncoding = null; 

        // Constructor called by serialization. 
        internal MLangCodePageEncoding(SerializationInfo info, StreamingContext context)
        {
            // Any info?
            if (info==null) throw new ArgumentNullException("info"); 
            Contract.EndContractBlock();
 
            // All versions have a code page 
            this.m_codePage = (int)info.GetValue("m_codePage", typeof(int));
 
            // See if we have a code page
            try
            {
                // 
                // Try Whidbey V2.0 Fields
                // 
                this.m_isReadOnly = (bool)info.GetValue("m_isReadOnly", typeof(bool)); 

                this.encoderFallback = (EncoderFallback)info.GetValue("encoderFallback", typeof(EncoderFallback)); 
                this.decoderFallback = (DecoderFallback)info.GetValue("decoderFallback", typeof(DecoderFallback));
            }
            catch (SerializationException)
            { 
                //
                // Didn't have Whidbey things, must be Everett 
                // 
                this.m_deserializedFromEverett = true;
 
                // May as well be read only
                this.m_isReadOnly = true;
            }
        } 

        // Just get it from GetEncoding 
        [System.Security.SecurityCritical]  // auto-generated 
        public Object GetRealObject(StreamingContext context)
        { 
            // Get our encoding (Note: This has default fallbacks for readonly and everett cases)
            this.realEncoding = Encoding.GetEncoding(this.m_codePage);

            // If its read only then it uses default fallbacks, otherwise pick up the new ones 
            // Otherwise we want to leave the new one read only
            if (!this.m_deserializedFromEverett && !this.m_isReadOnly) 
            { 
                this.realEncoding = (Encoding)this.realEncoding.Clone();
                this.realEncoding.EncoderFallback = this.encoderFallback; 
                this.realEncoding.DecoderFallback = this.decoderFallback;
            }

            return this.realEncoding; 
        }
 
#if FEATURE_SERIALIZATION 
        // ISerializable implementation
        [System.Security.SecurityCritical]  // auto-generated_required 
        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
        {
            // We cannot ever call this.
            Contract.Assert(false, "Didn't expect to make it to MLangCodePageEncoding ISerializable.GetObjectData"); 
            throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
        } 
#endif 

        // Same problem with the Encoder, this only happens with Everett Encoders 
        [Serializable]
        internal sealed class MLangEncoder : ISerializable, IObjectReference
        {
            // Might need this when GetRealObjecting 
            [NonSerialized]
            private Encoding realEncoding = null; 
 
            // Constructor called by serialization, have to handle deserializing from Everett
            internal MLangEncoder(SerializationInfo info, StreamingContext context) 
            {
                // Any info?
                if (info==null) throw new ArgumentNullException("info");
                Contract.EndContractBlock(); 

                this.realEncoding = (Encoding)info.GetValue("m_encoding", typeof(Encoding)); 
            } 

            // Just get it from GetEncoder 
            [System.Security.SecurityCritical]  // auto-generated
            public Object GetRealObject(StreamingContext context)
            {
                return this.realEncoding.GetEncoder(); 
            }
 
#if FEATURE_SERIALIZATION 
            // ISerializable implementation, get data for this object
            [System.Security.SecurityCritical]  // auto-generated_required 
            void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
            {
                // We cannot ever call this.
                Contract.Assert(false, "Didn't expect to make it to MLangCodePageEncoding.MLangEncoder.GetObjectData"); 
                throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException"));
            } 
#endif 
        }
 

        // Same problem with the Decoder, this only happens with Everett Decoders
        [Serializable]
        internal sealed class MLangDecoder : ISerializable, IObjectReference 
        {
            // Might need this when GetRealObjecting 
            [NonSerialized] 
            private Encoding realEncoding = null;
 
            // Constructor called by serialization, have to handle deserializing from Everett
            internal MLangDecoder(SerializationInfo info, StreamingContext context)
            {
                // Any info? 
                if (info==null) throw new ArgumentNullException("info");
                Contract.EndContractBlock(); 
 
                this.realEncoding = (Encoding)info.GetValue("m_encoding", typeof(Encoding));
            } 

            // Just get it from GetDecoder
            [System.Security.SecurityCritical]  // auto-generated
            public Object GetRealObject(StreamingContext context) 
            {
                return this.realEncoding.GetDecoder(); 
            } 

#if FEATURE_SERIALIZATION 
            // ISerializable implementation, get data for this object
            [System.Security.SecurityCritical]  // auto-generated_required
            void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
            { 
                // We cannot ever call this.
                Contract.Assert(false, "Didn't expect to make it to MLangCodePageEncoding.MLangDecoder.GetObjectData"); 
                throw new ArgumentException(Environment.GetResourceString("Arg_ExecutionEngineException")); 
            }
#endif 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK