internal CliMetadataFileLockedTableRow(uint index, byte state, ICliMetadataRoot metadataRoot, CliMetadataFileAttributes flags, uint nameIndex, uint hashValueIndex) { this.index = index; this.metadataRoot = metadataRoot; this.state = state; this.flags = flags; this.nameIndex = nameIndex; this.hashValueIndex = hashValueIndex; }
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); CliMetadataFileAttributes flags = ((CliMetadataFileAttributes)(this.reader.ReadUInt32())); uint nameIndex; switch (this.state) { case 2: case 3: nameIndex = this.reader.ReadUInt32(); break; default: nameIndex = this.reader.ReadUInt16(); break; } uint hashValueIndex; switch (this.state) { case 1: case 3: hashValueIndex = this.reader.ReadUInt32(); break; default: hashValueIndex = this.reader.ReadUInt16(); break; } base.InjectLoadedItem(new CliMetadataFileLockedTableRow(index, this.state, this.metadataRoot, flags, nameIndex, hashValueIndex), index); } if (gotLock) { Monitor.Exit(this.syncObject); } } this.fullyRead = true; }
protected override sealed ICliMetadataFileTableRow 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); CliMetadataFileAttributes flags = ((CliMetadataFileAttributes)(this.reader.ReadUInt32())); uint nameIndex; switch (this.state) { case 2: case 3: nameIndex = this.reader.ReadUInt32(); break; default: nameIndex = this.reader.ReadUInt16(); break; } uint hashValueIndex; switch (this.state) { case 1: case 3: hashValueIndex = this.reader.ReadUInt32(); break; default: hashValueIndex = this.reader.ReadUInt16(); break; } if (gotLock) { Monitor.Exit(this.syncObject); } return(new CliMetadataFileLockedTableRow(index, this.state, this.metadataRoot, flags, nameIndex, hashValueIndex)); }