8 #ifndef INCLUDED_ORCUS_PARSER_BASE_HPP 9 #define INCLUDED_ORCUS_PARSER_BASE_HPP 11 #include "orcus/env.hpp" 12 #include "orcus/exception.hpp" 28 std::ptrdiff_t m_offset;
30 parse_error(
const std::string& msg, std::ptrdiff_t offset);
31 parse_error(
const std::string& cls,
const std::string& msg, std::ptrdiff_t offset);
33 static std::string build_message(
const char* msg_before,
char c,
const char* msg_after);
34 static std::string build_message(
const char* msg_before,
const char* p,
size_t n,
const char* msg_after);
37 std::ptrdiff_t offset()
const;
43 using numeric_parser_type = std::function<double(const char*&, size_t)>;
45 const char*
const mp_begin;
48 const bool m_transient_stream;
51 std::function<double(const char*&, size_t)> m_func_parse_numeric;
54 parser_base(
const char* p,
size_t n,
bool transient_stream);
56 void set_numeric_parser(
const numeric_parser_type& func)
58 m_func_parse_numeric = func;
61 bool transient_stream()
const {
return m_transient_stream; }
65 assert(mp_char <= mp_end);
66 return mp_char != mp_end;
71 assert((mp_char+1) <= mp_end);
72 return (mp_char+1) != mp_end;
75 void next(
size_t inc=1) { mp_char += inc; }
77 void prev(
size_t dec=1);
79 char cur_char()
const {
return *mp_char; }
81 char next_char()
const;
83 void skip(
const char* chars_to_skip,
size_t n_chars_to_skip);
88 void skip_space_and_control();
100 bool parse_expected(
const char* expected,
size_t n_expected);
108 double parse_double();
118 size_t remaining_size()
const;
128 return std::distance(mp_char, mp_end);
136 std::ptrdiff_t offset()
const;
size_t available_size() const
Definition: parser_base.hpp:126
Definition: exception.hpp:18
Definition: parser_base.hpp:40
Definition: parser_base.hpp:26
Definition: base64.hpp:15