|
发表于 2019-12-11 09:18:00
|
显示全部楼层
代码的生成是 python 脚本结合 mako 模板来做的,自己写个 C 语言版本的 Mako 模板就行。
照着 C++的版本照葫芦画瓢就行,去掉 QT 的东西。
- # coding: utf-8
- <%!
- from textwrap import wrap
- %>\
- #include <QVariant>
- #include <QQueue>
- #include <QPair>
- class ${machine.name} {
- public:
- enum State {
- % for s in machine.states[:-1]:
- ${capitalCase(s.name)},
- % endfor
- ${capitalCase(machine.states[-1].name)}
- };
- enum Event {
- % for e in machine.events[:-1]:
- % for l in wrap(e.comment, 80):
- // ${l}
- % endfor
- ${capitalCase(e.name)},
- % endfor
- % for l in wrap(machine.events[-1].comment, 80):
- // ${l}
- % endfor
- ${capitalCase(machine.events[-1].name)}
- };
- class Delegate {
- public:
- % for i in machine.inputs:
- %if i.comment:
- %for l in wrap(i.comment, 80):
- // ${l}
- %endfor
- %endif
- virtual bool ${i.name}(const QVariantMap& params) = 0;
- % endfor
- % for o in machine.outputs:
- %if o.comment:
- % for l in wrap(o.comment, 80):
- // ${l}
- % endfor
- % endif
- virtual void ${o.name}(const QVariantMap& params) = 0;
- % endfor
- };
- State currentState();
- Delegate* delegate;
- QQueue<QPair<Event, QVariantMap> > eventQueue;
-
-
- ${machine.name}(Delegate * delegate);
- void processEvent(Event event, const QVariantMap& params);
- static QString stateName(State s);
- State currentState() const;
- private:
- void processEventInternal(Event event, const QVariantMap& params);
- State _currentState;
- };
复制代码 |
|