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