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