1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
class Input
{
std::deque<unsigned char> d_deque; // pending input chars
std::istream *d_in; // ptr for easy streamswitching
size_t d_trueLineNr; // true input file's line count
size_t d_lineNr; // line count
public:
Input();
// iStream: dynamically allocated
Input(std::istream *iStream, size_t lineNr = 1);
size_t get(); // the next range
void reRead(size_t ch); // push back 'ch' (if < 0x100)
// push back str from idx 'fmIdx'
void reRead(std::string const &str, size_t fmIdx);
size_t lineNr() const
{
return d_lineNr;
}
size_t trueLineNr() const
{
return d_trueLineNr;
}
void setLineNr(size_t lineNr)
{
d_lineNr = lineNr;
}
size_t nPending() const
{
return d_deque.size();
}
void setPending(size_t size)
{
d_deque.erase(d_deque.begin(), d_deque.end() - size);
}
void close() // force closing the stream
{
delete d_in;
d_in = 0; // switchStreams also closes
}
private:
size_t next(); // obtain the next character
};
|