ValueTypeFixupInfo.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / clr / src / BCL / System / Runtime / Serialization / ValueTypeFixupInfo.cs / 1 / 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; 

    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) {
 
            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 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"));
            } 

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


                        

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