sheepy

build system (sheepy) and package manager (spm) for C
git clone https://spartatek.se/git/sheepy.git
Log | Files | Refs | README | LICENSE

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 */