mode-handling.i (5265B)
1 /* -*- C++ -*- vim:set syntax=cpp: 2 * (C) Frankt-Rene Schaefer 3 * ABSOLUTELY NO WARRANTY */ 4 #ifndef __QUEX_INCLUDE_GUARD__ANALYZER__MEMBER__MODE_HANDLING_I 5 #define __QUEX_INCLUDE_GUARD__ANALYZER__MEMBER__MODE_HANDLING_I 6 7 #include "definitions" 8 #include "analyzerMode" 9 10 QUEX_NAMESPACE_MAIN_OPEN 11 12 QUEX_INLINE QUEX_NAME(Mode)* 13 QUEX_NAME(get_mode)(QUEX_TYPE_ANALYZER* me) 14 { return me->__current_mode_p; } 15 16 QUEX_INLINE int 17 QUEX_NAME(get_mode_id)(const QUEX_TYPE_ANALYZER* me) 18 { return me->__current_mode_p->id; } 19 20 QUEX_INLINE const char* 21 QUEX_NAME(get_mode_name)(const QUEX_TYPE_ANALYZER* me) 22 { return me->__current_mode_p->name; } 23 24 QUEX_INLINE void 25 QUEX_NAME(set_mode_brutally)(QUEX_TYPE_ANALYZER* me, QUEX_NAME(Mode)* ModeP) 26 { 27 # ifdef QUEX_OPTION_DEBUG_SHOW_MODES 28 if( me->__current_mode_p != 0x0 ) { 29 __QUEX_STD_fprintf(stderr, "| Mode change from %s\n", me->__current_mode_p->name); 30 __QUEX_STD_fprintf(stderr, "| to %s\n", ModeP->name); 31 } else { 32 __QUEX_STD_fprintf(stderr, "| Mode change to %s\n", ModeP->name); 33 } 34 # endif 35 36 me->__current_mode_p = ModeP; 37 me->current_analyzer_function = ModeP->analyzer_function; 38 } 39 40 QUEX_INLINE void 41 QUEX_NAME(set_mode_brutally_by_id)(QUEX_TYPE_ANALYZER* me, const int ModeID) 42 { 43 __quex_assert(ModeID < __QUEX_SETTING_MAX_MODE_CLASS_N); 44 QUEX_NAME(set_mode_brutally)(me, QUEX_NAME(mode_db)[ModeID]); 45 } 46 47 QUEX_INLINE void 48 QUEX_NAME(enter_mode)(QUEX_TYPE_ANALYZER* me, /* NOT const*/ QUEX_NAME(Mode)* TargetMode) 49 { 50 # ifdef __QUEX_OPTION_ON_ENTRY_HANDLER_PRESENT 51 QUEX_NAME(Mode)* SourceMode = me->__current_mode_p; 52 # endif 53 54 # ifdef __QUEX_OPTION_ON_EXIT_HANDLER_PRESENT 55 me->__current_mode_p->on_exit(me, TargetMode); 56 # endif 57 58 QUEX_NAME(set_mode_brutally)(me, TargetMode); 59 60 # ifdef __QUEX_OPTION_ON_ENTRY_HANDLER_PRESENT 61 TargetMode->on_entry(me, SourceMode); 62 # endif 63 } 64 65 QUEX_INLINE QUEX_NAME(Mode)* 66 QUEX_NAME(map_mode_id_to_mode)(QUEX_TYPE_ANALYZER* me, const int ModeID) 67 { 68 (void)me; 69 __quex_assert(ModeID >= 0); 70 __quex_assert(ModeID < __QUEX_SETTING_MAX_MODE_CLASS_N); 71 return QUEX_NAME(mode_db)[ModeID]; 72 } 73 74 QUEX_INLINE int 75 QUEX_NAME(map_mode_to_mode_id)(const QUEX_TYPE_ANALYZER* me, const QUEX_NAME(Mode)* Mode) 76 { (void)me; return Mode->id; } 77 78 QUEX_INLINE void 79 QUEX_NAME(pop_mode)(QUEX_TYPE_ANALYZER* me) 80 { 81 __quex_assert(me->_mode_stack.end != me->_mode_stack.begin); 82 --(me->_mode_stack.end); 83 QUEX_NAME(enter_mode)(me, *me->_mode_stack.end); 84 } 85 86 QUEX_INLINE void 87 QUEX_NAME(pop_drop_mode)(QUEX_TYPE_ANALYZER* me) 88 { 89 __quex_assert(me->_mode_stack.end != me->_mode_stack.begin); 90 --(me->_mode_stack.end); 91 /* do not care about what was popped */ 92 } 93 94 QUEX_INLINE void 95 QUEX_NAME(push_mode)(QUEX_TYPE_ANALYZER* me, QUEX_NAME(Mode)* new_mode) 96 { 97 # ifdef QUEX_OPTION_ASSERTS 98 if( me->_mode_stack.end == me->_mode_stack.memory_end ) 99 QUEX_ERROR_EXIT(__QUEX_MESSAGE_MODE_STACK_OVERFLOW); 100 # endif 101 *me->_mode_stack.end = me->__current_mode_p; 102 ++(me->_mode_stack.end); 103 QUEX_NAME(enter_mode)(me, new_mode); 104 } 105 106 # ifndef __QUEX_OPTION_PLAIN_C 107 QUEX_INLINE QUEX_NAME(Mode)& 108 QUEX_MEMBER(mode)() 109 { return *QUEX_NAME(get_mode)(this); } 110 111 QUEX_INLINE int 112 QUEX_MEMBER(mode_id)() const 113 { return QUEX_NAME(get_mode_id)(this); } 114 115 QUEX_INLINE const char* 116 QUEX_MEMBER(mode_name)() const 117 { return QUEX_NAME(get_mode_name)(this); } 118 119 QUEX_INLINE void 120 QUEX_MEMBER(set_mode_brutally)(const int ModeID) 121 { QUEX_NAME(set_mode_brutally_by_id)(this, ModeID); } 122 123 QUEX_INLINE void 124 QUEX_MEMBER(set_mode_brutally)(const QUEX_NAME(Mode)& TheMode) 125 { QUEX_NAME(set_mode_brutally)(this, ((QUEX_NAME(Mode)*)&TheMode)); } 126 127 QUEX_INLINE void 128 QUEX_MEMBER(enter_mode)(/* NOT const*/ QUEX_NAME(Mode)& TargetMode) 129 { QUEX_NAME(enter_mode)(this, &TargetMode); } 130 131 QUEX_INLINE QUEX_NAME(Mode)& 132 QUEX_MEMBER(map_mode_id_to_mode)(const int ModeID) 133 { return *(QUEX_NAME(map_mode_id_to_mode)(this, ModeID)); } 134 135 QUEX_INLINE int 136 QUEX_MEMBER(map_mode_to_mode_id)(const QUEX_NAME(Mode)& TheMode) const 137 { return QUEX_NAME(map_mode_to_mode_id)(this, &TheMode); } 138 139 QUEX_INLINE void 140 QUEX_MEMBER(operator)<<(const int ModeID) 141 { enter_mode(*(QUEX_NAME(map_mode_id_to_mode)(this, ModeID))); } 142 143 QUEX_INLINE void 144 QUEX_MEMBER(operator)<<(/* NOT const*/ QUEX_NAME(Mode)& TheMode) 145 { enter_mode(TheMode); } 146 147 QUEX_INLINE void 148 QUEX_MEMBER(pop_mode)() 149 { QUEX_NAME(pop_mode)(this); } 150 151 QUEX_INLINE void 152 QUEX_MEMBER(pop_drop_mode)() 153 { QUEX_NAME(pop_drop_mode)(this); } 154 155 QUEX_INLINE void 156 QUEX_MEMBER(push_mode)(QUEX_NAME(Mode)& new_mode) 157 { QUEX_NAME(push_mode)(this, &new_mode); } 158 159 # endif 160 161 QUEX_NAMESPACE_MAIN_CLOSE 162 163 #endif /* __QUEX_INCLUDE_GUARD__ANALYZER__MEMBER__MODE_HANDLING_I */