1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_CRUSH_COMPILER_H
5 #define CEPH_CRUSH_COMPILER_H
7 #include "crush/CrushWrapper.h"
8 #include "crush/grammar.h"
21 DCB_STATE_IN_PROGRESS
= 0,
25 int decompile_weight_set_weights(crush_weight_set weight_set
,
27 int decompile_weight_set(crush_weight_set
*weight_set
,
30 int decompile_choose_arg(crush_choose_arg
*arg
,
33 int decompile_ids(int *ids
,
36 int decompile_choose_arg_map(crush_choose_arg_map arg_map
,
38 int decompile_choose_args(const std::pair
<const long unsigned int, crush_choose_arg_map
> &i
,
40 int decompile_bucket_impl(int i
, ostream
&out
);
41 int decompile_bucket(int cur
,
42 std::map
<int, dcb_state_t
>& dcb_states
,
46 typedef char const* iterator_t
;
47 typedef tree_match
<iterator_t
> parse_tree_match_t
;
48 typedef parse_tree_match_t::tree_iterator iter_t
;
49 typedef parse_tree_match_t::node_t node_t
;
51 map
<string
, int> item_id
;
52 map
<int, string
> id_item
;
53 map
<int, unsigned> item_weight
;
54 map
<string
, int> type_id
;
55 map
<string
, int> rule_id
;
57 string
string_node(node_t
&node
);
58 int int_node(node_t
&node
);
59 float float_node(node_t
&node
);
61 int parse_tunable(iter_t
const& i
);
62 int parse_device(iter_t
const& i
);
63 int parse_bucket_type(iter_t
const& i
);
64 int parse_bucket(iter_t
const& i
);
65 int parse_rule(iter_t
const& i
);
66 int parse_weight_set_weights(iter_t
const& i
, int bucket_id
, crush_weight_set
*weight_set
);
67 int parse_weight_set(iter_t
const& i
, int bucket_id
, crush_choose_arg
*arg
);
68 int parse_choose_arg_ids(iter_t
const& i
, int bucket_id
, crush_choose_arg
*args
);
69 int parse_choose_arg(iter_t
const& i
, crush_choose_arg
*args
);
70 int parse_choose_args(iter_t
const& i
);
71 void find_used_bucket_ids(iter_t
const& i
);
72 int parse_crush(iter_t
const& i
);
73 void dump(iter_t
const& i
, int ind
=1);
74 string
consolidate_whitespace(string in
);
75 int adjust_bucket_item_place(iter_t
const &i
);
78 CrushCompiler(CrushWrapper
& c
, ostream
& eo
, int verbosity
=0)
79 : crush(c
), err(eo
), verbose(verbosity
),
80 unsafe_tunables(false) {}
83 void enable_unsafe_tunables() {
84 unsafe_tunables
= true;
87 int decompile(ostream
& out
);
88 int compile(istream
& in
, const char *infn
=0);