ImagingTools Core SDK
CSdlClassCodeGeneratorComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5//Qt includes
6#include <QtCore/QFile>
7
8// ACF includes
9#include <istd/TDelPtr.h>
10#include <iprm/ITextParam.h>
11#include <iprm/IOptionsManager.h>
12#include <iproc/TSyncProcessorCompBase.h>
13
14// ImtCore includes
15#include <imtsdl/ISdlProcessArgumentsParser.h>
16#include <imtsdl/CSdlTools.h>
17#include <imtsdlgencpp/ICxxModifier.h>
18#include <imtsdlgencpp/CSdlGenTools.h>
19#include <imtsdlgencpp/CCxxProcessorCompBase.h>
20
21
22namespace imtsdlgencpp
23{
24
30 private imtsdl::CSdlTools,
31 private CSdlGenTools
32{
33
34public:
37 typedef CSdlGenTools BaseClass3;
38
39 I_BEGIN_COMPONENT(CSdlClassCodeGeneratorComp)
40 I_ASSIGN(m_sdlTypeListCompPtr, "SdlTypeListProvider", "SDL types used to create a code", true, "SdlTypeListProvider")
41 I_ASSIGN(m_sdlEnumListCompPtr, "SdlEnumListProvider", "SDL enums used to create a code", true, "SdlEnumListProvider")
42 I_ASSIGN(m_sdlUnionListCompPtr, "SdlUnionListProvider", "SDL unioins used to create a code", true, "SdlUnionListProvider")
43 I_ASSIGN_MULTI_0(m_codeGeneratorExtenderListCompPtr, "CodeGeneratorExtenderList", "Extenders, used to generate an additional code", false)
44 I_ASSIGN(m_customSchemaParamsCompPtr, "CustomSchemaParams", "Custom schema parameters, that contains additional options", false, "CustomSchemaParams")
45 I_ASSIGN(m_originalSchemaNamespaceCompPtr, "OriginalSchemaNamespace", "The namespace of the original(root) schema", true, "OriginalSchemaNamespace");
46 I_ASSIGN_MULTI_0(m_includeDirectivesProviderListCompPtr, "IncludeDirectivesProviderList", "Providers of include directives, used to generate C(++) directives", false)
47 I_ASSIGN_MULTI_0(m_modifierListCompPtr, "ModifierList", "Modifiers for specific containers, used to generate C++ methods serialization methods ", false)
48 I_ASSIGN(m_dependentSchemaListCompPtr, "DependentSchemaList", "The list of dependent schemas, used to generate dependencies of output file", true, "DependentSchemaList");
49 I_END_COMPONENT
50
51 // reimplemented (ICxxFileProcessor)
52 virtual bool ProcessEntry(
53 const imtsdl::CSdlEntryBase& sdlEntry,
54 QIODevice* headerDevicePtr,
55 QIODevice* sourceDevicePtr = nullptr,
56 const iprm::IParamsSet* paramsPtr = nullptr) const override;
57
58 // reimplemented (IIncludeDirectivesProvider)
59 virtual QList<imtsdl::IncludeDirective> GetIncludeDirectives() const override;
60
61private:
62 enum MetdodType
63 {
64 MT_READ,
65 MT_WRITE,
66 MT_OPT_READ,
67 MT_OPT_WRITE
68 };
69
70 bool BeginClassFiles(const imtsdl::CSdlType& sdlType, QIODevice* headerPtr, QIODevice* sourcePtr, const iprm::IParamsSet* paramsPtr) const;
71 bool BeginHeaderClassFile(const imtsdl::CSdlType& sdlType, QIODevice* headerPtr, const iprm::IParamsSet* paramsPtr) const;
72 bool BeginSourceClassFile(const imtsdl::CSdlType& sdlType, QIODevice* sourcePtr, const iprm::IParamsSet* paramsPtr) const;
73 bool EndClassFiles(const imtsdl::CSdlType& sdlType, QIODevice* headerPtr, QIODevice* sourcePtr, const iprm::IParamsSet* paramsPtr) const;
74 void GenerateMetaInfo(
75 QTextStream& stream,
76 const imtsdl::CSdlType& sdlType,
77 uint indents = 1) const;
78 void GenerateVersionStruct(
79 QTextStream& stream,
80 const imtsdl::CSdlType& sdlType,
81 uint indents = 1) const;
82 void GenerateMethodDefinition(
83 QTextStream& stream,
84 const imtsdl::CSdlType& sdlType,
85 MetdodType methodType,
86 ICxxModifier& modifier,
87 bool forHeader) const;
88 QString GetVersionMemberVariableName(
89 const imtsdl::CSdlType& sdlType,
90 int versionIndex = -1) const;
91 void GenerateVersionMemberDeclaration(
92 QTextStream& stream,
93 const imtsdl::CSdlType& sdlType,
94 bool optWrap = false,
95 int versionIndex = -1) const;
96 void GenerateMethodImplementation(
97 QTextStream& stream,
98 const imtsdl::CSdlType& sdlType,
99 MetdodType methodType,
100 ICxxModifier& modifier) const;
101 void GenerateMethodCall(
102 QTextStream& stream,
103 const imtsdl::CSdlType& sdlType,
104 MetdodType methodType,
105 ICxxModifier& modifier) const;
106
107private:
108 I_REF(imtsdl::ISdlTypeListProvider, m_sdlTypeListCompPtr);
109 I_REF(imtsdl::ISdlEnumListProvider, m_sdlEnumListCompPtr);
110 I_REF(imtsdl::ISdlUnionListProvider, m_sdlUnionListCompPtr);
111 I_MULTIREF(ICxxFileProcessor, m_codeGeneratorExtenderListCompPtr);
112 I_REF(iprm::IParamsSet, m_customSchemaParamsCompPtr);
113 I_REF(iprm::ITextParam, m_originalSchemaNamespaceCompPtr);
114 I_MULTIREF(IIncludeDirectivesProvider, m_includeDirectivesProviderListCompPtr);
115 I_MULTIREF(ICxxModifier, m_modifierListCompPtr);
116 I_REF(iprm::IOptionsManager, m_dependentSchemaListCompPtr);
117};
118
119
120} // namespace imtsdlgencpp
121