struct ${classname}::Data: private QScxmlTableData { Data(${classname} &stateMachine) : stateMachine(stateMachine) {} void init() { stateMachine.setTableData(this); ${dataModelInitialization} } QString name() const override final { return ${name}; } QScxmlExecutableContent::ContainerId initialSetup() const override final { return ${initialSetup}; } QScxmlExecutableContent::InstructionId *instructions() const override final { return theInstructions; } QScxmlExecutableContent::StringId *dataNames(int *count) const override final { *count = ${dataNameCount}; return dataIds; } QScxmlExecutableContent::EvaluatorInfo evaluatorInfo(QScxmlExecutableContent::EvaluatorId evaluatorId) const override final { Q_ASSERT(evaluatorId >= 0); Q_ASSERT(evaluatorId < ${evaluatorCount}); return evaluators[evaluatorId]; } QScxmlExecutableContent::AssignmentInfo assignmentInfo(QScxmlExecutableContent::EvaluatorId assignmentId) const override final { Q_ASSERT(assignmentId >= 0); Q_ASSERT(assignmentId < ${assignmentCount}); return assignments[assignmentId]; } QScxmlExecutableContent::ForeachInfo foreachInfo(QScxmlExecutableContent::EvaluatorId foreachId) const override final { Q_ASSERT(foreachId >= 0); Q_ASSERT(foreachId < ${foreachCount}); return foreaches[foreachId]; } QString string(QScxmlExecutableContent::StringId id) const override final { Q_ASSERT(id >= QScxmlExecutableContent::NoString); Q_ASSERT(id < ${stringCount}); if (id == QScxmlExecutableContent::NoString) return QString(); return QString({static_cast(strings.data + id)}); } const qint32 *stateMachineTable() const override final { return theStateMachineTable; } QScxmlInvokableServiceFactory *serviceFactory(int id) const override final; ${classname} &stateMachine; ${dataModelField} static QScxmlExecutableContent::ParameterInfo param(QScxmlExecutableContent::StringId name, QScxmlExecutableContent::EvaluatorId expr, QScxmlExecutableContent::StringId location) { QScxmlExecutableContent::ParameterInfo p; p.name = name; p.expr = expr; p.location = location; return p; } static QScxmlExecutableContent::InvokeInfo invoke( QScxmlExecutableContent::StringId id, QScxmlExecutableContent::StringId prefix, QScxmlExecutableContent::EvaluatorId expr, QScxmlExecutableContent::StringId location, QScxmlExecutableContent::StringId context, QScxmlExecutableContent::ContainerId finalize, bool autoforward) { QScxmlExecutableContent::InvokeInfo i; i.id = id; i.prefix = prefix; i.expr = expr; i.location = location; i.context = context; i.finalize = finalize; i.autoforward = autoforward; return i; } static qint32 theInstructions[]; static QScxmlExecutableContent::StringId dataIds[]; static QScxmlExecutableContent::EvaluatorInfo evaluators[]; static QScxmlExecutableContent::AssignmentInfo assignments[]; static QScxmlExecutableContent::ForeachInfo foreaches[]; static const qint32 theStateMachineTable[]; static struct Strings { QArrayData data[${stringCount}]; qunicodechar stringdata[${stringdataSize}]; } strings; }; ${classname}::${classname}(QObject *parent) : QScxmlStateMachine(&staticMetaObject, parent) , data(new Data(*this)) { qRegisterMetaType<${classname} *>(); data->init(); } ${classname}::~${classname}() { delete data; } QScxmlInvokableServiceFactory *${classname}::Data::serviceFactory(int id) const { ${serviceFactories} } qint32 ${classname}::Data::theInstructions[] = { ${theInstructions} }; QScxmlExecutableContent::StringId ${classname}::Data::dataIds[] = { ${dataIds} }; QScxmlExecutableContent::EvaluatorInfo ${classname}::Data::evaluators[] = { ${evaluators} }; QScxmlExecutableContent::AssignmentInfo ${classname}::Data::assignments[] = { ${assignments} }; QScxmlExecutableContent::ForeachInfo ${classname}::Data::foreaches[] = { ${foreaches} }; #define STR_LIT(idx, ofs, len) \ Q_STATIC_STRING_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ qptrdiff(offsetof(Strings, stringdata) + ofs * sizeof(qunicodechar) - idx * sizeof(QArrayData)) \ ) ${classname}::Data::Strings ${classname}::Data::strings = {{ ${strLits} },{ ${uniLits} }}; const qint32 ${classname}::Data::theStateMachineTable[] = ${theStateMachineTable}; ${metaObject}