ImagingTools Core SDK
CObjectModificatorCompBase.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// ImtCore includes
6#include <imtsdl/CSdlEnumConverter.h>
7#include <imtsdlgencpp/CSdlClassModificatorBaseComp.h>
8#include <imtsdlgencpp/CSdlGenTools.h>
9#include <imtsdlgencpp/CSdlUnionConverter.h>
10
11
12namespace imtsdlgencpp
13{
14
15
22 protected CSdlGenTools,
23 protected imtsdl::CSdlTools,
24 protected imtsdl::CSdlEnumConverter,
25 protected CSdlUnionConverter
26{
27 using CSdlGenTools::AddArrayInternalChecksFail;
28
29public:
31
32 I_BEGIN_BASE_COMPONENT(CObjectModificatorCompBase)
33 I_END_COMPONENT;
34
35protected:
36 enum MetdodType
37 {
38 MT_READ,
39 MT_WRITE,
40 MT_OPT_READ,
41 MT_OPT_WRITE
42 };
43
56 struct ListAccessResult
57 {
58 QString listVariableName;
59 QString listCountVariableName;
60 QString listCountVariableType;
61 QString customListAccessCode;
62 QString customAccessedElementName;
63 bool isCustomAccessedElementPointer = false;
64 QString toObjectTransformMethod;
65 };
66
67protected:
68 // abstract methods
76 virtual QString GetContainerObjectClassName() const = 0;
77
84 virtual QString GetContainerObjectVariableName() const = 0;
85
92 virtual QString GetScalarArrayContainerObjectClassName() const = 0;
93
100 virtual QString GetCustomArrayContainerObjectClassName() const = 0;
101
107 virtual QString GetArrayContainerObjectVariableName() const = 0;
108
122 virtual bool AddFieldValueWriteToObject(QTextStream& stream, const imtsdl::CSdlField& field, const QString& variableName, uint horizontalIndents) const = 0;
123
136 virtual bool AddObjectValueWriteToObject(QTextStream& stream, const imtsdl::CSdlField& field, const QString& variableName, uint horizontalIndents) const = 0;
137
147
149
155 virtual QString AddCreationOfTemporaryArray(QTextStream& stream, const imtsdl::CSdlField& field) const = 0;
156
171 virtual bool AddFieldValueAppendToObjectArray(QTextStream& stream, const imtsdl::CSdlField& field, const QString& arrayContainerVariableName, const QString& variableName, uint horizontalIndents) const = 0;
172
183 virtual bool AddArrayWriteToObject(QTextStream& stream, const imtsdl::CSdlField& field, const QString& variableName, const QString& targetObjectVariableName, uint horizontalIndents) const = 0;
184
198 virtual bool AddContainerValueCheckConditionBegin(QTextStream& stream, const imtsdl::CSdlField& field, bool expected, quint16 horizontalIndents) const = 0;
199
208 virtual bool AddContainerValueReadFromObject(QTextStream& stream, const imtsdl::CSdlField& field, const QString& variableName, quint16 horizontalIndents) const = 0;
209
226 virtual bool AddContainerListAccessCode(QTextStream& stream, const imtsdl::CSdlField& field, const QString& variableName, quint16 horizontalIndents, ListAccessResult& result) const = 0;
227
234 virtual void WriteTypenameToObjectCode(QTextStream& stream, const imtsdl::CSdlType& sdlType) const = 0;
235
236 virtual CSdlUnionConverter::ConversionType GetUnionScalarConversionType() const = 0;
237 virtual CSdlUnionConverter::ConversionType GetUnionArrayConversionType() const = 0;
238
239 // additional methods
241 virtual QString GetUnionListElementType(bool forScalar) const ;
242 virtual void AddUnionFieldValueReadFromObject(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, quint16 hIndents) const = 0 ;
243 virtual void AddUnionFieldValueWriteToObject(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, quint16 hIndents) const = 0 ;
244
245
246 // comfort methods
247 void WriteMethodCall(QTextStream& stream, MetdodType type, const QString& objectName = QString(), bool isPointer = false) const;
248 std::shared_ptr<imtsdl::CSdlEntryBase> FindEntryByName(const QString& entryName, bool onlyLocal = false) const;
249
251 void WriteSetValueToStruct(QTextStream& stream, const imtsdl::CSdlField& field, const QString& objectName = QStringLiteral("object")) const;
252
253 // reimplemented (imtsdlgencpp::CSdlClassModificatorBaseComp)
254 virtual bool ProcessSourceClassFile(const imtsdl::CSdlType& sdlType, QIODevice* headerDevicePtr, const iprm::IParamsSet* paramsPtr) const override;
255 virtual bool ProcessHeaderClassFile(const imtsdl::CSdlType& sdlType, QIODevice* sourceDevicePtr, const iprm::IParamsSet* paramsPtr) const override;
256
257private:
258 // basic helper methods
259 void AddFieldWriteToObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional) const;
260 void AddFieldReadFromObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional) const;
261
262 // write helpers
263 void AddScalarFieldWriteToObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, bool isEnum, bool isUnion) const;
264 void AddCustomFieldWriteToObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional) const;
265 void AddCustomFieldWriteToObjectImplCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, quint16 hIndents = 1) const;
266 void AddArrayFieldWriteToObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional) const;
267 void AddArrayFieldWriteToObjectImplCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, quint16 hIndents = 1) const;
268 void AddCustomArrayFieldWriteToObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional) const;
269 void AddCustomArrayFieldWriteToObjectImplCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, quint16 hIndents = 1) const;
270
271 // read helpers
272 void AddFieldValueReadFromObject(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, bool isEnum, bool isUnion, quint16 hIndents = 1) const;
273 void AddCustomFieldReadFromObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional) const;
274 void AddCustomFieldReadFromObjectImplCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, quint16 hIndents = 1) const;
275 void AddArrayFieldReadFromObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, bool isEnum, bool isUnion) const;
276 void AddArrayFieldReadFromObjectImplCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, bool isEnum, bool isUnion, quint16 hIndents = 1) const;
277 void AddCustomArrayFieldReadFromObjectCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional) const;
278 void AddCustomArrayFieldReadToObjectImplCode(QTextStream& stream, const imtsdl::CSdlField& field, bool optional, quint16 hIndents = 1) const;
279};
280
281
282} // namespace imtsdlgencpp
283
virtual void WriteTypenameToObjectCode(QTextStream &stream, const imtsdl::CSdlType &sdlType) const =0
Writes code that writes the typename to an object.
virtual QString GetUnionListElementType(bool forScalar) const
virtual bool AddContainerValueReadFromObject(QTextStream &stream, const imtsdl::CSdlField &field, const QString &variableName, quint16 horizontalIndents) const =0
Writes a begin of code, that reads a value from an object.
virtual QString GetArrayContainerObjectVariableName() const =0
Same as GetContainerObjectVariableName, but only for arrays/lists.
virtual bool AddContainerListAccessCode(QTextStream &stream, const imtsdl::CSdlField &field, const QString &variableName, quint16 horizontalIndents, ListAccessResult &result) const =0
Writes code, that obtains a value from an object as list.
virtual QString AddCreationOfTemporaryArray(QTextStream &stream, const imtsdl::CSdlField &field) const =0
This method is used to create an array to store objects of the same type as the field.
virtual bool AddFieldValueAppendToObjectArray(QTextStream &stream, const imtsdl::CSdlField &field, const QString &arrayContainerVariableName, const QString &variableName, uint horizontalIndents) const =0
Writes code, that appends a scalar value to an object.
virtual bool AddContainerValueCheckConditionBegin(QTextStream &stream, const imtsdl::CSdlField &field, bool expected, quint16 horizontalIndents) const =0
Writes a begin of code, that checks whether the object contains a value.
virtual bool AddFieldValueWriteToObject(QTextStream &stream, const imtsdl::CSdlField &field, const QString &variableName, uint horizontalIndents) const =0
Writes code, that sets a scalar value to an object.
virtual bool AddObjectValueWriteToObject(QTextStream &stream, const imtsdl::CSdlField &field, const QString &variableName, uint horizontalIndents) const =0
Same as AddFieldValueWriteToObject, but only for object's container as object i.e.
virtual bool AddArrayWriteToObject(QTextStream &stream, const imtsdl::CSdlField &field, const QString &variableName, const QString &targetObjectVariableName, uint horizontalIndents) const =0
writes code, that sets an array variableName to an object targetObjectVariableName
void WriteSetValueToStruct(QTextStream &stream, const imtsdl::CSdlField &field, const QString &objectName=QStringLiteral("object")) const
Simply generates a start of code, that sets a value to struct like.