retdec
metadata_table.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_TYPES_DOTNET_HEADERS_METADATA_TABLE_H
8 #define RETDEC_FILEFORMAT_TYPES_DOTNET_HEADERS_METADATA_TABLE_H
9 
10 #include <string>
11 #include <vector>
12 
13 namespace retdec {
14 namespace fileformat {
15 
17 {
18  Module = 0,
19  TypeRef = 1,
20  TypeDef = 2,
21  FieldPtr = 3,
22  Field = 4,
23  MethodPtr = 5,
24  MethodDef = 6,
25  ParamPtr = 7,
26  Param = 8,
27  InterfaceImpl = 9,
28  MemberRef = 10,
29  Constant = 11,
30  CustomAttribute = 12,
31  FieldMarshal = 13,
32  DeclSecurity = 14,
33  ClassLayout = 15,
34  FieldLayout = 16,
35  StandAloneSig = 17,
36  EventMap = 18,
37  Event = 20,
38  PropertyMap = 21,
39  PropertyPtr = 22,
40  Property = 23,
41  MethodSemantics = 24,
42  MethodImpl = 25,
43  ModuleRef = 26,
44  TypeSpec = 27,
45  ImplMap = 28,
46  FieldRVA = 29,
47  ENCLog = 30,
48  ENCMap = 31,
49  Assembly = 32,
50  AssemblyProcessor = 33,
51  AssemblyOS = 34,
52  AssemblyRef = 35,
54  AssemblyRefOS = 37,
55  File = 38,
56  ExportedType = 39,
57  ManifestResource = 40,
58  NestedClass = 41,
59  GenericParam = 42,
60  MethodSpec = 43,
62 };
63 
68 {
69  private:
71  std::uint32_t size;
72  protected:
73  BaseMetadataTable(MetadataTableType tableType, std::uint32_t tableSize) : type(tableType), size(tableSize) {}
74  public:
75  virtual ~BaseMetadataTable() = default;
76 
79  MetadataTableType getType() const { return type; }
80  std::uint32_t getSize() const { return size; }
82 };
83 
87 template <typename T>
89 {
90  private:
91  std::vector<T> rows;
92  public:
93  MetadataTable(MetadataTableType tableType, std::uint32_t tableSize) : BaseMetadataTable(tableType, tableSize) {}
94 
97  std::size_t getNumberOfRows() const { return rows.size(); }
98  const T* getRow(std::size_t index) const { return index - 1 >= rows.size() ? nullptr : &rows[index - 1]; }
99  auto begin() const { return rows.begin(); }
100  auto end() const { return rows.end(); }
102 
105  template <typename U>
106  void addRow(U&& row)
107  {
108  rows.push_back(std::forward<U>(row));
109  }
111 };
112 
113 } // namespace fileformat
114 } // namespace retdec
115 
116 #endif
Definition: metadata_table.h:68
std::uint32_t getSize() const
Definition: metadata_table.h:80
std::uint32_t size
Definition: metadata_table.h:71
BaseMetadataTable(MetadataTableType tableType, std::uint32_t tableSize)
Definition: metadata_table.h:73
MetadataTableType type
Definition: metadata_table.h:70
MetadataTableType getType() const
Definition: metadata_table.h:79
Definition: metadata_table.h:89
const T * getRow(std::size_t index) const
Definition: metadata_table.h:98
auto begin() const
Definition: metadata_table.h:99
std::vector< T > rows
Definition: metadata_table.h:91
void addRow(U &&row)
Definition: metadata_table.h:106
auto end() const
Definition: metadata_table.h:100
MetadataTable(MetadataTableType tableType, std::uint32_t tableSize)
Definition: metadata_table.h:93
std::size_t getNumberOfRows() const
Definition: metadata_table.h:97
MetadataTableType
Definition: metadata_table.h:17
Definition: archive_wrapper.h:19
Definition: metadata_tables.h:1079
Definition: metadata_tables.h:1069
Definition: metadata_tables.h:1131
Definition: metadata_tables.h:1119
Definition: metadata_tables.h:1093
Definition: metadata_tables.h:1043
Definition: metadata_tables.h:847
Definition: metadata_tables.h:792
Definition: metadata_tables.h:807
Definition: metadata_tables.h:833
Definition: metadata_tables.h:1021
Definition: metadata_tables.h:1033
Definition: metadata_tables.h:883
Definition: metadata_tables.h:895
Definition: metadata_tables.h:1161
Definition: metadata_tables.h:861
Definition: metadata_tables.h:821
Definition: metadata_tables.h:673
Definition: metadata_tables.h:1009
Definition: metadata_tables.h:683
Definition: metadata_tables.h:1147
Definition: metadata_tables.h:1235
Definition: metadata_tables.h:1207
Definition: metadata_tables.h:993
Definition: metadata_tables.h:766
Definition: metadata_tables.h:1179
Definition: metadata_tables.h:778
Definition: metadata_tables.h:712
Definition: metadata_tables.h:959
Definition: metadata_tables.h:702
Definition: metadata_tables.h:945
Definition: metadata_tables.h:1223
Definition: metadata_tables.h:973
Definition: metadata_tables.h:1195
Definition: metadata_tables.h:740
Definition: metadata_tables.h:750
Definition: metadata_tables.h:919
Definition: metadata_tables.h:909
Definition: metadata_tables.h:931
Definition: metadata_tables.h:873
Definition: metadata_tables.h:641
Definition: metadata_tables.h:627
Definition: metadata_tables.h:983