| 56 |  | } | 
| 57 |  | inline void removeItems( size_t nb ) | 
| 58 |  | { | 
| 59 | < | assert(nb <= entries()); | 
| 59 | > | // it would be nice if we would not get called with nb > entries | 
| 60 | > | // (or to be precise when entries() == 0) | 
| 61 | > | // This case is possible when lexer/parser::recover() calls | 
| 62 | > | // consume+consumeUntil when the queue is empty. | 
| 63 | > | // In recover the consume says to prepare to read another | 
| 64 | > | // character/token. Then in the subsequent consumeUntil the | 
| 65 | > | // LA() call will trigger | 
| 66 | > | // syncConsume which calls this method *before* the same queue | 
| 67 | > | // has been sufficiently filled. | 
| 68 | > | if( nb > entries() ) | 
| 69 | > | nb = entries(); | 
| 70 | > |  | 
| 71 |  | if (m_offset >= OFFSET_MAX_RESIZE) | 
| 72 |  | { | 
| 73 |  | storage.erase( storage.begin(), storage.begin() + m_offset + nb ); | 
| 86 |  | } | 
| 87 |  |  | 
| 88 |  | private: | 
| 89 | < | typename ANTLR_USE_NAMESPACE(std)vector<T> storage; | 
| 89 | > | ANTLR_USE_NAMESPACE(std)vector<T> storage; | 
| 90 |  | size_t m_offset; | 
| 91 |  |  | 
| 92 |  | CircularQueue(const CircularQueue&); |