retdec
dotnet_class.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_FILEFORMAT_TYPES_DOTNET_TYPES_DOTNET_CLASS_H
8 #define RETDEC_FILEFORMAT_TYPES_DOTNET_TYPES_DOTNET_CLASS_H
9 
10 #include <memory>
11 #include <variant>
12 #include <vector>
13 
19 
20 namespace retdec {
21 namespace fileformat {
22 
26 class DotnetClass : public DotnetType
27 {
28  private:
29  std::variant<const TypeDef *, const TypeRef *> rawRecord;
31  std::size_t index;
32  std::size_t declaredFieldsCount;
33  std::size_t declaredMethodsCount;
35  std::vector<std::unique_ptr<DotnetField>> fields;
36  std::vector<std::unique_ptr<DotnetProperty>> properties;
37  std::vector<std::unique_ptr<DotnetMethod>> methods;
38  std::vector<std::string> genericParameters;
39  std::vector<std::unique_ptr<DotnetDataTypeBase>> baseTypes;
40  std::string libName;
42  bool abstract;
43  bool sealed;
45 
46  std::string getGenericParametersString() const;
47  public:
48  DotnetClass(MetadataTableType rType, std::size_t idx);
49 
52  const TypeDef* getRawTypeDef() const;
53  const TypeRef* getRawTypeRef() const;
54  const DotnetClass* getParent() const;
55  std::string getNameWithGenericParameters() const;
57  std::string getNameWithParentClassIndex() const;
58  std::string getNestedName() const;
59  const std::string& getLibName() const;
60  const std::string& getTopLevelNameSpace() const;
61  std::size_t getIndex() const;
62  std::size_t getDeclaredFieldsCount() const;
63  std::size_t getDeclaredMethodsCount() const;
64  std::size_t getDeclaredGenericParametersCount() const;
65  const std::vector<std::unique_ptr<DotnetField>>& getFields() const;
66  const std::vector<std::unique_ptr<DotnetProperty>>& getProperties() const;
67  const std::vector<std::unique_ptr<DotnetMethod>>& getMethods() const;
68  const std::vector<std::string>& getGenericParameters() const;
69  const std::vector<std::unique_ptr<DotnetDataTypeBase>>& getBaseTypes() const;
70  std::size_t getFieldsCount() const;
71  std::size_t getPropertiesCount() const;
72  std::size_t getMethodsCount() const;
73  std::size_t getGenericParametersCount() const;
74  std::string getTypeString() const;
77 
80  void setRawRecord(std::variant<const TypeDef*, const TypeRef*> rRecord);
81  void setParent(const DotnetClass* par);
82  void setDeclaredFieldsCount(std::size_t classFieldsCount);
83  void setDeclaredMethodsCount(std::size_t classMethodsCount);
84  void setDeclaredGenericParametersCount(std::size_t classGenericParamsCount);
85  void setLibName(const std::string &lName);
86  void setIsInterface(bool set);
87  void setIsAbstract(bool set);
88  void setIsSealed(bool set);
90 
93  bool isClass() const;
94  bool isInterface() const;
95  bool isAbstract() const;
96  bool isSealed() const;
98 
101  void addField(std::unique_ptr<DotnetField>&& field);
102  void addProperty(std::unique_ptr<DotnetProperty>&& property);
103  void addMethod(std::unique_ptr<DotnetMethod>&& method);
104  void addGenericParameter(std::string&& genericParam);
105  void addBaseType(std::unique_ptr<DotnetDataTypeBase>&& baseType);
107 };
108 
109 } // namespace fileformat
110 } // namespace retdec
111 
112 #endif
Definition: dotnet_class.h:27
std::string getNameWithGenericParameters() const
Definition: dotnet_class.cpp:80
std::size_t index
Definition: dotnet_class.h:31
std::string getNestedName() const
Definition: dotnet_class.cpp:112
std::string getTypeString() const
Definition: dotnet_class.cpp:284
void addMethod(std::unique_ptr< DotnetMethod > &&method)
Definition: dotnet_class.cpp:437
void setParent(const DotnetClass *par)
Definition: dotnet_class.cpp:311
std::size_t getPropertiesCount() const
Definition: dotnet_class.cpp:257
std::size_t getMethodsCount() const
Definition: dotnet_class.cpp:266
void setLibName(const std::string &lName)
Definition: dotnet_class.cpp:347
bool sealed
Definition: dotnet_class.h:43
const TypeDef * getRawTypeDef() const
Definition: dotnet_class.cpp:43
void addGenericParameter(std::string &&genericParam)
Definition: dotnet_class.cpp:446
std::size_t getDeclaredMethodsCount() const
Definition: dotnet_class.cpp:185
void setRawRecord(std::variant< const TypeDef *, const TypeRef * > rRecord)
Definition: dotnet_class.cpp:302
const std::string & getTopLevelNameSpace() const
Definition: dotnet_class.cpp:151
const std::string & getLibName() const
Definition: dotnet_class.cpp:133
bool isAbstract() const
Definition: dotnet_class.cpp:401
void setDeclaredMethodsCount(std::size_t classMethodsCount)
Definition: dotnet_class.cpp:329
std::variant< const TypeDef *, const TypeRef * > rawRecord
Definition: dotnet_class.h:29
void addBaseType(std::unique_ptr< DotnetDataTypeBase > &&baseType)
Definition: dotnet_class.cpp:455
DotnetClass(MetadataTableType rType, std::size_t idx)
Definition: dotnet_class.cpp:18
MetadataTableType getRecordType() const
Definition: dotnet_class.cpp:293
const std::vector< std::unique_ptr< DotnetMethod > > & getMethods() const
Definition: dotnet_class.cpp:221
bool isClass() const
Definition: dotnet_class.cpp:383
const TypeRef * getRawTypeRef() const
Definition: dotnet_class.cpp:57
std::size_t declaredMethodsCount
Definition: dotnet_class.h:33
const std::vector< std::unique_ptr< DotnetDataTypeBase > > & getBaseTypes() const
Definition: dotnet_class.cpp:239
void setIsAbstract(bool set)
Definition: dotnet_class.cpp:365
std::vector< std::unique_ptr< DotnetProperty > > properties
Definition: dotnet_class.h:36
const DotnetClass * parent
Definition: dotnet_class.h:30
std::string libName
Definition: dotnet_class.h:40
std::string getGenericParametersString() const
Definition: dotnet_class.cpp:30
const std::vector< std::unique_ptr< DotnetField > > & getFields() const
Definition: dotnet_class.cpp:203
MetadataTableType recordType
Definition: dotnet_class.h:44
std::vector< std::unique_ptr< DotnetField > > fields
Definition: dotnet_class.h:35
std::size_t getDeclaredFieldsCount() const
Definition: dotnet_class.cpp:176
std::string getFullyQualifiedNameWithGenericParameters() const
Definition: dotnet_class.cpp:89
const std::vector< std::string > & getGenericParameters() const
Definition: dotnet_class.cpp:230
std::size_t getGenericParametersCount() const
Definition: dotnet_class.cpp:275
std::size_t getFieldsCount() const
Definition: dotnet_class.cpp:248
std::string getNameWithParentClassIndex() const
Definition: dotnet_class.cpp:98
std::vector< std::unique_ptr< DotnetDataTypeBase > > baseTypes
Definition: dotnet_class.h:39
bool isInterface() const
Definition: dotnet_class.cpp:392
void setIsSealed(bool set)
Definition: dotnet_class.cpp:374
void addField(std::unique_ptr< DotnetField > &&field)
Definition: dotnet_class.cpp:419
std::size_t getDeclaredGenericParametersCount() const
Definition: dotnet_class.cpp:194
void setIsInterface(bool set)
Definition: dotnet_class.cpp:356
const DotnetClass * getParent() const
Definition: dotnet_class.cpp:71
std::size_t getIndex() const
Definition: dotnet_class.cpp:167
void addProperty(std::unique_ptr< DotnetProperty > &&property)
Definition: dotnet_class.cpp:428
std::size_t declaredGenericParametersCount
Definition: dotnet_class.h:34
std::size_t declaredFieldsCount
Definition: dotnet_class.h:32
void setDeclaredGenericParametersCount(std::size_t classGenericParamsCount)
Definition: dotnet_class.cpp:338
std::vector< std::unique_ptr< DotnetMethod > > methods
Definition: dotnet_class.h:37
bool classOrInterface
Definition: dotnet_class.h:41
const std::vector< std::unique_ptr< DotnetProperty > > & getProperties() const
Definition: dotnet_class.cpp:212
bool isSealed() const
Definition: dotnet_class.cpp:410
std::vector< std::string > genericParameters
Definition: dotnet_class.h:38
void setDeclaredFieldsCount(std::size_t classFieldsCount)
Definition: dotnet_class.cpp:320
Definition: dotnet_type.h:30
Conversion utilities.
Class for .NET field.
Class for .NET method.
Class for .NET property.
Class for .NET type.
MetadataTableType
Definition: metadata_table.h:17
Definition: archive_wrapper.h:19
Definition: metadata_tables.h:641
Definition: metadata_tables.h:627