private byte[] LoadBlobDataGeneral(uint index, _ICliMetadataBlobEntry result) { if (result.BlobData == null) { this.reader.BaseStream.Seek(index + result.LengthByteCount, SeekOrigin.Begin); byte[] resultBlob = new byte[result.Length]; reader.Read(resultBlob, 0, result.Length); result.BlobData = resultBlob; return(resultBlob); } else { return(result.BlobData); } }
private ICliMetadataCustomAttribute GetCustomAttribute(_ICliManager identityManager, ICliMetadataCustomAttributeTableRow target, _ICliMetadataBlobEntry entry) { uint offset = target.ValueIndex + entry.LengthByteCount; this.reader.BaseStream.Seek(offset, SeekOrigin.Begin); return((ICliMetadataCustomAttribute)(entry.Signature = SignatureParser.ParseCustomAttribute(reader, metadataRoot, identityManager, target, (uint)entry.Length))); }
private void LoadSignatureGeneral(SignatureKinds signatureKind, uint heapIndex, _ICliMetadataBlobEntry entry) { lock (this.syncObject) { uint offset = heapIndex + entry.LengthByteCount; this.reader.BaseStream.Seek(offset, SeekOrigin.Begin); switch (signatureKind) { case SignatureKinds.MethodDefSig: entry.Signature = SignatureParser.ParseMethodDefSig(this.reader, metadataRoot); break; case SignatureKinds.MethodRefSig: entry.Signature = SignatureParser.ParseMethodRefSig(this.reader, metadataRoot); break; case SignatureKinds.FieldSig: entry.Signature = SignatureParser.ParseFieldSig(this.reader, metadataRoot); break; case SignatureKinds.PropertySig: entry.Signature = SignatureParser.ParsePropertySig(this.reader, metadataRoot); break; case SignatureKinds.StandaloneSignature: entry.Signature = SignatureParser.ParseStandaloneSig(this.reader, metadataRoot); break; case SignatureKinds.CustomModifier: entry.Signature = SignatureParser.ParseCustomModifier(this.reader, metadataRoot); break; case SignatureKinds.Param: entry.Signature = SignatureParser.ParseParam(this.reader, metadataRoot); break; case SignatureKinds.Type: entry.Signature = SignatureParser.ParseType(this.reader, metadataRoot); break; case SignatureKinds.ArrayShape: entry.Signature = SignatureParser.ParseArrayShape(this.reader, metadataRoot); break; case SignatureKinds.TypeSpec: entry.Signature = SignatureParser.ParseTypeSpec(this.reader, metadataRoot); break; case SignatureKinds.MethodSpec: entry.Signature = SignatureParser.ParseMethodSpec(this.reader, metadataRoot); break; case SignatureKinds.MemberRefSig: entry.Signature = SignatureParser.ParseMemberRefSig(this.reader, metadataRoot); break; default: throw new ArgumentOutOfRangeException("signatureKind"); } } }