YPC  0.2.0
algo_wrapper.h
Go to the documentation of this file.
1 
9 #pragma once
10 #include "ypc/core_t/analyzer/helper/parser_type_traits.h"
11 #include "ypc/core_t/analyzer/interface/algo_interface.h"
12 #include "ypc/core_t/analyzer/interface/allowance_interface.h"
13 #include "ypc/core_t/analyzer/interface/data_hash_interface.h"
14 #include "ypc/core_t/analyzer/interface/data_interface.h"
15 #include "ypc/core_t/analyzer/interface/model_interface.h"
16 #include "ypc/core_t/analyzer/interface/parser_interface.h"
17 #include "ypc/core_t/analyzer/internal/data_streams/multi_data_stream.h"
18 #include "ypc/core_t/analyzer/internal/data_streams/noinput_data_stream.h"
19 #include "ypc/core_t/analyzer/internal/data_streams/raw_data_stream.h"
20 #include "ypc/core_t/analyzer/internal/data_streams/sealed_data_stream.h"
21 #include "ypc/core_t/analyzer/internal/keymgr_session.h"
22 #include "ypc/core_t/analyzer/internal/results/local_result.h"
23 #include "ypc/core_t/analyzer/internal/results/offchain_result.h"
24 #include "ypc/core_t/analyzer/internal/results/onchain_result.h"
25 
26 namespace ypc {
27 template <typename Crypto, typename DataSession, typename ParserT,
28  typename Result, typename ModelT = void,
29  template <typename> class DataAllowancePolicy = ignore_data_allowance,
30  template <typename> class ModelAllowancePolicy =
31  ignore_model_allowance>
33  : virtual public internal::algo_interface<
34  Crypto, DataSession, ParserT, Result, ModelT, DataAllowancePolicy,
35  ModelAllowancePolicy>,
36  virtual public Result,
37  virtual public internal::keymgr_session,
38  virtual public internal::parser_interface<DataSession, ParserT>,
39  virtual public internal::data_interface<Crypto, DataSession>,
40  virtual public internal::data_hash_interface<Crypto, DataSession>,
41  virtual public internal::model_interface<Crypto, ModelT> {
44  typedef internal::algo_interface<Crypto, DataSession, ParserT, Result, ModelT,
45  DataAllowancePolicy, ModelAllowancePolicy>
50 
51 public:
52  uint32_t begin_parse_data_item() {
53  LOG(INFO) << "start init keymgr session...";
54  uint32_t ret = keymgr_session_t::init_keymgr_session();
55  if (ret) {
56  LOG(ERROR) << "parse_data_item_impl failed: "
57  << stbox::status_string(ret);
58  return ret;
59  }
60  LOG(INFO) << "init keymgr session done, start create_parser";
61  ret = parser_interface_t::create_parser();
62  if (ret) {
63  LOG(ERROR) << "create_parser failed: " << stbox::status_string(ret);
64  return ret;
65  }
66  LOG(INFO) << "begin_parse_data_item done";
67  return stbox::stx_status::success;
68  }
69 
70  uint32_t parse_data_item(const uint8_t *input_param, uint32_t len) {
71 
72  uint32_t ret = algo_interface_t::parse_data_item_impl(input_param, len);
73  if (ret) {
74  LOG(ERROR) << "parse_data_item_impl failed: "
75  << stbox::status_string(ret);
76  return ret;
77  }
78  data_hash_interface_t::set_data_hash();
79  return stbox::stx_status::success;
80  }
81 
82  uint32_t end_parse_data_item() {
83  uint32_t ret = data_interface_t::check_actual_data_hash();
84  if (ret) {
85  LOG(ERROR) << "check_actual_ata_hash failed: "
86  << stbox::status_string(ret);
87  return ret;
88  }
89  ret = Result::generate_result();
90  if (ret) {
91  LOG(ERROR) << "generate result failed: " << stbox::status_string(ret);
92  return ret;
93  }
94  return keymgr_session_t::close_keymgr_session();
95  }
96 
97  uint32_t get_parser_type() const {
99  type.d.result_type = result_type_traits<Result>::value;
100  type.d.data_source_type = datasource_type_traits<DataSession>::value;
101  type.d.has_model = model_type_traits<ModelT>::value;
102  return type.value;
103  }
104 };
105 
106 // template <typename ParserT>
107 // using onchain_classical =
108 // algo_wrapper<sealed_data_stream, ParserT, onchain_result>;
109 
110 // template <typename ParserT>
111 // using offchain_classical =
112 // algo_wrapper<sealed_data_stream, ParserT, offchain_result>;
113 
114 // template <typename ParserT>
115 // using multi_hosting_data_onchain =
116 // algo_wrapper<multi_data_stream, ParserT, onchain_result>;
117 
118 // template <typename ParserT>
119 // using multi_hosting_data_offchain =
120 // algo_wrapper<multi_data_stream, ParserT, offchain_result>;
121 
124 // template <typename ParserT, typename ModelT>
125 // using local_parser =
126 // algo_wrapper<raw_data_stream, ParserT, local_result, ModelT>;
127 
128 // template <typename ParserT, typename ModelT>
129 // using local_parser =
130 // algo_wrapper<raw_data_stream, ParserT, offchain_result, ModelT>;
131 } // namespace ypc
ypc::internal::data_hash_interface
Definition: data_hash_interface.h:13
ypc::utc::parser_type_t
Definition: parser_type.h:24
ypc::internal::model_interface
Definition: model_interface.h:18
ypc::internal::algo_interface
Definition: algo_interface.h:26
ypc::datasource_type_traits
Definition: parser_type_traits.h:8
ypc::internal::keymgr_session
Definition: keymgr_session.h:17
ypc::algo_wrapper
Definition: algo_wrapper.h:32
ypc::result_type_traits
Definition: parser_type_traits.h:4
ypc::internal::parser_interface
Definition: parser_interface.h:12
ypc::internal::data_interface
Definition: data_interface.h:19
ypc::model_type_traits
Definition: parser_type_traits.h:12
ypc::crypto::crypto_pack
Definition: crypto_pack.h:14