Пример #1
0
 internal CliMetadataMethodDefinitionLockedTableRow(uint index, byte state, ICliMetadataRoot metadataRoot, uint rva, MethodImplementationDetails implementationDetails, MethodUseDetails usageDetails, uint nameIndex, uint signatureIndex, uint parameterStartIndex)
 {
     this.index                 = index;
     this.metadataRoot          = metadataRoot;
     this.state                 = state;
     this.rva                   = rva;
     this.implementationDetails = implementationDetails;
     this.usageDetails          = usageDetails;
     this.nameIndex             = nameIndex;
     this.signatureIndex        = signatureIndex;
     this.parameterStartIndex   = parameterStartIndex;
 }
Пример #2
0
        public override sealed void Read()
        {
            if (this.fullyRead)
            {
                return;
            }
            for (uint index = 1; (index <= this.Count); index++)
            {
                bool gotLock = false;
                Monitor.Enter(this.syncObject, ref gotLock);
                if (!(base.ItemLoaded(index)))
                {
                    this.fStream.Seek((this.streamOffset + ((index - 1) * this.__size)), SeekOrigin.Begin);
                    uint rva = this.reader.ReadUInt32();
                    MethodImplementationDetails implementationDetails = this.reader.ReadUInt16();
                    MethodUseDetails            usageDetails          = this.reader.ReadUInt16();
                    uint nameIndex;
                    switch (this.state)
                    {
                    case 4:
                    case 5:
                    case 6:
                    case 7:
                        nameIndex = this.reader.ReadUInt32();
                        break;

                    default:
                        nameIndex = this.reader.ReadUInt16();
                        break;
                    }
                    uint signatureIndex;
                    switch (this.state)
                    {
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                        signatureIndex = this.reader.ReadUInt32();
                        break;

                    default:
                        signatureIndex = this.reader.ReadUInt16();
                        break;
                    }
                    uint parameterStartIndex;
                    switch (this.state)
                    {
                    case 2:
                    case 3:
                    case 6:
                    case 7:
                        parameterStartIndex = this.reader.ReadUInt32();
                        break;

                    default:
                        parameterStartIndex = this.reader.ReadUInt16();
                        break;
                    }
                    base.InjectLoadedItem(new CliMetadataMethodDefinitionLockedTableRow(index, this.state, this.metadataRoot,
                                                                                        rva, implementationDetails, usageDetails,
                                                                                        nameIndex, signatureIndex, parameterStartIndex), index);
                }
                if (gotLock)
                {
                    Monitor.Exit(this.syncObject);
                }
            }
            this.fullyRead = true;
        }
Пример #3
0
        protected override sealed ICliMetadataMethodDefinitionTableRow ReadElementAt(uint index)
        {
            bool gotLock = false;

            Monitor.Enter(this.syncObject, ref gotLock);
            if (index == 0)
            {
                return(null);
            }
            this.fStream.Seek((this.streamOffset + ((index - 1) * this.__size)), SeekOrigin.Begin);
            uint rva = this.reader.ReadUInt32();
            MethodImplementationDetails implementationDetails = this.reader.ReadUInt16();
            MethodUseDetails            usageDetails          = this.reader.ReadUInt16();
            uint nameIndex;

            switch (this.state)
            {
            case 4:
            case 5:
            case 6:
            case 7:
                nameIndex = this.reader.ReadUInt32();
                break;

            default:
                nameIndex = this.reader.ReadUInt16();
                break;
            }
            uint signatureIndex;

            switch (this.state)
            {
            case 1:
            case 3:
            case 5:
            case 7:
                signatureIndex = this.reader.ReadUInt32();
                break;

            default:
                signatureIndex = this.reader.ReadUInt16();
                break;
            }
            uint parameterStartIndex;

            switch (this.state)
            {
            case 2:
            case 3:
            case 6:
            case 7:
                parameterStartIndex = this.reader.ReadUInt32();
                break;

            default:
                parameterStartIndex = this.reader.ReadUInt16();
                break;
            }
            if (gotLock)
            {
                Monitor.Exit(this.syncObject);
            }
            return(new CliMetadataMethodDefinitionLockedTableRow(index, this.state, this.metadataRoot,
                                                                 rva, implementationDetails, usageDetails,
                                                                 nameIndex, signatureIndex, parameterStartIndex));
        }