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 | |
12 | class EnumeratedType; |
13 | class Field; |
14 | class StructuredType; |
15 | class XmlElement; |
16 | |
17 | class MappingFileGenerator |
18 | { |
19 | public: |
20 | enum MappingError { NoError, UnanbleToWrite, UnableToResolve }; |
21 | |
22 | MappingFileGenerator(const QList<XmlElement *> &generateMapping, |
23 | const QString &path, |
24 | const QString &prefix, |
25 | const QString &); |
26 | ~MappingFileGenerator() = default; |
27 | |
28 | void addGenerateMapping(const QList<XmlElement *> &generateMapping); |
29 | |
30 | MappingError generateMapping(); |
31 | |
32 | private: |
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 ; |
39 | |
40 | MappingError (); |
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 | |