Program Listing for File tokenlist.h#
↰ Return to documentation for file (sdv_idl_compiler\tokenlist.h)
#ifndef TOKENLIST_H
#define TOKENLIST_H
#include "token.h"
#include <list>
class CTokenList : public std::list<CToken>
{
public:
CTokenList();
CTokenList(const CTokenList& rlstTokens);
CTokenList(CTokenList&& rlstTokens) noexcept;
CTokenList& operator=(const CTokenList& rlstTokens);
CTokenList& operator=(CTokenList&& rlstTokens) noexcept;
const CToken& Current(size_t nIndex = 0) const;
const CToken& LastValid() const;
CTokenList operator++(int) const;
const CTokenList& operator++() const;
bool End() const;
void push_front(const CToken& rToken);
void push_front(CToken&& rToken);
void pop_front();
void push_back(const CToken& rToken);
void push_back(CToken&& rToken);
void pop_back();
void insert(const CToken& rToken);
void insert(CToken&& rToken);
template<class... Args>
CToken& emplace_back(Args&&... args);
private:
mutable std::list<CToken>::iterator m_itCurrent;
};
template<class... Args>
CToken& CTokenList::emplace_back(Args&&... args)
{
bool bEmpty = empty();
bool bEnd = bEmpty || m_itCurrent == end();
CToken& rToken = std::list<CToken>::emplace_back(args...);
if (bEmpty) m_itCurrent = begin();
else if (bEnd)
{
m_itCurrent = end();
--m_itCurrent;
}
return rToken;
}
#endif // !defined(TOKENLIST_H)