ImagingTools Core SDK
CCxxProcessorsManagerComp.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// ACF includes
6#include <ilog/TLoggerCompWrap.h>
7#include <iproc/TSyncProcessorWrap.h>
8
9// ImtCore includes
10#include <imtsdl/ISdlProcessArgumentsParser.h>
11#include <imtsdl/ISdlTypeListProvider.h>
12#include <imtsdl/ISdlRequestListProvider.h>
13#include <imtsdl/ISdlDocumentTypeListProvider.h>
14#include <imtsdl/CSdlTools.h>
15#include <imtsdlgencpp/ICxxFileProcessor.h>
16#include <imtsdlgencpp/IIncludeDirectivesProvider.h>
17#include <imtsdlgencpp/CSdlGenTools.h>
18
19
20class QFile;
21
22namespace iprm
23{
24class CParamsSet;
25}
26
27
28namespace imtsdlgencpp
29{
30
31class CxxProcessorsManagerAttr1Comp: public ilog::CLoggerComponentBase
32{
33
34public:
35 typedef ilog::CLoggerComponentBase BaseClass;
36
37 I_BEGIN_BASE_COMPONENT(CxxProcessorsManagerAttr1Comp)
38 I_ASSIGN_MULTI_0(m_enumProcessorCompListPtr, "EnumProcessorsList", "The list of C++ processors generation for enums", false)
39 I_ASSIGN_MULTI_0(m_unionProcessorCompListPtr, "UnionProcessorsList", "The list of C++ processors generation for unions", false)
40 I_ASSIGN_MULTI_0(m_typeProcessorCompListPtr, "TypeProcessorsList", "The list of C++ processors generation for types", false)
41 I_ASSIGN_MULTI_0(m_documentTypeProcessorCompListPtr, "DocumentTypeProcessorsList", "The list of C++ processors generation for document types", false)
42 I_ASSIGN_MULTI_0(m_requestProcessorCompListPtr, "RequestProcessorsList", "The list of C++ processors generation for requests", false)
43 I_ASSIGN_MULTI_0(m_autoProcessorCompListPtr, "AutoProcessorsList", "The list of special C++ processors generation.", false)
44 I_ASSIGN_MULTI_0(m_includeDirectivesProviderListCompPtr, "IncludeDirectivesProviderList", "Providers of include directives, used to generate C(++) directives", false)
45
46 I_END_COMPONENT
47
48protected:
49 I_MULTIREF(ICxxFileProcessor, m_enumProcessorCompListPtr);
50 I_MULTIREF(ICxxFileProcessor, m_unionProcessorCompListPtr);
51 I_MULTIREF(ICxxFileProcessor, m_typeProcessorCompListPtr);
52 I_MULTIREF(ICxxFileProcessor, m_documentTypeProcessorCompListPtr);
53 I_MULTIREF(ICxxFileProcessor, m_requestProcessorCompListPtr);
54 I_MULTIREF(ICxxFileProcessor, m_autoProcessorCompListPtr);
55 I_MULTIREF(IIncludeDirectivesProvider, m_includeDirectivesProviderListCompPtr);
56};
57
58class CCxxProcessorsManagerComp: public CxxProcessorsManagerAttr1Comp,
59 public iproc::CSyncProcessorBase,
60 private imtsdl::CSdlTools,
61 private CSdlGenTools
62{
63
64
65public:
66 typedef std::shared_ptr<QFile> FilePtr;
67 typedef QMap<QString/*EntryName*/, FilePtr> EntryFileMap;
68
69 typedef CxxProcessorsManagerAttr1Comp BaseClass;
70
71 I_BEGIN_COMPONENT(CCxxProcessorsManagerComp)
72 I_REGISTER_INTERFACE(iproc::IProcessor)
73 I_ASSIGN(m_argumentParserCompPtr, "ArgumentParser", "Argument parser generation", true, "ArgumentParser")
74 I_ASSIGN(m_schemaParamsCompPtr, "CurrentSchemaParams", "Params of the processing (root) shcema", true, "CurrentSchemaParams")
75 I_ASSIGN(m_sdlEnumListCompPtr, "SdlEnumListProvider", "SDL enums used to create a code", false, "SdlEnumListProvider")
76 I_ASSIGN(m_sdlUnionListCompPtr, "SdlUnionListProvider", "SDL unioins used to create a code", false, "SdlUnionListProvider")
77 I_ASSIGN(m_sdlTypeListCompPtr, "SdlTypeListProvider", "SDL types used to create a code", false, "SdlTypeListProvider")
78 I_ASSIGN(m_sdlDocumentTypeListCompPtr, "SdlDocumentTypeListProvider", "SDL document types used to create a code", false, "SdlDocumentTypeListProvider")
79 I_ASSIGN(m_requestsProviderListCompPtr, "SdlRequestListProvider", "SDL requests used to create a code", false, "SdlRequestListProvider")
80 I_ASSIGN(m_baseClassExtenderCompPtr, "BaseClassExtender", "The C++ class extender, that adds inheritance to class files", false, "BaseClassExtender")
81 I_ASSIGN(m_dependentSchemaListCompPtr, "DependentSchemaList", "The list of dependent schemas, used to generate dependencies of output file", true, "DependentSchemaList");
82 I_END_COMPONENT
83
84
85 // reimplemented (iproc::IProcessor)
86 virtual TaskState DoProcessing(
87 const iprm::IParamsSet* paramsPtr,
88 const istd::IPolymorphic* inputPtr,
89 istd::IChangeable* outputPtr,
90 ibase::IProgressManager* progressManagerPtr = nullptr) override;
91
92private:
93 [[nodiscard]] bool BeginHeaderFile(const iprm::IParamsSet& entryParams, QFile& headerFile, const iprm::IParamsSet* paramsPtr) const;
94 [[nodiscard]] bool BeginSourceFile(const iprm::IParamsSet& entryParams, QFile& headerFile, const iprm::IParamsSet* paramsPtr) const;
95 [[nodiscard]] bool EndHeaderFile(const iprm::IParamsSet& entryParams, QFile& headerFile, const iprm::IParamsSet* paramsPtr) const;
96 [[nodiscard]] bool EndSourceFile(const iprm::IParamsSet& entryParams, QFile& sourceFile, const iprm::IParamsSet* paramsPtr) const;
97 bool ProcessEnums (
98 const EntryFileMap& headerFiles,
99 const EntryFileMap& sourceFiles,
100 const iprm::IParamsSet* paramsPtr) const;
101 bool ProcessTypes (
102 const EntryFileMap& headerFiles,
103 const EntryFileMap& sourceFiles,
104 const iprm::IParamsSet* paramsPtr) const;
105 bool ProcessUnions(
106 const EntryFileMap& headerFiles,
107 const EntryFileMap& sourceFiles,
108 const iprm::IParamsSet* paramsPtr) const;
109 bool ProcessDocumentTypes(
110 const EntryFileMap& headerFiles,
111 const EntryFileMap& sourceFiles,
112 const iprm::IParamsSet* paramsPtr) const;
113 bool ProcessRequests(
114 const EntryFileMap& headerFiles,
115 const EntryFileMap& sourceFiles,
116 const iprm::IParamsSet* paramsPtr) const;
117
123 [[nodiscard]] EntryFileMap CreateHeaderFiles(const iprm::IParamsSet* paramsPtr) const;
124 [[nodiscard]] EntryFileMap CreateSourceFiles(const iprm::IParamsSet* paramsPtr) const;
129 [[nodiscard]] FilePtr CreateFile(const QString& filePath) const;
130
131
132private:
133 I_REF(imtsdl::ISdlProcessArgumentsParser, m_argumentParserCompPtr);
134 I_REF(imtsdl::ISdlEnumListProvider, m_sdlEnumListCompPtr);
135 I_REF(imtsdl::ISdlUnionListProvider, m_sdlUnionListCompPtr);
136 I_REF(imtsdl::ISdlTypeListProvider, m_sdlTypeListCompPtr);
137 I_REF(imtsdl::ISdlDocumentTypeListProvider, m_sdlDocumentTypeListCompPtr);
138 I_REF(imtsdl::ISdlRequestListProvider, m_requestsProviderListCompPtr);
139 I_REF(iproc::IProcessor, m_baseClassExtenderCompPtr);
140 I_REF(iprm::IParamsSet, m_schemaParamsCompPtr);
141 I_REF(iprm::IOptionsManager, m_dependentSchemaListCompPtr);
142};
143
144
145
146} // namespace imtsdlgencpp
147
148
149
150
151
152
153