Revision control

Copy as Markdown

// Copyright (C) 2023 basysKom GmbH, opensource@basyskom.com
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#pragma once
#include "visitor.h"
#include <QtCore/qlist.h>
#include <QtCore/qtextstream.h>
class DataTypeFileWriter : public Visitor
{
public:
enum GeneratingError { NoError, UnableToWrite };
DataTypeFileWriter(const QString &path,
const QString &prefix,
const QString &header);
~DataTypeFileWriter() override = default;
void visit(EnumeratedType *enumeratedType) override;
void visit(EnumeratedValue *enumeratedValue) override;
void visit(Field *field) override;
void visit(Import *import) override;
void visit(StructuredType *structuredType) override;
void visit(TypeDictionary *typeDictionary) override;
void visit(XmlElement *xmlElement) override;
GeneratingError generateFile(const XmlElement *type, const QString &fileExtension);
GeneratingError generateTypes(const QList<XmlElement *> &types);
QList<XmlElement *> generateMapping() const;
void setGenerateMapping(const QList<XmlElement *> &generateMapping);
bool writeBundleFiles();
private:
QString m_path;
QString m_prefix;
QString m_header;
QList<QString> m_generatedEnumeratedTypeFilenames;
QList<QString> m_generatedStructuredTypeFilenames;
QList<XmlElement *> m_generateMapping;
QList<EnumeratedType *> m_enumeratedTypes;
QStringList m_generatedSourceFileNames;
QStringList m_generatedHeaderFileNames;
void writeLicenseHeader(QTextStream &output);
void writeStructuredTypeCpp(const StructuredType *structuredType, QTextStream &output);
void writeStructuredTypeCppClassComment(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeCppDataClass(const StructuredType *structuredType, QTextStream &output);
void writeStructuredTypeCppDataClassMember(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeCppConstructors(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeCppOperatorAssignment(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeCppOperatorEquality(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeCppQVariant(const StructuredType *structuredType, QTextStream &output);
void writeStructuredTypeCppDestructor(const StructuredType *structuredType, QTextStream &output);
void writeStructuredTypeCppGetterSetter(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeCppGetter(const StructuredType *structuredType, QTextStream &output);
void writeStructuredTypeCppSetter(const Field *field,
const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeHeader(const StructuredType *structuredType, QTextStream &output);
void writeStructuredTypeHeaderIncludes(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeHeaderUnion(const StructuredType *structuredType, QTextStream &output);
void writeStructuredTypeHeaderGetterSetter(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeHeaderDebug(const StructuredType *structuredType,
QTextStream &output);
void writeStructuredTypeCppDebug(const StructuredType *structuredType,
QTextStream &output);
void writeEnumeratedType(const EnumeratedType *enumeratedType, QTextStream &output);
GeneratingError writeEnumeratedTypes();
};