blob: 6416025638715f9c7a263fc92c3637fd67af640a [file] [log] [blame]
/**
* @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 */