sheepy

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

BufferMemory.i (2114B)


      1 /* vim:set ft=c: -*- C++ -*- */
      2 #ifndef __QUEX_INCLUDE_GUARD__BUFFER__BUFFER_MEMORY_I
      3 #define __QUEX_INCLUDE_GUARD__BUFFER__BUFFER_MEMORY_I
      4 
      5 #include "asserts"
      6 #include "bufferAsserts"
      7 #include "definitions"
      8 #include "bufferBuffer"
      9 #include "Buffer_debug.i"
     10 #include "LexatomLoader"
     11 #include "MemoryManager"
     12 
     13 QUEX_NAMESPACE_MAIN_OPEN
     14 
     15 QUEX_INLINE void 
     16 QUEX_NAME(BufferMemory_construct)(QUEX_NAME(BufferMemory)*  me, 
     17                                   QUEX_TYPE_LEXATOM*      Memory, 
     18                                   const size_t              Size,
     19                                   E_Ownership               Ownership) 
     20 {
     21     if( Memory ) {
     22         /* "Memory size > QUEX_SETTING_BUFFER_MIN_FALLBACK_N + 2" is reqired.
     23          * Maybe, define '-DQUEX_SETTING_BUFFER_MIN_FALLBACK_N=0' for 
     24          * compilation (assumed no pre-contexts.)                                */
     25         __quex_assert(Size > QUEX_SETTING_BUFFER_MIN_FALLBACK_N + 2);
     26 
     27         me->_front    = Memory;
     28         me->_back     = &Memory[Size-1];
     29         me->ownership = Ownership;
     30         *(me->_front) = QUEX_SETTING_BUFFER_LIMIT_CODE;
     31         *(me->_back)  = QUEX_SETTING_BUFFER_LIMIT_CODE;
     32     } else {
     33         me->_front    = (QUEX_TYPE_LEXATOM*)0;
     34         me->_back     = me->_front;
     35         me->ownership = Ownership;
     36     }
     37 }
     38 
     39 QUEX_INLINE void 
     40 QUEX_NAME(BufferMemory_destruct)(QUEX_NAME(BufferMemory)* me) 
     41 /* Does not set 'me->_front' to zero, if it is not deleted. Thus, the user
     42  * may detect wether it needs to be deleted or not.                          */
     43 {
     44     if( me->_front && me->ownership == E_Ownership_LEXICAL_ANALYZER ) {
     45         QUEXED(MemoryManager_free)((void*)me->_front, 
     46                                    E_MemoryObjectType_BUFFER_MEMORY);
     47         /* Protect against double-destruction.                               */
     48         me->_front = me->_back = (QUEX_TYPE_LEXATOM*)0x0;
     49     }
     50 }
     51 
     52 QUEX_INLINE size_t          
     53 QUEX_NAME(BufferMemory_size)(QUEX_NAME(BufferMemory)* me)
     54 { return (size_t)(me->_back - me->_front + 1); }
     55 
     56 QUEX_NAMESPACE_MAIN_CLOSE
     57 
     58 #endif /*  __QUEX_INCLUDE_GUARD__BUFFER__BUFFER_MEMORY_I */