sheepy

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

TokenQueue (4384B)


      1 /* -*- C++ -*- vim: set syntax=cpp: 
      2  * (C) 2004-2009 Frank-Rene Schaefer                               */
      3 #ifndef __QUEX_INCLUDE_GUARD__TOKEN__TOKEN_QUEUE
      4 #define __QUEX_INCLUDE_GUARD__TOKEN__TOKEN_QUEUE
      5 
      6 #include "definitions"
      7 #include "asserts"
      8 #include "MemoryManager"
      9 
     10 #ifndef QUEX_TYPE_TOKEN
     11 #    error "QUEX_TYPE_TOKEN must be defined before including this file."
     12 #endif
     13 
     14 
     15 QUEX_NAMESPACE_MAIN_OPEN
     16 
     17     typedef struct QUEX_SETTING_USER_CLASS_DECLARATION_EPILOG {
     18 
     19         QUEX_TYPE_TOKEN*   begin;
     20         QUEX_TYPE_TOKEN*   read_iterator;    /* pointer to next token to be read          */
     21         QUEX_TYPE_TOKEN*   write_iterator;   /* pointer to next token to be written       */
     22         QUEX_TYPE_TOKEN*   end_minus_safety_border;
     23         QUEX_TYPE_TOKEN*   end;
     24         /* A token might be 'N' times repeated. This is the only case where a token
     25          * queue overflow might occur. When the token queue is full and there are still
     26          * 'N' tokens to be repeated, then the remaining 'N' are stored in the following
     27          * variable.                                                                      */
     28 
     29     } QUEX_NAME(TokenQueue);
     30 
     31     QUEX_INLINE void             QUEX_NAME(TokenQueue_reset)(QUEX_NAME(TokenQueue)* me);
     32     QUEX_INLINE void             QUEX_NAME(TokenQueue_init)(QUEX_NAME(TokenQueue)* me, 
     33                                                             QUEX_TYPE_TOKEN*       Memory, 
     34                                                             QUEX_TYPE_TOKEN*       MemoryEnd); 
     35     QUEX_INLINE void             QUEX_NAME(TokenQueue_construct)(QUEX_NAME(TokenQueue)* me, 
     36                                                                  QUEX_TYPE_TOKEN*       Memory,
     37                                                                  const size_t           N);
     38 #   if defined(QUEX_OPTION_USER_MANAGED_TOKEN_MEMORY)
     39     QUEX_INLINE void             QUEX_NAME(TokenQueue_disfunctionality_set)(QUEX_NAME(TokenQueue)* me);
     40     QUEX_INLINE bool             QUEX_NAME(TokenQueue_disfunctionality_check)(QUEX_NAME(TokenQueue)* me);
     41 #   endif
     42     QUEX_INLINE void             QUEX_NAME(TokenQueue_destruct)(QUEX_NAME(TokenQueue)* me);
     43     QUEX_INLINE void             QUEX_NAME(TokenQueue_remainder_get)(QUEX_NAME(TokenQueue)* me,
     44                                                                      QUEX_TYPE_TOKEN**      begin,
     45                                                                      QUEX_TYPE_TOKEN**      end);
     46     QUEX_INLINE void             QUEX_NAME(TokenQueue_memory_get)(QUEX_NAME(TokenQueue)* me,
     47                                                                   QUEX_TYPE_TOKEN**      memory,
     48                                                                   size_t*                n);
     49     QUEX_INLINE bool             QUEX_NAME(TokenQueue_is_full)(QUEX_NAME(TokenQueue)* me);
     50     QUEX_INLINE bool             QUEX_NAME(TokenQueue_is_empty)(QUEX_NAME(TokenQueue)* me);
     51     QUEX_INLINE QUEX_TYPE_TOKEN* QUEX_NAME(TokenQueue_access_write_p)(QUEX_NAME(TokenQueue)* me);
     52     QUEX_INLINE QUEX_TYPE_TOKEN* QUEX_NAME(TokenQueue_pop)(QUEX_NAME(TokenQueue)* me);
     53     QUEX_INLINE QUEX_TYPE_TOKEN* QUEX_NAME(TokenQueue_begin)(QUEX_NAME(TokenQueue)* me);
     54     QUEX_INLINE QUEX_TYPE_TOKEN* QUEX_NAME(TokenQueue_back)(QUEX_NAME(TokenQueue)* me);
     55     QUEX_INLINE size_t           QUEX_NAME(TokenQueue_available_n)(QUEX_NAME(TokenQueue)* me); 
     56 
     57 
     58 #   ifdef QUEX_OPTION_ASSERTS
     59     QUEX_INLINE void  
     60     QUEX_ASSERT_TOKEN_QUEUE_AFTER_WRITE(QUEX_NAME(TokenQueue)* me);
     61 
     62     QUEX_INLINE void  
     63     QUEX_TOKEN_QUEUE_ASSERT(QUEX_NAME(TokenQueue)* me);
     64 #   else
     65 #   define QUEX_TOKEN_QUEUE_ASSERT(me)             /* empty */
     66 #   define QUEX_ASSERT_TOKEN_QUEUE_AFTER_WRITE(me) /* empty */
     67 #   endif
     68 
     69 typedef struct QUEX_SETTING_USER_CLASS_DECLARATION_EPILOG {
     70     QUEX_TYPE_TOKEN*   token_list;
     71     size_t             size;
     72 } QUEX_NAME(TokenQueueRemainder);
     73 
     74 #if 1
     75 QUEX_INLINE void  QUEX_NAME(TokenQueueRemainder_save)(QUEX_NAME(TokenQueueRemainder)*  me, 
     76                                                       QUEX_NAME(TokenQueue)*           token_queue);
     77 
     78 QUEX_INLINE void  QUEX_NAME(TokenQueueRemainder_restore)(QUEX_NAME(TokenQueueRemainder)*  me, 
     79                                                          QUEX_NAME(TokenQueue)*           token_queue);
     80 #endif
     81 
     82 QUEX_NAMESPACE_MAIN_CLOSE
     83 
     84 #endif /* __QUEX_INCLUDE_GUARD__TOKEN__TOKENQUEUE */