ValueTypeFixupInfo.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 / Runtime / Serialization / ValueTypeFixupInfo.cs / 1305376 / ValueTypeFixupInfo.cs

                            // ==++== 
//
//   Copyright (c) Microsoft Corporation.  All rights reserved.
//
// ==--== 
/*============================================================
** 
** Class: ValueTypeFixupInfo 
**
** Purpose: Information about an object required to do a value-type 
** fixup.  This includes the id of the containing object and the
** member info (if the containing body is an object or value type)
** or the array indices (if the containing body is an array.)
** 
============================================================*/
namespace System.Runtime.Serialization { 
    using System.Reflection; 
    using System.Diagnostics.Contracts;
 
    internal class ValueTypeFixupInfo {

        //The id of the containing body.  This could be a regular
        //object, another value type, or an array.  For obvious reasons, 
        //the containing body can never have both a FieldInfo and
        //an array index. 
        private long m_containerID; 

        //The FieldInfo into the containing body.  This will only 
        //apply if the containing body is a field info or another
        //value type.
        private FieldInfo m_parentField;
 
        //The array index of the index into the parent.  This will only
        //apply if the containing body is an array. 
        private int[] m_parentIndex; 

        public ValueTypeFixupInfo(long containerID, FieldInfo member, int[] parentIndex) { 
            //If both member and arrayIndex are null, we don't have enough information to create
            //a tunnel to do the fixup.
            if (member==null && parentIndex==null) {
                throw new ArgumentException(Environment.GetResourceString("Argument_MustSupplyParent")); 
            }
            Contract.EndContractBlock(); 
 
            BCLDebug.Trace("SER", "[ValueTypeFixupInfo.ctor]Creating a VTFI with Container ID: ", containerID, " and MemberInfo ", member);
 
            if (containerID==0 && member==null) {
                m_containerID = containerID;
                m_parentField = member;
                m_parentIndex = parentIndex; 
            }
 
            //If the member isn't null, we know that they supplied a MemberInfo as the parent.  This means 
            //that the arrayIndex must be null because we can't have a FieldInfo into an array.
            if (member!=null) { 
                if (parentIndex!=null) {
                    throw new ArgumentException(Environment.GetResourceString("Argument_MemberAndArray"));
                }
 
                if (((((FieldInfo)member).FieldType).IsValueType) && containerID==0) {
                    throw new ArgumentException(Environment.GetResourceString("Argument_MustSupplyContainer")); 
                } 
            }
 
            m_containerID=containerID;
            m_parentField = (FieldInfo)member;
            m_parentIndex = parentIndex;
        } 

        public long ContainerID { 
            get { 
                return m_containerID;
            } 
        }

        public FieldInfo ParentField {
            get { 
                return m_parentField;
            } 
        } 

        public int[] ParentIndex { 
            get {
                return m_parentIndex;
            }
        } 
    }
} 

// 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