Exemple #1
0
 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;
 }
Exemple #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);
                    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;
        }
Exemple #3
0
        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));
        }