YPC  0.2.0
parser_interface.h
1 #pragma once
2 #include "ypc/core_t/analyzer/internal/data_streams/noinput_data_stream.h"
3 #include "ypc/core_t/analyzer/internal/is_multi_datasource.h"
4 #include "ypc/core_t/analyzer/var/data_source_var.h"
5 #include "ypc/core_t/analyzer/var/parser_var.h"
6 
7 namespace ypc {
8 namespace internal {
9 
10 template <typename DataSession, typename ParserT,
11  bool has_multi_datasource = is_multi_datasource<DataSession>::value>
13 
14 template <typename ParserT>
15 class parser_interface<noinput_data_stream, ParserT, false>
16  : virtual public parser_var<ParserT> {
18 
19 public:
20  uint32_t create_parser() {
21  parser_var_t::m_engine.reset(new ::hpda::engine());
22  parser_var_t::m_parser.reset(new ParserT());
23  return stbox::stx_status::success;
24  };
25 };
26 
27 template <typename DataSession, typename ParserT>
28 class parser_interface<DataSession, ParserT, false>
29  : virtual public data_source_var<DataSession>,
30  virtual public parser_var<ParserT> {
33 
34 public:
35  uint32_t create_parser() {
36  if (!data_source_var_t::m_datasource) {
37  return stbox::stx_status::data_source_not_set;
38  }
39  parser_var_t::m_engine.reset(new ::hpda::engine());
40  data_source_var_t::m_datasource->set_engine(parser_var_t::m_engine.get());
41  parser_var_t::m_parser.reset(
42  new ParserT(data_source_var_t::m_datasource.get()));
43  return stbox::stx_status::success;
44  };
45 };
46 
47 template <typename DataSession, typename ParserT>
48 class parser_interface<DataSession, ParserT, true>
49  : virtual public data_source_var<DataSession>,
50  virtual public parser_var<ParserT> {
53 
54 public:
55  uint32_t create_parser() {
56  if (data_source_var_t::m_datasource.empty()) {
57  return stbox::stx_status::data_source_not_set;
58  }
59  parser_var_t::m_engine.reset(new ::hpda::engine());
60  for (auto ds : data_source_var_t::m_datasource) {
61  ds->set_engine(parser_var_t::m_engine.get());
62  }
63 
64  parser_var_t::m_parser.reset(new ParserT(data_source_var_t::m_datasource));
65  return stbox::stx_status::success;
66  };
67 };
68 } // namespace internal
69 
70 } // namespace ypc
ypc::internal::data_source_var
Definition: data_source_var.h:10
ypc::internal::parser_var
Definition: parser_var.h:7
ypc::internal::parser_interface
Definition: parser_interface.h:12
ypc::internal::noinput_data_stream
Definition: noinput_data_stream.h:8