8 #ifndef INCLUDED_ORCUS_THREADED_SAX_TOKEN_PARSER_HPP
9 #define INCLUDED_ORCUS_THREADED_SAX_TOKEN_PARSER_HPP
11 #include "orcus/tokens.hpp"
12 #include "orcus/xml_namespace.hpp"
13 #include "orcus/sax_token_parser_thread.hpp"
14 #include "orcus/sax_parser_base.hpp"
15 #include "orcus/exception.hpp"
16 #include "orcus/detail/thread.hpp"
25 template<
typename _Handler>
30 typedef _Handler handler_type;
44 handler_type& hdl,
size_t min_token_size);
59 handler_type& hdl,
size_t min_token_size,
size_t max_token_size);
71 void process_tokens(sax::parse_tokens_t&
tokens);
75 handler_type& m_handler;
78 template<
typename _Handler>
81 handler_type& hdl,
size_t min_token_size) :
82 m_parser_thread(p, n, tks, ns_cxt, min_token_size), m_handler(hdl) {}
84 template<
typename _Handler>
87 size_t min_token_size,
size_t max_token_size) :
88 m_parser_thread(p, n, tks, ns_cxt, min_token_size, max_token_size), m_handler(hdl) {}
90 template<
typename _Handler>
93 std::thread t(&threaded_sax_token_parser::thread_parse,
this);
96 sax::parse_tokens_t
tokens;
100 while (m_parser_thread.next_tokens(
tokens))
105 catch (
const std::exception& e)
107 m_parser_thread.abort();
112 template<
typename _Handler>
115 m_parser_thread.swap_string_pool(pool);
118 template<
typename _Handler>
119 void threaded_sax_token_parser<_Handler>::thread_parse()
122 m_parser_thread.start();
125 template<
typename _Handler>
126 void threaded_sax_token_parser<_Handler>::process_tokens(sax::parse_tokens_t& tks)
128 std::for_each(tks.begin(), tks.end(),
129 [
this](
const sax::parse_token& t)
133 case sax::parse_token_t::start_element:
134 m_handler.start_element(*t.element);
136 case sax::parse_token_t::end_element:
137 m_handler.end_element(*t.element);
139 case sax::parse_token_t::characters:
140 m_handler.characters(pstring(t.characters.p, t.characters.n), false);
142 case sax::parse_token_t::parse_error:
143 throw sax::malformed_xml_error(std::string(t.error_value.p, t.error_value.len), t.error_value.offset);
145 throw general_error(
"unknown token type encountered.");
Definition: thread.hpp:16
Definition: sax_token_parser_thread.hpp:78
Definition: string_pool.hpp:24
Definition: threaded_sax_token_parser.hpp:27
threaded_sax_token_parser(const char *p, size_t n, const tokens &tks, xmlns_context &ns_cxt, handler_type &hdl, size_t min_token_size)
Definition: threaded_sax_token_parser.hpp:79
void parse()
Definition: threaded_sax_token_parser.hpp:91
Definition: tokens.hpp:22
Definition: xml_namespace.hpp:83