ImagingTools Core SDK
Protected Member Functions | List of all members
imtsdlgencpp::CObjectModificatorCompBaseabstract

#include <CObjectModificatorCompBase.h>

Inheritance diagram for imtsdlgencpp::CObjectModificatorCompBase:
imtsdlgencpp::CSdlClassModificatorBaseComp imtsdl::CSdlTools imtsdlgencpp::CSdlUnionConverter imtsdlgencpp::CCxxProcessorCompBase imtsdlgencpp::CSdlClassGqlModificatorComp imtsdlgencpp::CSdlClassJsonModificatorComp

Protected Member Functions

virtual QString GetArrayContainerObjectVariableName () const =0
 Same as GetContainerObjectVariableName, but only for arrays/lists.
 
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 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 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
 
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 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 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 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
 
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.
 

Additional Inherited Members

- Protected Types inherited from imtsdlgencpp::CSdlUnionConverter
enum  ConversionType { CT_MODEL_SCALAR = 2 , CT_MODEL_ARRAY = 3 , CT_GQL_SCALAR = 8 , CT_GQL_ARRAY = 12 , CT_JSON_SCALAR = 32 , CT_JSON_ARRAY = 48 }
 
- Static Protected Member Functions inherited from imtsdl::CSdlTools
static QString ConvertTypeOrEnumOrUnion (const CSdlField &sdlField, const SdlEnumList &enumList, const SdlUnionList &unionList, bool *isCustomPtr=nullptr, bool *isComplexPtr=nullptr, bool *isArrayPtr=nullptr, bool *isEnumPtr=nullptr, bool *isUnion=nullptr)
 
static std::shared_ptr< CSdlEntryBase > GetSdlTypeOrEnumOrUnionForField (const CSdlField &sdlField, const SdlTypeList &typeList, const SdlEnumList &enumList, const SdlUnionList &unionList)
 
static QMap< QString, QString > CalculateTargetCppFilesFromSchemaParams (const iprm::IParamsSet &schemaParams, const ISdlProcessArgumentsParser &argumentParser, bool relativePath=false)
 
static QString GetCompleteOutputPath (const iprm::IParamsSet &schemaParams, const ISdlProcessArgumentsParser &argumentParser, bool cleanPath, bool cppPath)
 resolves a complete output path from schema params and template(if enabled) if template is not enabled, returns argumentParser.GetOutputDirectoryPath()
 
static QString GetTempOutputPathFromParams (const iprm::IParamsSet *paramsPtr, const QString &fallbackPath=QString())
 extracts a temp path from paramsPtr ant returns it on successfull, returns fallbackPath otherwise
 
- Static Protected Attributes inherited from imtsdl::CSdlTools
static QString s_sdlGlobalPrefix
 Defines an SDL scheme namespace prefix.
 

Detailed Description

The base C++ class modificator, adds saving and loading generated SDL types to/from 'object'

Warning
ALL modificators MUST inherit from this class!

Definition at line 20 of file CObjectModificatorCompBase.h.

Member Function Documentation

◆ AddArrayWriteToObject()

virtual bool imtsdlgencpp::CObjectModificatorCompBase::AddArrayWriteToObject ( QTextStream &  stream,
const imtsdl::CSdlField &  field,
const QString &  variableName,
const QString &  targetObjectVariableName,
uint  horizontalIndents 
) const
protectedpure virtual

writes code, that sets an array variableName to an object targetObjectVariableName

// C++ code before
QJsonArray newValuesArray;
// somehow fill an array
// example of C++ generated code
jsonObject["values"] = newValuesArray;

◆ AddContainerListAccessCode()

virtual bool imtsdlgencpp::CObjectModificatorCompBase::AddContainerListAccessCode ( QTextStream &  stream,
const imtsdl::CSdlField &  field,
const QString &  variableName,
quint16  horizontalIndents,
ListAccessResult &  result 
) const
protectedpure virtual

Writes code, that obtains a value from an object as list.

// example of C++ generated code
const QJsonArray vsluesArray = jsonObject["values"].toArray();
const qsizetype valuesArrayCount = valuesArray.size();

this method MUST fill result with correct values ListAccessResult::listVariableName = "vsluesArray", because it is a list storage ListAccessResult::listCountVariableName = "valuesArrayCount", because it indicates a number of elements ListAccessResult::listCountVariableType = "qsizetype", because a type of count variable ListAccessResult::customListAccessMethodName = {NULL|"at"}, because the QJsonArray (a container of objects) uses operator[] or method at() to access items by index ListAccessResult::toObjectTransformMethod = ".toJsonObject()", bacause access by index returns QJsonValue, but we need a QJsonObject in case JSON for custom types ListAccessResult::toObjectTransformMethod = ".toString()", bacause access by index returns QJsonValue, but we need a QString in case JSON if a field is string

◆ AddContainerValueCheckConditionBegin()

virtual bool imtsdlgencpp::CObjectModificatorCompBase::AddContainerValueCheckConditionBegin ( QTextStream &  stream,
const imtsdl::CSdlField &  field,
bool  expected,
quint16  horizontalIndents 
) const
protectedpure virtual

Writes a begin of code, that checks whether the object contains a value.

