⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motor_mac.inl

📁 FastDb是高效的内存数据库系统
💻 INL
字号:
//-----------------------------------------------------------------------------
// macros to create statemachines
//-----------------------------------------------------------------------------

#define DECLARE_STATEMACHINE(ImplementClass) \
typedef StateMachineT<ImplementClass> STATEMACHINE_PREFIX()##StateMachine;\
typedef AutomatonT<ImplementClass, STATEMACHINE_PREFIX()##StateMachine> STATEMACHINE_PREFIX()##Automaton;\
typedef StateT<ImplementClass, STATEMACHINE_PREFIX()##Automaton> STATEMACHINE_PREFIX()##State;\
typedef TransitionT<ImplementClass, STATEMACHINE_PREFIX()##State, STATEMACHINE_PREFIX()##Automaton> STATEMACHINE_PREFIX()##Transition;\
typedef ClosureT<ImplementClass> STATEMACHINE_PREFIX()##Closure;\
typedef EventT<ImplementClass> STATEMACHINE_PREFIX()##Event;\
typedef EngineObjectT<ImplementClass> STATEMACHINE_PREFIX()##EngineObject;

#define REGISTER_STATEMACHINE() \
REGISTER(STATEMACHINE_PREFIX()##EngineObject);\
REGISTER(STATEMACHINE_PREFIX()##Event);\
REGISTER(STATEMACHINE_PREFIX()##StateMachine);\
REGISTER(STATEMACHINE_PREFIX()##Automaton);\
REGISTER(STATEMACHINE_PREFIX()##State);\
REGISTER(STATEMACHINE_PREFIX()##Transition);\
REGISTER(STATEMACHINE_PREFIX()##Closure);

#define CREATE_REF(type, name, var) dbReference<STATEMACHINE_PREFIX()##type> var; createRef(#name, var);
#define SHORT_REF(type, name) dbReference<STATEMACHINE_PREFIX()##type> name; createRef(#name, name);
#define ADD_REF(type, var, ref) { dbCursor<STATEMACHINE_PREFIX()##type> cur(dbCursorForUpdate); \
  STATEMACHINE_PREFIX()##type* coll= cur.at(var); coll->Add(ref); cur.update(); }


#define ADD_TRANSITION(trans, event, state, nextState, subAutom, tt, fnCanHandle, fnHandle, fnDiag) \
  { SHORT_REF(Transition, trans);  \
    dbCursor<STATEMACHINE_PREFIX()##Transition> cur(dbCursorForUpdate);\
    STATEMACHINE_PREFIX()##Transition* t=cur.at(trans);\
    t->Init1(event, state, nextState, subAutom, tt, fnCanHandle, fnHandle, fnDiag);\
    cur.update();  ADD_REF(State, state, trans); } 

#define CONSTOBJ_BYREF(type, rec, ref) \
  dbCursor<type> cur##rec(dbCursorViewOnly); type* rec=NULL; \
  if (!ref.isNull()) rec= cur##rec.at(ref); 

#define OBJ_BYREF(type, rec, ref) \
  dbCursor<type> cur##rec(dbCursorForUpdate); type* rec=NULL; \
  if (!ref.isNull()) rec= cur##rec.at(ref);

#define CONSTOBJ_CASTED(type, rec, ref) \
  dbCursor<type> cur##rec(dbCursorViewOnly); type* rec=NULL; \
  dbReference<type> ref##rec; ref##rec.unsafeAssign(ref); \
  if (!ref.isNull()) rec= cur##rec.at(ref##rec);

#define OBJ_CASTED(type, rec, ref) \
  dbCursor<type> cur##rec(dbCursorForUpdate); type* rec=NULL; \
  dbReference<type> ref##rec; ref##rec.unsafeAssign(ref); \
  if (!ref.isNull()) rec= cur##rec.at(ref##rec);

#define SET_START_AUTOMATON(engine, automref) {\
    dbCursor<STATEMACHINE_PREFIX()##StateMachine> curEng(dbCursorForUpdate);\
    curEng.at(engine)->SetStartAutomaton(automref); curEng.update(); }

#define SET_START_STATE(automref, stateref) {\
    dbCursor<STATEMACHINE_PREFIX()##Automaton> curAutom(dbCursorForUpdate);\
    curAutom.at(automref)->SetStartState(stateref); curAutom.update(); }

#define SET_CURRENT_AUTOMATON(engine, automref) {\
    dbCursor<STATEMACHINE_PREFIX()##StateMachine> curEng(dbCursorForUpdate);\
    curEng.at(engine)->SetCurrentAutomaton(automref); curEng.update(); }

#define SET_CURRENT_STATE(automref, stateref) {\
    dbCursor<STATEMACHINE_PREFIX()##Automaton> curAutom(dbCursorForUpdate);\
    curAutom.at(automref)->SetCurrentState(stateref); curAutom.update(); }


#define CLOSURE(controller, obj, method, automaton) \
  STATEMACHINE_PREFIX()##Closure clos##method(#method, obj, &controller::method, automaton);\
  dbReference<STATEMACHINE_PREFIX()##Closure> method= insert(clos##method);

#define WIPE_TABLE(table) { dbCursor<STATEMACHINE_PREFIX()##table> cur(dbCursorForUpdate);\
  cur.removeAll(); }

#define INIT_STATEMACHINE() \
  WIPE_TABLE(Closure); WIPE_TABLE(Event); WIPE_TABLE(Transition); \
  WIPE_TABLE(State); WIPE_TABLE(Automaton); WIPE_TABLE(StateMachine); 

#define DO_COMMIT() dbDescriptor.getDatabase()->commit();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -