Skip to content

Commit 961dc76

Browse files
authored
feat: add support for nullable types and ArrayBuffers for pointers (#357)
1 parent 17ed63a commit 961dc76

File tree

10 files changed

+2487
-2321
lines changed

10 files changed

+2487
-2321
lines changed

metadata-generator/src/Binary/binaryTypeEncodingSerializer.cpp

Lines changed: 253 additions & 198 deletions
Large diffs are not rendered by default.
Lines changed: 73 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,122 @@
11
#pragma once
22

3+
#include <vector>
4+
35
#include "Meta/TypeEntities.h"
46
#include "binaryStructures.h"
57
#include "binaryWriter.h"
6-
#include <vector>
78

89
using namespace std;
910

1011
namespace binary {
1112
/*
12-
* \class BinaryTypeEncodingSerializer
13-
* \brief Applies the Visitor pattern for serializing \c typeEncoding::TypeEncoding objects in binary format.
14-
*/
15-
class BinaryTypeEncodingSerializer : public ::Meta::TypeVisitor<unique_ptr<binary::TypeEncoding> > {
16-
private:
17-
BinaryWriter _heapWriter;
13+
* \class BinaryTypeEncodingSerializer
14+
* \brief Applies the Visitor pattern for serializing \c
15+
* typeEncoding::TypeEncoding objects in binary format.
16+
*/
17+
class BinaryTypeEncodingSerializer
18+
: public ::Meta::TypeVisitor<unique_ptr<binary::TypeEncoding> > {
19+
private:
20+
BinaryWriter _heapWriter;
21+
22+
unique_ptr<TypeEncoding> serializeRecordEncoding(
23+
const binary::BinaryTypeEncodingType encodingType,
24+
const std::vector< ::Meta::RecordField>& fields);
25+
26+
public:
27+
BinaryTypeEncodingSerializer(BinaryWriter& heapWriter)
28+
: _heapWriter(heapWriter) {}
1829

19-
unique_ptr<TypeEncoding> serializeRecordEncoding(const binary::BinaryTypeEncodingType encodingType, const std::vector< ::Meta::RecordField>& fields);
30+
MetaFileOffset visit(std::vector< ::Meta::Type*>& types);
2031

21-
public:
22-
BinaryTypeEncodingSerializer(BinaryWriter& heapWriter)
23-
: _heapWriter(heapWriter)
24-
{
25-
}
32+
virtual unique_ptr<TypeEncoding> visitVoid() override;
2633

27-
MetaFileOffset visit(std::vector< ::Meta::Type*>& types);
34+
virtual unique_ptr<TypeEncoding> visitBool() override;
2835

29-
virtual unique_ptr<TypeEncoding> visitVoid() override;
36+
virtual unique_ptr<TypeEncoding> visitShort() override;
3037

31-
virtual unique_ptr<TypeEncoding> visitBool() override;
38+
virtual unique_ptr<TypeEncoding> visitUShort() override;
3239

33-
virtual unique_ptr<TypeEncoding> visitShort() override;
40+
virtual unique_ptr<TypeEncoding> visitInt() override;
3441

35-
virtual unique_ptr<TypeEncoding> visitUShort() override;
42+
virtual unique_ptr<TypeEncoding> visitUInt() override;
3643

37-
virtual unique_ptr<TypeEncoding> visitInt() override;
44+
virtual unique_ptr<TypeEncoding> visitLong() override;
3845

39-
virtual unique_ptr<TypeEncoding> visitUInt() override;
46+
virtual unique_ptr<TypeEncoding> visitUlong() override;
4047

41-
virtual unique_ptr<TypeEncoding> visitLong() override;
48+
virtual unique_ptr<TypeEncoding> visitLongLong() override;
4249

43-
virtual unique_ptr<TypeEncoding> visitUlong() override;
50+
virtual unique_ptr<TypeEncoding> visitULongLong() override;
4451

45-
virtual unique_ptr<TypeEncoding> visitLongLong() override;
52+
virtual unique_ptr<TypeEncoding> visitSignedChar() override;
4653

47-
virtual unique_ptr<TypeEncoding> visitULongLong() override;
54+
virtual unique_ptr<TypeEncoding> visitUnsignedChar() override;
4855

49-
virtual unique_ptr<TypeEncoding> visitSignedChar() override;
56+
virtual unique_ptr<TypeEncoding> visitUnichar() override;
5057

51-
virtual unique_ptr<TypeEncoding> visitUnsignedChar() override;
58+
virtual unique_ptr<TypeEncoding> visitCString() override;
5259

53-
virtual unique_ptr<TypeEncoding> visitUnichar() override;
60+
virtual unique_ptr<TypeEncoding> visitFloat() override;
5461

55-
virtual unique_ptr<TypeEncoding> visitCString() override;
62+
virtual unique_ptr<TypeEncoding> visitDouble() override;
5663

57-
virtual unique_ptr<TypeEncoding> visitFloat() override;
64+
virtual unique_ptr<TypeEncoding> visitVaList() override;
5865

59-
virtual unique_ptr<TypeEncoding> visitDouble() override;
66+
virtual unique_ptr<TypeEncoding> visitSelector() override;
6067

61-
virtual unique_ptr<TypeEncoding> visitVaList() override;
68+
virtual unique_ptr<TypeEncoding> visitInstancetype() override;
6269

63-
virtual unique_ptr<TypeEncoding> visitSelector() override;
70+
virtual unique_ptr<TypeEncoding> visitProtocol() override;
6471

65-
virtual unique_ptr<TypeEncoding> visitInstancetype() override;
72+
virtual unique_ptr<TypeEncoding> visitClass(
73+
const ::Meta::ClassType& type) override;
6674

67-
virtual unique_ptr<TypeEncoding> visitProtocol() override;
75+
virtual unique_ptr<TypeEncoding> visitId(const ::Meta::IdType& type) override;
6876

69-
virtual unique_ptr<TypeEncoding> visitClass(const ::Meta::ClassType& type) override;
77+
virtual unique_ptr<TypeEncoding> visitConstantArray(
78+
const ::Meta::ConstantArrayType& type) override;
7079

71-
virtual unique_ptr<TypeEncoding> visitId(const ::Meta::IdType& type) override;
80+
virtual unique_ptr<TypeEncoding> visitExtVector(
81+
const ::Meta::ExtVectorType& type) override;
7282

73-
virtual unique_ptr<TypeEncoding> visitConstantArray(const ::Meta::ConstantArrayType& type) override;
74-
75-
virtual unique_ptr<TypeEncoding> visitExtVector(const ::Meta::ExtVectorType& type) override;
83+
virtual unique_ptr<TypeEncoding> visitIncompleteArray(
84+
const ::Meta::IncompleteArrayType& type) override;
7685

77-
virtual unique_ptr<TypeEncoding> visitIncompleteArray(const ::Meta::IncompleteArrayType& type) override;
86+
virtual unique_ptr<TypeEncoding> visitInterface(
87+
const ::Meta::InterfaceType& type) override;
7888

79-
virtual unique_ptr<TypeEncoding> visitInterface(const ::Meta::InterfaceType& type) override;
89+
virtual unique_ptr<TypeEncoding> visitBridgedInterface(
90+
const ::Meta::BridgedInterfaceType& type) override;
8091

81-
virtual unique_ptr<TypeEncoding> visitBridgedInterface(const ::Meta::BridgedInterfaceType& type) override;
92+
virtual unique_ptr<TypeEncoding> visitPointer(
93+
const ::Meta::PointerType& type) override;
8294

83-
virtual unique_ptr<TypeEncoding> visitPointer(const ::Meta::PointerType& type) override;
95+
virtual unique_ptr<TypeEncoding> visitBlock(
96+
const ::Meta::BlockType& type) override;
8497

85-
virtual unique_ptr<TypeEncoding> visitBlock(const ::Meta::BlockType& type) override;
98+
virtual unique_ptr<TypeEncoding> visitFunctionPointer(
99+
const ::Meta::FunctionPointerType& type) override;
86100

87-
virtual unique_ptr<TypeEncoding> visitFunctionPointer(const ::Meta::FunctionPointerType& type) override;
101+
virtual unique_ptr<TypeEncoding> visitStruct(
102+
const ::Meta::StructType& type) override;
88103

89-
virtual unique_ptr<TypeEncoding> visitStruct(const ::Meta::StructType& type) override;
104+
virtual unique_ptr<TypeEncoding> visitUnion(
105+
const ::Meta::UnionType& type) override;
90106

91-
virtual unique_ptr<TypeEncoding> visitUnion(const ::Meta::UnionType& type) override;
107+
virtual unique_ptr<TypeEncoding> visitAnonymousStruct(
108+
const ::Meta::AnonymousStructType& type) override;
92109

93-
virtual unique_ptr<TypeEncoding> visitAnonymousStruct(const ::Meta::AnonymousStructType& type) override;
110+
virtual unique_ptr<TypeEncoding> visitAnonymousUnion(
111+
const ::Meta::AnonymousUnionType& type) override;
94112

95-
virtual unique_ptr<TypeEncoding> visitAnonymousUnion(const ::Meta::AnonymousUnionType& type) override;
113+
virtual unique_ptr<TypeEncoding> visitEnum(
114+
const ::Meta::EnumType& type) override;
96115

97-
virtual unique_ptr<TypeEncoding> visitEnum(const ::Meta::EnumType& type) override;
116+
virtual unique_ptr<TypeEncoding> visitTypeArgument(
117+
const ::Meta::TypeArgumentType& type) override;
98118

99-
virtual unique_ptr<TypeEncoding> visitTypeArgument(const ::Meta::TypeArgumentType& type) override;
119+
virtual unique_ptr<TypeEncoding> visitNullable(
120+
const ::Meta::NullableType& type) override;
100121
};
101-
}
122+
} // namespace binary

0 commit comments

Comments
 (0)