| /** |
| * @file ChunkStack.h |
| * Manages a simple stack of chunks |
| * |
| * @author Ben Gardner |
| * @license GPL v2+ |
| */ |
| #ifndef CHUNKSTACK_H_INCLUDED |
| #define CHUNKSTACK_H_INCLUDED |
| |
| #include "uncrustify_types.h" |
| #include <deque> |
| |
| class ChunkStack |
| { |
| public: |
| struct Entry |
| { |
| Entry() : m_seqnum(0), m_pc(0) { } |
| Entry(const Entry& ref) : m_seqnum(ref.m_seqnum), m_pc(ref.m_pc) { } |
| Entry(int sn, chunk_t *pc) : m_seqnum(sn), m_pc(pc) { } |
| int m_seqnum; |
| chunk_t *m_pc; |
| }; |
| |
| protected: |
| deque<Entry> m_cse; |
| int m_seqnum; // current seq num |
| |
| public: |
| ChunkStack() : m_seqnum(0) |
| { |
| } |
| |
| ChunkStack(const ChunkStack& cs) |
| { |
| Set(cs); |
| } |
| |
| virtual ~ChunkStack() |
| { |
| } |
| |
| void Set(const ChunkStack& cs); |
| |
| void Push_Back(chunk_t *pc) |
| { |
| Push_Back(pc, ++m_seqnum); |
| } |
| |
| bool Empty() const |
| { |
| return(m_cse.empty()); |
| } |
| |
| int Len() const |
| { |
| return(m_cse.size()); |
| } |
| |
| const Entry *Top() const; |
| const Entry *Get(int idx) const; |
| chunk_t *GetChunk(int idx) const; |
| |
| chunk_t *Pop_Back(); |
| void Push_Back(chunk_t *pc, int seqnum); |
| |
| chunk_t *Pop_Front(); |
| |
| void Reset() |
| { |
| m_cse.clear(); |
| } |
| |
| void Zap(int idx); |
| void Collapse(); |
| }; |
| |
| #endif /* CHUNKSTACK_H_INCLUDED */ |