1// Copyright (C) 2023 basysKom GmbH, opensource@basyskom.com
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#pragma once
5
6#include <QtCore/qlist.h>
7#include <QtCore/qtextstream.h>
8
9#include <cmath>
10#include <iostream>
11
12class EnumeratedType;
13class Field;
14class StructuredType;
15class XmlElement;
16
17class MappingFileGenerator
18{
19public:
20 enum MappingError { NoError, UnanbleToWrite, UnableToResolve };
21
22 MappingFileGenerator(const QList<XmlElement *> &generateMapping,
23 const QString &path,
24 const QString &prefix,
25 const QString &header);
26 ~MappingFileGenerator() = default;
27
28 void addGenerateMapping(const QList<XmlElement *> &generateMapping);
29
30 MappingError generateMapping();
31
32private:
33 QList<Field *> m_lengthFields;
34 QList<Field *> m_switchFields;
35 QList<XmlElement *> m_generateMapping;
36 QString m_path;
37 QString m_prefix;
38 QString m_header;
39
40 MappingError generateMappingHeader();
41 MappingError generateMappingCpp();
42
43 void generateFieldDecoding(QTextStream &output, const StructuredType *structuredType, const Field *field, int level = 1);
44 void generateScalarOrArrayDecoding(QTextStream &output, const StructuredType *structuredType, const Field *field);
45 void generateOptionalFieldDecoding(QTextStream &output, const StructuredType *structuredType, const Field *field, int level = 1);
46 void generateUnionFieldDecoding(QTextStream &output, const StructuredType *structuredType, const Field *field, int level = 1);
47
48 void generateFieldEncoding(QTextStream &output, const StructuredType *structuredType, const Field *field, int level = 1);
49 void generateScalarOrArrayEncoding(QTextStream &output, const StructuredType *structuredType, const Field *field);
50 void generateOptionalFieldEncoding(QTextStream &output, const StructuredType *structuredType, const Field *field, int level = 1);
51 void generateUnionFieldEncoding(QTextStream &output, const StructuredType *structuredType, const Field *field, int level = 1);
52
53 void generateDeEncodingArray(QTextStream &output);
54
55 void generateDeEncoding(QTextStream &output);
56
57 void generateDecodingEnumeratedType(QTextStream &output, const EnumeratedType *enumeratedType);
58 void generateEncodingEnumeratedType(QTextStream &output, const EnumeratedType *enumeratedType);
59
60 void generateDecodingStructuredType(QTextStream &output, const StructuredType *structuredType);
61 void generateEncodingStructuredType(QTextStream &output, const StructuredType *structuredType);
62
63 MappingFileGenerator::MappingError sortMappings();
64};
65

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qtopcua/tools/datatypecodegenerator/mappingfilegenerator.h