Parameters
expected- if true, that mens, the value MUST exists in the object
Note
this method MUST Depending on the type, generate a different result, even if it is complex type
// example of C++ generated code if \c expected == true
if (jsonObject.contains("value") && jsonObject["value"].isString()){
// example of C++ generated code if \c expected == false
if (!jsonObject.contains("value") || !jsonObject["value"].isString()){

◆ AddContainerValueReadFromObject()

virtual bool imtsdlgencpp::CObjectModificatorCompBase::AddContainerValueReadFromObject ( QTextStream &  stream,
const imtsdl::CSdlField &  field,
const QString &  variableName,
quint16  horizontalIndents 
) const
protectedpure virtual

Writes a begin of code, that reads a value from an object.

Warning
this method MUST NOT write endian semicolon(;)!
// example of C++ generated code
jsonObject["value"].toString()

◆ AddCreationOfTemporaryArray()

virtual QString imtsdlgencpp::CObjectModificatorCompBase::AddCreationOfTemporaryArray ( QTextStream &  stream,
const imtsdl::CSdlField &  field 
) const
protectedpure virtual

This method is used to create an array to store objects of the same type as the field.

//example of C++ generated code
QJsonArray newValuesArray;
//another example of C++ generated code for mote complex object
::imtbase::CTreeItemModel* newValuesModelPtr = model.AddTreeModel("values", modelIndex);
Returns
a name of created container if operation is successful and a NULL string otherwise
Warning
returned value MUST be uniquie for each fieldId
See also
CSdlField::GetId()
QString::isNull()

◆ AddFieldValueAppendToObjectArray()

virtual bool imtsdlgencpp::CObjectModificatorCompBase::AddFieldValueAppendToObjectArray ( QTextStream &  stream,
const imtsdl::CSdlField &  field,
const QString &  arrayContainerVariableName,
const QString &  variableName,
uint  horizontalIndents 
) const
protectedpure virtual

Writes code, that appends a scalar value to an object.

Parameters
field- field to set
arrayContainerVariableName- name of an array, to store elements, types of a field
variableName- variable name, that contains a value to be added to an array arrayContainerVariableName, conforms to a field
horizontalIndents- for multiline generation, defines, how much tabs SHOULD be inserted after at each new line (except for the first one)
// example of C++ generated code
valuesJsonArray << aValue;
Warning
this mthod SHOULD NOT add leading and ending horizontal/vertical indents. The stream is already at the correct position.
Returns
true - if write to stream is succesfull and false otherwise

◆ AddFieldValueWriteToObject()

virtual bool imtsdlgencpp::CObjectModificatorCompBase::AddFieldValueWriteToObject ( QTextStream &  stream,
const imtsdl::CSdlField &  field,
const QString &  variableName,
uint  horizontalIndents 
) const
protectedpure virtual

Writes code, that sets a scalar value to an object.

Parameters
field- field to set
variableName- variable name, that contains a value to be set, conforms to a field
horizontalIndents- for multiline generation, defines, how much tabs SHOULD be inserted after at each new line (except for the first one)
// example of C++ generated code
jsonObject["value"] = *m_value;
Warning
this mthod SHOULD NOT add leading and ending horizontal/vertical indents. The stream is already at the correct position.
Returns
true - if write to stream is succesfull and false otherwise

◆ AddObjectValueWriteToObject()

virtual bool imtsdlgencpp::CObjectModificatorCompBase::AddObjectValueWriteToObject ( QTextStream &  stream,
const imtsdl::CSdlField &  field,
const QString &  variableName,
uint  horizontalIndents 
) const
protectedpure virtual

Same as AddFieldValueWriteToObject, but only for object's container as object i.e.

for custom user's types

See also
AddFieldValueWriteToObject
// C++ code before
QJsonObject newValueJsonObject;
// somehow create a valid JSON...
// example of C++ generated code
jsonObject["value"] = newValueJsonObject;

◆ GetArrayContainerObjectVariableName()

virtual QString imtsdlgencpp::CObjectModificatorCompBase::GetArrayContainerObjectVariableName ( ) const
protectedpure virtual

Same as GetContainerObjectVariableName, but only for arrays/lists.

Warning
it MUST NOT be identical to GetContainerObjectVariableName!
See also
GetContainerObjectVariableName

◆ GetUnionListElementType()

virtual QString imtsdlgencpp::CObjectModificatorCompBase::GetUnionListElementType ( bool  forScalar) const
protectedvirtual
Todo:
refactor it and describe

◆ WriteSetValueToStruct()

void imtsdlgencpp::CObjectModificatorCompBase::WriteSetValueToStruct ( QTextStream &  stream,
const imtsdl::CSdlField &  field,
const QString &  objectName = QStringLiteral("object") 
) const
protected

Simply generates a start of code, that sets a value to struct like.

*object.value =

◆ WriteTypenameToObjectCode()

virtual void imtsdlgencpp::CObjectModificatorCompBase::WriteTypenameToObjectCode ( QTextStream &  stream,
const imtsdl::CSdlType &  sdlType 
) const
protectedpure virtual

Writes code that writes the typename to an object.

// example of C++ generated code
jsonObject["__typename"] = QStringLiteral("TypeName");