forked from chronoxor/FastBinaryEncoding
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerator_csharp.h
More file actions
118 lines (102 loc) · 5.86 KB
/
generator_csharp.h
File metadata and controls
118 lines (102 loc) · 5.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*!
\file generator_csharp.h
\brief Fast binary encoding C# generator definition
\author Ivan Shynkarenka
\date 20.04.2018
\copyright MIT License
*/
#ifndef GENERATOR_CSHARP_H
#define GENERATOR_CSHARP_H
#include "generator.h"
namespace FBE {
class GeneratorCSharp : public Generator
{
public:
using Generator::Generator;
// Final protocol code generation
bool Final() const noexcept { return _final; }
GeneratorCSharp& Final(bool final) noexcept { _final = final; return *this; }
// JSON protocol code generation
bool JSON() const noexcept { return _json; }
GeneratorCSharp& JSON(bool json) noexcept { _json = json; return *this; }
// Sender/Receiver protocol code generation
bool Proto() const noexcept { return _proto; }
GeneratorCSharp& Proto(bool proto) noexcept { _proto = proto; return *this; }
void Generate(const std::shared_ptr<Package>& package) override;
private:
bool _final{false};
bool _json{false};
bool _proto{false};
void GenerateHeader(const std::string& source);
void GenerateFooter();
void GenerateImports();
void GenerateImports(const std::shared_ptr<Package>& p);
void GenerateFBEUuidGenerator();
void GenerateFBEBuffer();
void GenerateFBEBaseModel();
void GenerateFBEFieldModelBase();
void GenerateFBEFieldModel(const std::string& name, const std::string& type, const std::string& base, const std::string& size, const std::string& defaults);
void GenerateFBEFieldModelTimestamp();
void GenerateFBEFieldModelBytes();
void GenerateFBEFieldModelString();
void GenerateFBEFieldModelOptional(bool valueType);
void GenerateFBEFieldModelArray(bool valueType, bool optional);
void GenerateFBEFieldModelVector(bool valueType, bool optional);
void GenerateFBEFieldModelMap(bool valueTypeKey, bool valueTypeValue, bool optional);
void GenerateFBEFinalModelBase();
void GenerateFBEFinalModel(const std::string& name, const std::string& type, const std::string& base, const std::string& size, const std::string& defaults);
void GenerateFBEFinalModelTimestamp();
void GenerateFBEFinalModelBytes();
void GenerateFBEFinalModelString();
void GenerateFBEFinalModelOptional(bool valueType);
void GenerateFBEFinalModelArray(bool valueType, bool optional);
void GenerateFBEFinalModelVector(bool valueType, bool optional);
void GenerateFBEFinalModelMap(bool valueTypeKey, bool valueTypeValue, bool optional);
void GenerateFBESender();
void GenerateFBEReceiver();
void GenerateFBEClient();
void GenerateFBEJson();
void GenerateFBE(const CppCommon::Path& path);
void GeneratePackage(const std::shared_ptr<Package>& p);
void GenerateEnum(const std::shared_ptr<Package>& p, const std::shared_ptr<EnumType>& e);
void GenerateEnumFieldModel(const std::shared_ptr<Package>& p, const std::shared_ptr<EnumType>& e);
void GenerateEnumFinalModel(const std::shared_ptr<Package>& p, const std::shared_ptr<EnumType>& e);
void GenerateFlags(const std::shared_ptr<Package>& p, const std::shared_ptr<FlagsType>& f);
void GenerateFlagsFieldModel(const std::shared_ptr<Package>& p, const std::shared_ptr<FlagsType>& f);
void GenerateFlagsFinalModel(const std::shared_ptr<Package>& p, const std::shared_ptr<FlagsType>& f);
void GenerateStruct(const std::shared_ptr<Package>& p, const std::shared_ptr<StructType>& s);
void GenerateStructFieldModel(const std::shared_ptr<Package>& p, const std::shared_ptr<StructType>& s);
void GenerateStructModel(const std::shared_ptr<Package>& p, const std::shared_ptr<StructType>& s);
void GenerateStructFinalModel(const std::shared_ptr<Package>& p, const std::shared_ptr<StructType>& s);
void GenerateStructModelFinal(const std::shared_ptr<Package>& p, const std::shared_ptr<StructType>& s);
void GenerateProtocolVersion(const std::shared_ptr<Package>& p);
void GenerateSender(const std::shared_ptr<Package>& p, bool final);
void GenerateReceiver(const std::shared_ptr<Package>& p, bool final);
void GenerateProxy(const std::shared_ptr<Package>& p, bool final);
void GenerateClient(const std::shared_ptr<Package>& p, bool final);
bool IsKnownType(const std::string& type);
bool IsReferenceType(const std::string& type);
std::string ConvertEnumRead(const std::string& type);
std::string ConvertEnumSize(const std::string& type);
std::string ConvertEnumType(const std::string& type);
std::string ConvertEnumTypeUtf8Json(const std::string& type);
std::string ConvertEnumConstant(const std::string& type, const std::string& value);
std::string ConvertEnumConstantPrefix(const std::string& type);
std::string ConvertEnumConstantSuffix(const std::string& type);
std::string ConvertBaseTypeName(const std::string& type);
std::string ConvertTypeName(const std::string& type, bool optional);
std::string ConvertTypeName(const std::string& package, const std::string& type, bool optional);
std::string ConvertTypeName(const StructField& field);
std::string ConvertTypeFieldName(const std::string& type, bool final);
std::string ConvertTypeFieldDeclaration(const StructField& field, bool final);
std::string ConvertTypeFieldInitialization(const StructField& field, const std::string& offset, bool final);
std::string ConvertConstant(const std::string& type, const std::string& value, bool optional);
std::string ConvertConstantPrefix(const std::string& type);
std::string ConvertConstantSuffix(const std::string& type);
std::string ConvertDefault(const std::string& type);
std::string ConvertDefault(const std::string& package, const StructField& field);
std::string ConvertOutputStreamType(const std::string& type, const std::string& name, bool optional);
std::string ConvertOutputStreamValue(const std::string& type, const std::string& name, bool optional, bool separate);
};
} // namespace FBE
#endif // GENERATOR_CSHARP_H