// dnlib: See LICENSE.txt for more info
using System.Diagnostics;
namespace dnlib.DotNet.MD {
public partial class TablesStream {
///
/// Reads a raw Module row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadModuleRow(uint rid, out RawModuleRow row) {
var table = ModuleTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawModuleRow(
reader.Unsafe_ReadUInt16(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader),
table.Column4.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw TypeRef row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadTypeRefRow(uint rid, out RawTypeRefRow row) {
var table = TypeRefTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawTypeRefRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw TypeDef row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadTypeDefRow(uint rid, out RawTypeDefRow row) {
var table = TypeDefTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawTypeDefRow(
reader.Unsafe_ReadUInt32(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader),
table.Column4.Unsafe_Read24(ref reader),
table.Column5.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw FieldPtr row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadFieldPtrRow(uint rid, out RawFieldPtrRow row) {
var table = FieldPtrTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawFieldPtrRow(table.Column0.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw Field row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadFieldRow(uint rid, out RawFieldRow row) {
var table = FieldTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawFieldRow(
reader.Unsafe_ReadUInt16(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw MethodPtr row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadMethodPtrRow(uint rid, out RawMethodPtrRow row) {
var table = MethodPtrTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawMethodPtrRow(table.Column0.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw Method row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadMethodRow(uint rid, out RawMethodRow row) {
var table = MethodTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var mrr = methodRowReader;
if (mrr is not null && mrr.TryReadRow(rid, out row))
return true;
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawMethodRow(
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
table.Column3.Unsafe_Read24(ref reader),
table.Column4.Unsafe_Read24(ref reader),
table.Column5.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw ParamPtr row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadParamPtrRow(uint rid, out RawParamPtrRow row) {
var table = ParamPtrTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawParamPtrRow(table.Column0.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw Param row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadParamRow(uint rid, out RawParamRow row) {
var table = ParamTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawParamRow(
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw InterfaceImpl row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadInterfaceImplRow(uint rid, out RawInterfaceImplRow row) {
var table = InterfaceImplTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawInterfaceImplRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw MemberRef row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadMemberRefRow(uint rid, out RawMemberRefRow row) {
var table = MemberRefTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawMemberRefRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw Constant row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadConstantRow(uint rid, out RawConstantRow row) {
var table = ConstantTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawConstantRow(
reader.Unsafe_ReadByte(),
reader.Unsafe_ReadByte(),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw CustomAttribute row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadCustomAttributeRow(uint rid, out RawCustomAttributeRow row) {
var table = CustomAttributeTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawCustomAttributeRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw FieldMarshal row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadFieldMarshalRow(uint rid, out RawFieldMarshalRow row) {
var table = FieldMarshalTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawFieldMarshalRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw DeclSecurity row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadDeclSecurityRow(uint rid, out RawDeclSecurityRow row) {
var table = DeclSecurityTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawDeclSecurityRow(
(short)reader.Unsafe_ReadUInt16(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw ClassLayout row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadClassLayoutRow(uint rid, out RawClassLayoutRow row) {
var table = ClassLayoutTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawClassLayoutRow(
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt32(),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw FieldLayout row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadFieldLayoutRow(uint rid, out RawFieldLayoutRow row) {
var table = FieldLayoutTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawFieldLayoutRow(
reader.Unsafe_ReadUInt32(),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw StandAloneSig row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadStandAloneSigRow(uint rid, out RawStandAloneSigRow row) {
var table = StandAloneSigTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawStandAloneSigRow(table.Column0.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw EventMap row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadEventMapRow(uint rid, out RawEventMapRow row) {
var table = EventMapTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawEventMapRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw EventPtr row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadEventPtrRow(uint rid, out RawEventPtrRow row) {
var table = EventPtrTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawEventPtrRow(table.Column0.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw Event row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadEventRow(uint rid, out RawEventRow row) {
var table = EventTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawEventRow(
reader.Unsafe_ReadUInt16(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw PropertyMap row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadPropertyMapRow(uint rid, out RawPropertyMapRow row) {
var table = PropertyMapTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawPropertyMapRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw PropertyPtr row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadPropertyPtrRow(uint rid, out RawPropertyPtrRow row) {
var table = PropertyPtrTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawPropertyPtrRow(table.Column0.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw Property row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadPropertyRow(uint rid, out RawPropertyRow row) {
var table = PropertyTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawPropertyRow(
reader.Unsafe_ReadUInt16(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw MethodSemantics row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadMethodSemanticsRow(uint rid, out RawMethodSemanticsRow row) {
var table = MethodSemanticsTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawMethodSemanticsRow(
reader.Unsafe_ReadUInt16(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw MethodImpl row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadMethodImplRow(uint rid, out RawMethodImplRow row) {
var table = MethodImplTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawMethodImplRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw ModuleRef row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadModuleRefRow(uint rid, out RawModuleRefRow row) {
var table = ModuleRefTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawModuleRefRow(table.Column0.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw TypeSpec row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadTypeSpecRow(uint rid, out RawTypeSpecRow row) {
var table = TypeSpecTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawTypeSpecRow(table.Column0.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw ImplMap row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadImplMapRow(uint rid, out RawImplMapRow row) {
var table = ImplMapTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawImplMapRow(
reader.Unsafe_ReadUInt16(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw FieldRVA row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadFieldRVARow(uint rid, out RawFieldRVARow row) {
var table = FieldRVATable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawFieldRVARow(
reader.Unsafe_ReadUInt32(),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw ENCLog row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadENCLogRow(uint rid, out RawENCLogRow row) {
var table = ENCLogTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawENCLogRow(
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt32());
return true;
}
///
/// Reads a raw ENCMap row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadENCMapRow(uint rid, out RawENCMapRow row) {
var table = ENCMapTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawENCMapRow(reader.Unsafe_ReadUInt32());
return true;
}
///
/// Reads a raw Assembly row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadAssemblyRow(uint rid, out RawAssemblyRow row) {
var table = AssemblyTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawAssemblyRow(
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt32(),
table.Column6.Unsafe_Read24(ref reader),
table.Column7.Unsafe_Read24(ref reader),
table.Column8.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw AssemblyProcessor row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadAssemblyProcessorRow(uint rid, out RawAssemblyProcessorRow row) {
var table = AssemblyProcessorTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawAssemblyProcessorRow(reader.Unsafe_ReadUInt32());
return true;
}
///
/// Reads a raw AssemblyOS row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadAssemblyOSRow(uint rid, out RawAssemblyOSRow row) {
var table = AssemblyOSTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawAssemblyOSRow(
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt32());
return true;
}
///
/// Reads a raw AssemblyRef row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadAssemblyRefRow(uint rid, out RawAssemblyRefRow row) {
var table = AssemblyRefTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawAssemblyRefRow(
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt32(),
table.Column5.Unsafe_Read24(ref reader),
table.Column6.Unsafe_Read24(ref reader),
table.Column7.Unsafe_Read24(ref reader),
table.Column8.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw AssemblyRefProcessor row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadAssemblyRefProcessorRow(uint rid, out RawAssemblyRefProcessorRow row) {
var table = AssemblyRefProcessorTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawAssemblyRefProcessorRow(
reader.Unsafe_ReadUInt32(),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw AssemblyRefOS row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadAssemblyRefOSRow(uint rid, out RawAssemblyRefOSRow row) {
var table = AssemblyRefOSTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawAssemblyRefOSRow(
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt32(),
table.Column3.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw File row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadFileRow(uint rid, out RawFileRow row) {
var table = FileTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawFileRow(
reader.Unsafe_ReadUInt32(),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw ExportedType row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadExportedTypeRow(uint rid, out RawExportedTypeRow row) {
var table = ExportedTypeTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawExportedTypeRow(
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt32(),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader),
table.Column4.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw ManifestResource row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadManifestResourceRow(uint rid, out RawManifestResourceRow row) {
var table = ManifestResourceTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawManifestResourceRow(
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt32(),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw NestedClass row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadNestedClassRow(uint rid, out RawNestedClassRow row) {
var table = NestedClassTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawNestedClassRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw GenericParam row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadGenericParamRow(uint rid, out RawGenericParamRow row) {
var table = GenericParamTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
if (table.Column4 is null) {
row = new RawGenericParamRow(
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader));
return true;
}
else {
row = new RawGenericParamRow(
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader),
table.Column4.Unsafe_Read24(ref reader));
return true;
}
}
///
/// Reads a raw MethodSpec row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadMethodSpecRow(uint rid, out RawMethodSpecRow row) {
var table = MethodSpecTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawMethodSpecRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw GenericParamConstraint row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadGenericParamConstraintRow(uint rid, out RawGenericParamConstraintRow row) {
var table = GenericParamConstraintTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawGenericParamConstraintRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw Document row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadDocumentRow(uint rid, out RawDocumentRow row) {
var table = DocumentTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawDocumentRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw MethodDebugInformation row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadMethodDebugInformationRow(uint rid, out RawMethodDebugInformationRow row) {
var table = MethodDebugInformationTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawMethodDebugInformationRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw LocalScope row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadLocalScopeRow(uint rid, out RawLocalScopeRow row) {
var table = LocalScopeTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawLocalScopeRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader),
table.Column3.Unsafe_Read24(ref reader),
reader.Unsafe_ReadUInt32(),
reader.Unsafe_ReadUInt32());
return true;
}
///
/// Reads a raw LocalVariable row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadLocalVariableRow(uint rid, out RawLocalVariableRow row) {
var table = LocalVariableTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawLocalVariableRow(
reader.Unsafe_ReadUInt16(),
reader.Unsafe_ReadUInt16(),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw LocalConstant row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadLocalConstantRow(uint rid, out RawLocalConstantRow row) {
var table = LocalConstantTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawLocalConstantRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw ImportScope row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadImportScopeRow(uint rid, out RawImportScopeRow row) {
var table = ImportScopeTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawImportScopeRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw StateMachineMethod row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadStateMachineMethodRow(uint rid, out RawStateMachineMethodRow row) {
var table = StateMachineMethodTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawStateMachineMethodRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a raw CustomDebugInformation row or returns false if the row doesn't exist
///
/// Row ID
/// Row data
///
public bool TryReadCustomDebugInformationRow(uint rid, out RawCustomDebugInformationRow row) {
var table = CustomDebugInformationTable;
if (table.IsInvalidRID(rid)) {
row = default;
return false;
}
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize;
row = new RawCustomDebugInformationRow(
table.Column0.Unsafe_Read24(ref reader),
table.Column1.Unsafe_Read24(ref reader),
table.Column2.Unsafe_Read24(ref reader));
return true;
}
///
/// Reads a column
///
/// The table
/// Row ID
/// Column index in
/// Result is put here or 0 if we return false
/// true if we could read the column, false otherwise
public bool TryReadColumn(MDTable table, uint rid, int colIndex, out uint value) =>
TryReadColumn(table, rid, table.TableInfo.Columns[colIndex], out value);
///
/// Reads a column
///
/// The table
/// Row ID
/// Column
/// Result is put here or 0 if we return false
/// true if we could read the column, false otherwise
public bool TryReadColumn(MDTable table, uint rid, ColumnInfo column, out uint value) {
if (table.IsInvalidRID(rid)) {
value = 0;
return false;
}
var cr = columnReader;
if (cr is not null && cr.ReadColumn(table, rid, column, out value))
return true;
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize + (uint)column.Offset;
value = column.Read(ref reader);
return true;
}
internal bool TryReadColumn24(MDTable table, uint rid, int colIndex, out uint value) =>
TryReadColumn24(table, rid, table.TableInfo.Columns[colIndex], out value);
internal bool TryReadColumn24(MDTable table, uint rid, ColumnInfo column, out uint value) {
Debug.Assert(column.Size == 2 || column.Size == 4);
if (table.IsInvalidRID(rid)) {
value = 0;
return false;
}
var cr = columnReader;
if (cr is not null && cr.ReadColumn(table, rid, column, out value))
return true;
var reader = table.DataReader;
reader.Position = (rid - 1) * (uint)table.TableInfo.RowSize + (uint)column.Offset;
value = column.Size == 2 ? reader.Unsafe_ReadUInt16() : reader.Unsafe_ReadUInt32();
return true;
}
}
}