@@ -21,6 +21,12 @@ constexpr size_t kMaxPred = 10;
2121constexpr size_t kMaxConj = 10 ;
2222constexpr size_t kTotalMaxRfs = kMaxRfsInPred * kMaxPred * kMaxConj ;
2323
24+ class InputReader {
25+ public:
26+ static std::string ReadFile (const std::string& filename);
27+ static std::vector<std::string_view> ReadRecords (const std::string& input);
28+ };
29+
2430struct EstimationResult {
2531 double total_parser_runtime;
2632 std::array<double , kTotalMaxRfs > total_rf_runtimes;
@@ -32,10 +38,6 @@ struct RawFilterData {
3238 std::array<std::array<size_t , kMaxPred >, kMaxConj > rf_count = {};
3339 std::array<size_t , kMaxConj > pred_count = {};
3440 size_t conj_count = 0 ;
35-
36- static size_t GetFlatIdx (size_t conj_idx, size_t pred_idx, size_t rf_idx) {
37- return conj_idx * kMaxPred * kMaxRfsInPred + pred_idx * kMaxRfsInPred + rf_idx;
38- }
3941};
4042
4143class RawFilterQueryGenerator {
@@ -44,18 +46,6 @@ class RawFilterQueryGenerator {
4446 static std::vector<std::string_view> GenerateRawFiltersFromPredicate (const std::string_view& input);
4547};
4648
47- class Sparser {
48- public:
49- explicit Sparser (std::unique_ptr<JsonQueryDriver>&& json_query_driver = {})
50- : json_query_driver_(std::move(json_query_driver)) {}
51-
52- EstimationResult Calibrate (const std::vector<std::string_view>& input, const JsonQuery& json_query,
53- const RawFilterData& rf_data);
54-
55- private:
56- std::unique_ptr<JsonQueryDriver> json_query_driver_;
57- };
58-
5949enum class NodeType { INTER, FAIL, PARSE };
6050
6151struct Node {
@@ -76,6 +66,23 @@ struct Node {
7666 type(node_type) {}
7767};
7868
69+ class Sparser {
70+ public:
71+ explicit Sparser (std::unique_ptr<JsonQueryDriver>&& json_query_driver = {})
72+ : json_query_driver_(std::move(json_query_driver)) {}
73+
74+ void Run (const std::string& input_path, const JsonQuery& json_query);
75+
76+ EstimationResult Calibrate (const std::vector<std::string_view>& input, const JsonQuery& json_query,
77+ const RawFilterData& rf_data);
78+ void SearchCascade (const std::vector<std::string_view>& input, const JsonQuery& json_query,
79+ const RawFilterData& rf_data, const std::shared_ptr<Node>);
80+ void SearchNaive (const std::vector<std::string_view>& input, const JsonQuery& json_query);
81+
82+ private:
83+ std::unique_ptr<JsonQueryDriver> json_query_driver_;
84+ };
85+
7986class CascadeBuilder {
8087 public:
8188 CascadeBuilder (const PredicateDisjunction& disjunction, const RawFilterData& raw_filter_data)
@@ -88,8 +95,8 @@ class CascadeBuilder {
8895 std::shared_ptr<Node> parse_node = std::make_shared<Node>(0 , 0 , 0 , nullptr , nullptr , NodeType::PARSE);
8996 const PredicateDisjunction& disjunction_;
9097 const RawFilterData& rf_data_;
91- std::bitset<kMaxDepth > used_conjunctions_;
92- std::array<std::array<std::bitset<10 >, kMaxDepth >, kMaxDepth > used_predicates_; // TODO: Add correct dimensions
98+ std::bitset<kMaxConj > used_conjunctions_;
99+ std::array<std::array<std::bitset<kMaxRfsInPred >, kMaxPred >, kMaxConj > used_rfs_;
93100
94101 std::vector<std::shared_ptr<Node>> HandleFail (const size_t current_depth);
95102 std::vector<std::shared_ptr<Node>> HandleSuccess (const size_t current_depth, const size_t conjunction_idx);
@@ -112,4 +119,8 @@ class CascadeEvaluator {
112119 void EvaluateNodeRec (std::shared_ptr<Node> node, std::bitset<kSampleSize > cumulative_bitset);
113120};
114121
122+ static inline size_t GetFlatIdx (size_t conj_idx, size_t pred_idx, size_t rf_idx) {
123+ return conj_idx * kMaxPred * kMaxRfsInPred + pred_idx * kMaxRfsInPred + rf_idx;
124+ }
125+
115126#endif // SPARSER_H_
0 commit comments