Class consumer
Synopsis
#include <include/cpptoml.h>
template <class OnError>
class consumer
Description
Helper object for consuming expected characters.
Methods
consumer | ||
eat_digits | ||
eat_or | ||
error | ||
operator() overload |
Source
Lines 1774-1827 in include/cpptoml.h.
template <class OnError>
class consumer
{
public:
consumer(std::string::iterator& it, const std::string::iterator& end,
OnError&& on_error)
: it_(it), end_(end), on_error_(std::forward<OnError>(on_error))
{
// nothing
}
void operator()(char c)
{
if (it_ == end_ || *it_ != c)
on_error_();
++it_;
}
template <std::size_t N>
void operator()(const char (&str)[N])
{
std::for_each(std::begin(str), std::end(str) - 1,
[&](char c) { (*this)(c); });
}
void eat_or(char a, char b)
{
if (it_ == end_ || (*it_ != a && *it_ != b))
on_error_();
++it_;
}
int eat_digits(int len)
{
int val = 0;
for (int i = 0; i < len; ++i)
{
if (!is_number(*it_) || it_ == end_)
on_error_();
val = 10 * val + (*it_++ - '0');
}
return val;
}
void error()
{
on_error_();
}
private:
std::string::iterator& it_;
const std::string::iterator& end_;
OnError on_error_;
};