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/exception.hpp"
15#include "orcus/detail/thread.hpp"
24template<
typename _Handler>
29 typedef _Handler handler_type;
43 handler_type& hdl,
size_t min_token_size);
58 handler_type& hdl,
size_t min_token_size,
size_t max_token_size);
70 void process_tokens(sax::parse_tokens_t&
tokens);
74 handler_type& m_handler;
77template<
typename _Handler>
80 handler_type& hdl,
size_t min_token_size) :
81 m_parser_thread(p, n, tks, ns_cxt, min_token_size), m_handler(hdl) {}
83template<
typename _Handler>
86 size_t min_token_size,
size_t max_token_size) :
87 m_parser_thread(p, n, tks, ns_cxt, min_token_size, max_token_size), m_handler(hdl) {}
89template<
typename _Handler>
92 std::thread t(&threaded_sax_token_parser::thread_parse,
this);
95 sax::parse_tokens_t
tokens;
97 while (m_parser_thread.next_tokens(
tokens))
103template<
typename _Handler>
106 m_parser_thread.swap_string_pool(pool);
109template<
typename _Handler>
110void threaded_sax_token_parser<_Handler>::thread_parse()
113 m_parser_thread.start();
116template<
typename _Handler>
117void threaded_sax_token_parser<_Handler>::process_tokens(sax::parse_tokens_t& tks)
119 std::for_each(tks.begin(), tks.end(),
120 [
this](
const sax::parse_token& t)
124 case sax::parse_token_t::start_element:
125 m_handler.start_element(*t.element);
127 case sax::parse_token_t::end_element:
128 m_handler.end_element(*t.element);
130 case sax::parse_token_t::characters:
131 m_handler.characters(pstring(t.characters.p, t.characters.n), false);
134 throw general_error(
"unknown token type encountered.");
Definition: thread.hpp:16
Definition: sax_token_parser_thread.hpp:68
Definition: string_pool.hpp:23
Definition: threaded_sax_token_parser.hpp:26
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:78
void parse()
Definition: threaded_sax_token_parser.hpp:90
Definition: tokens.hpp:22
Definition: xml_namespace.hpp:83