blob: 3926507c646b448f6a7f538b9aeb6c8d1db33045 [file] [log] [blame]
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<QStringData*>(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}