Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
451 changes: 253 additions & 198 deletions metadata-generator/src/Binary/binaryTypeEncodingSerializer.cpp

Large diffs are not rendered by default.

125 changes: 73 additions & 52 deletions metadata-generator/src/Binary/binaryTypeEncodingSerializer.h
Original file line number Diff line number Diff line change
@@ -1,101 +1,122 @@
#pragma once

#include <vector>

#include "Meta/TypeEntities.h"
#include "binaryStructures.h"
#include "binaryWriter.h"
#include <vector>

using namespace std;

namespace binary {
/*
* \class BinaryTypeEncodingSerializer
* \brief Applies the Visitor pattern for serializing \c typeEncoding::TypeEncoding objects in binary format.
*/
class BinaryTypeEncodingSerializer : public ::Meta::TypeVisitor<unique_ptr<binary::TypeEncoding> > {
private:
BinaryWriter _heapWriter;
* \class BinaryTypeEncodingSerializer
* \brief Applies the Visitor pattern for serializing \c
* typeEncoding::TypeEncoding objects in binary format.
*/
class BinaryTypeEncodingSerializer
: public ::Meta::TypeVisitor<unique_ptr<binary::TypeEncoding> > {
private:
BinaryWriter _heapWriter;

unique_ptr<TypeEncoding> serializeRecordEncoding(
const binary::BinaryTypeEncodingType encodingType,
const std::vector< ::Meta::RecordField>& fields);

public:
BinaryTypeEncodingSerializer(BinaryWriter& heapWriter)
: _heapWriter(heapWriter) {}

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

public:
BinaryTypeEncodingSerializer(BinaryWriter& heapWriter)
: _heapWriter(heapWriter)
{
}
virtual unique_ptr<TypeEncoding> visitVoid() override;

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

virtual unique_ptr<TypeEncoding> visitVoid() override;
virtual unique_ptr<TypeEncoding> visitShort() override;

virtual unique_ptr<TypeEncoding> visitBool() override;
virtual unique_ptr<TypeEncoding> visitUShort() override;

virtual unique_ptr<TypeEncoding> visitShort() override;
virtual unique_ptr<TypeEncoding> visitInt() override;

virtual unique_ptr<TypeEncoding> visitUShort() override;
virtual unique_ptr<TypeEncoding> visitUInt() override;

virtual unique_ptr<TypeEncoding> visitInt() override;
virtual unique_ptr<TypeEncoding> visitLong() override;

virtual unique_ptr<TypeEncoding> visitUInt() override;
virtual unique_ptr<TypeEncoding> visitUlong() override;

virtual unique_ptr<TypeEncoding> visitLong() override;
virtual unique_ptr<TypeEncoding> visitLongLong() override;

virtual unique_ptr<TypeEncoding> visitUlong() override;
virtual unique_ptr<TypeEncoding> visitULongLong() override;

virtual unique_ptr<TypeEncoding> visitLongLong() override;
virtual unique_ptr<TypeEncoding> visitSignedChar() override;

virtual unique_ptr<TypeEncoding> visitULongLong() override;
virtual unique_ptr<TypeEncoding> visitUnsignedChar() override;

virtual unique_ptr<TypeEncoding> visitSignedChar() override;
virtual unique_ptr<TypeEncoding> visitUnichar() override;

virtual unique_ptr<TypeEncoding> visitUnsignedChar() override;
virtual unique_ptr<TypeEncoding> visitCString() override;

virtual unique_ptr<TypeEncoding> visitUnichar() override;
virtual unique_ptr<TypeEncoding> visitFloat() override;

virtual unique_ptr<TypeEncoding> visitCString() override;
virtual unique_ptr<TypeEncoding> visitDouble() override;

virtual unique_ptr<TypeEncoding> visitFloat() override;
virtual unique_ptr<TypeEncoding> visitVaList() override;

virtual unique_ptr<TypeEncoding> visitDouble() override;
virtual unique_ptr<TypeEncoding> visitSelector() override;

virtual unique_ptr<TypeEncoding> visitVaList() override;
virtual unique_ptr<TypeEncoding> visitInstancetype() override;

virtual unique_ptr<TypeEncoding> visitSelector() override;
virtual unique_ptr<TypeEncoding> visitProtocol() override;

virtual unique_ptr<TypeEncoding> visitInstancetype() override;
virtual unique_ptr<TypeEncoding> visitClass(
const ::Meta::ClassType& type) override;

virtual unique_ptr<TypeEncoding> visitProtocol() override;
virtual unique_ptr<TypeEncoding> visitId(const ::Meta::IdType& type) override;

virtual unique_ptr<TypeEncoding> visitClass(const ::Meta::ClassType& type) override;
virtual unique_ptr<TypeEncoding> visitConstantArray(
const ::Meta::ConstantArrayType& type) override;

virtual unique_ptr<TypeEncoding> visitId(const ::Meta::IdType& type) override;
virtual unique_ptr<TypeEncoding> visitExtVector(
const ::Meta::ExtVectorType& type) override;

virtual unique_ptr<TypeEncoding> visitConstantArray(const ::Meta::ConstantArrayType& type) override;

virtual unique_ptr<TypeEncoding> visitExtVector(const ::Meta::ExtVectorType& type) override;
virtual unique_ptr<TypeEncoding> visitIncompleteArray(
const ::Meta::IncompleteArrayType& type) override;

virtual unique_ptr<TypeEncoding> visitIncompleteArray(const ::Meta::IncompleteArrayType& type) override;
virtual unique_ptr<TypeEncoding> visitInterface(
const ::Meta::InterfaceType& type) override;

virtual unique_ptr<TypeEncoding> visitInterface(const ::Meta::InterfaceType& type) override;
virtual unique_ptr<TypeEncoding> visitBridgedInterface(
const ::Meta::BridgedInterfaceType& type) override;

virtual unique_ptr<TypeEncoding> visitBridgedInterface(const ::Meta::BridgedInterfaceType& type) override;
virtual unique_ptr<TypeEncoding> visitPointer(
const ::Meta::PointerType& type) override;

virtual unique_ptr<TypeEncoding> visitPointer(const ::Meta::PointerType& type) override;
virtual unique_ptr<TypeEncoding> visitBlock(
const ::Meta::BlockType& type) override;

virtual unique_ptr<TypeEncoding> visitBlock(const ::Meta::BlockType& type) override;
virtual unique_ptr<TypeEncoding> visitFunctionPointer(
const ::Meta::FunctionPointerType& type) override;

virtual unique_ptr<TypeEncoding> visitFunctionPointer(const ::Meta::FunctionPointerType& type) override;
virtual unique_ptr<TypeEncoding> visitStruct(
const ::Meta::StructType& type) override;

virtual unique_ptr<TypeEncoding> visitStruct(const ::Meta::StructType& type) override;
virtual unique_ptr<TypeEncoding> visitUnion(
const ::Meta::UnionType& type) override;

virtual unique_ptr<TypeEncoding> visitUnion(const ::Meta::UnionType& type) override;
virtual unique_ptr<TypeEncoding> visitAnonymousStruct(
const ::Meta::AnonymousStructType& type) override;

virtual unique_ptr<TypeEncoding> visitAnonymousStruct(const ::Meta::AnonymousStructType& type) override;
virtual unique_ptr<TypeEncoding> visitAnonymousUnion(
const ::Meta::AnonymousUnionType& type) override;

virtual unique_ptr<TypeEncoding> visitAnonymousUnion(const ::Meta::AnonymousUnionType& type) override;
virtual unique_ptr<TypeEncoding> visitEnum(
const ::Meta::EnumType& type) override;

virtual unique_ptr<TypeEncoding> visitEnum(const ::Meta::EnumType& type) override;
virtual unique_ptr<TypeEncoding> visitTypeArgument(
const ::Meta::TypeArgumentType& type) override;

virtual unique_ptr<TypeEncoding> visitTypeArgument(const ::Meta::TypeArgumentType& type) override;
virtual unique_ptr<TypeEncoding> visitNullable(
const ::Meta::NullableType& type) override;
};
}
} // namespace binary
Loading
Loading