Reflection for RapidJSON
0.0.17
Reflection for serializing/deserializing with RapidJSON
Toggle main menu visibility
Loading...
Searching...
No Matches
serializationcodegenerator.h
Go to the documentation of this file.
1
#ifndef REFLECTIVE_RAPIDJSON_SERIALIZATION_CODE_GENERATOR_H
2
#define REFLECTIVE_RAPIDJSON_SERIALIZATION_CODE_GENERATOR_H
3
4
#include "
./codegenerator.h
"
5
6
#include <llvm/ADT/StringRef.h>
7
8
#include <optional>
9
10
namespace
ReflectiveRapidJSON
{
11
12
std::ostream &
operator<<
(std::ostream &os, llvm::StringRef str);
13
18
class
SerializationCodeGenerator
:
public
CodeGenerator
{
19
public
:
20
enum class
IsRelevant
{ Yes, No, Maybe };
21
struct
RelevantClass
{
22
explicit
RelevantClass
(std::string &&
qualifiedName
, clang::CXXRecordDecl *
record
);
23
24
std::string
qualifiedName
;
25
std::string
relevantBase
;
26
clang::CXXRecordDecl *
record
=
nullptr
;
27
IsRelevant
isRelevant
=
IsRelevant::Maybe
;
28
};
29
30
SerializationCodeGenerator
(
CodeFactory
&
factory
);
31
32
void
addDeclaration
(clang::Decl *decl)
override
;
33
34
protected
:
35
virtual
void
computeRelevantClass
(
RelevantClass
&possiblyRelevantClass)
const
;
36
std::vector<RelevantClass>
findRelevantClasses
()
const
;
37
static
std::vector<const RelevantClass *>
findRelevantBaseClasses
(
38
const
RelevantClass
&relevantClass,
const
std::vector<RelevantClass> &relevantBases);
39
40
protected
:
41
const
char
*
m_qualifiedNameOfRecords
;
42
const
char
*
m_qualifiedNameOfAdaptionRecords
;
43
44
private
:
45
std::vector<clang::CXXRecordDecl *> m_records;
46
std::vector<RelevantClass> m_adaptionRecords;
47
};
48
49
inline
SerializationCodeGenerator::RelevantClass::RelevantClass
(std::string &&
qualifiedName
, clang::CXXRecordDecl *
record
)
50
:
qualifiedName
(
qualifiedName
)
51
,
record
(
record
)
52
{
53
}
54
55
inline
SerializationCodeGenerator::SerializationCodeGenerator
(
CodeFactory
&
factory
)
56
:
CodeGenerator
(
factory
)
57
,
m_qualifiedNameOfRecords
(nullptr)
58
,
m_qualifiedNameOfAdaptionRecords
(nullptr)
59
{
60
}
61
62
}
// namespace ReflectiveRapidJSON
63
64
#endif
// REFLECTIVE_RAPIDJSON_SERIALIZATION_CODE_GENERATOR_H
ReflectiveRapidJSON::CodeFactory
The CodeFactory class produces additional (reflection) code for a specified list of C++ source files.
Definition
codefactory.h:27
ReflectiveRapidJSON::CodeGenerator::CodeGenerator
CodeGenerator(CodeFactory &factory)
Definition
codegenerator.h:43
ReflectiveRapidJSON::CodeGenerator::factory
CodeFactory & factory() const
Definition
codegenerator.h:49
ReflectiveRapidJSON::SerializationCodeGenerator::addDeclaration
void addDeclaration(clang::Decl *decl) override
Adds all class declarations (to the internal member variable m_records).
Definition
serializationcodegenerator.cpp:29
ReflectiveRapidJSON::SerializationCodeGenerator::findRelevantBaseClasses
static std::vector< const RelevantClass * > findRelevantBaseClasses(const RelevantClass &relevantClass, const std::vector< RelevantClass > &relevantBases)
Definition
serializationcodegenerator.cpp:124
ReflectiveRapidJSON::SerializationCodeGenerator::m_qualifiedNameOfRecords
const char * m_qualifiedNameOfRecords
Definition
serializationcodegenerator.h:41
ReflectiveRapidJSON::SerializationCodeGenerator::IsRelevant
IsRelevant
Definition
serializationcodegenerator.h:20
ReflectiveRapidJSON::SerializationCodeGenerator::IsRelevant::Maybe
@ Maybe
Definition
serializationcodegenerator.h:20
ReflectiveRapidJSON::SerializationCodeGenerator::computeRelevantClass
virtual void computeRelevantClass(RelevantClass &possiblyRelevantClass) const
Definition
serializationcodegenerator.cpp:71
ReflectiveRapidJSON::SerializationCodeGenerator::m_qualifiedNameOfAdaptionRecords
const char * m_qualifiedNameOfAdaptionRecords
Definition
serializationcodegenerator.h:42
ReflectiveRapidJSON::SerializationCodeGenerator::findRelevantClasses
std::vector< RelevantClass > findRelevantClasses() const
Definition
serializationcodegenerator.cpp:111
ReflectiveRapidJSON::SerializationCodeGenerator::SerializationCodeGenerator
SerializationCodeGenerator(CodeFactory &factory)
Definition
serializationcodegenerator.h:55
codegenerator.h
ReflectiveRapidJSON
Definition
codegenerator.h:15
ReflectiveRapidJSON::operator<<
std::ostream & operator<<(std::ostream &os, llvm::StringRef str)
Prints an LLVM string reference without instantiating a std::string first.
Definition
serializationcodegenerator.cpp:20
ReflectiveRapidJSON::SerializationCodeGenerator::RelevantClass
Definition
serializationcodegenerator.h:21
ReflectiveRapidJSON::SerializationCodeGenerator::RelevantClass::qualifiedName
std::string qualifiedName
Definition
serializationcodegenerator.h:24
ReflectiveRapidJSON::SerializationCodeGenerator::RelevantClass::RelevantClass
RelevantClass(std::string &&qualifiedName, clang::CXXRecordDecl *record)
Definition
serializationcodegenerator.h:49
ReflectiveRapidJSON::SerializationCodeGenerator::RelevantClass::relevantBase
std::string relevantBase
Definition
serializationcodegenerator.h:25
ReflectiveRapidJSON::SerializationCodeGenerator::RelevantClass::record
clang::CXXRecordDecl * record
Definition
serializationcodegenerator.h:26
ReflectiveRapidJSON::SerializationCodeGenerator::RelevantClass::isRelevant
IsRelevant isRelevant
Definition
serializationcodegenerator.h:27
Generated on
for Reflection for RapidJSON by
1.18.0