@@ -35,7 +35,7 @@ void add_rac_constructor(PybindClass& cls)
3535} // namespace details
3636
3737
38- // containers names
38+ // containers names for sparse
3939namespace RAC_names {
4040 constexpr char INT_VECTOR_NAME[] = " IntVector" ,
4141 INT16_VECTOR_NAME[] = " Int16Vector" ;
@@ -80,7 +80,8 @@ struct add_rmq_sparse_table_functor {
8080 std::string key = std::string (t_min ? " Min" : " Max" ) + " _in_" + rac_name;
8181
8282 m.attr (" rmq_sparse_tables" ).attr (" __setitem__" )(key, cls);
83- m.attr (" all_rmq_classes" ).attr (" append" )(cls);
83+ m.attr ((std::string (" all_range_" ) + (t_min ? " min" : " max" ) + " _classes" ).c_str ())
84+ .attr (" append" )(cls);
8485
8586 return cls;
8687 }
@@ -111,7 +112,7 @@ struct add_rmq_sada_functor {
111112 .def (" __call__" ,
112113 (size_type (RMQClass::*)(size_type, size_type) const )& RMQClass::operator (),
113114 (std::string (" Returns an index of the " ) + (t_min ? " minimal" : " maximal" ) +
114- " value on the segment [l,r]." ).c_str ());;
115+ " value on the segment [l,r]." ).c_str ());;
115116
116117 detail::add_rac_constructor<decltype (cls), t_rac...>(cls);
117118
@@ -122,7 +123,8 @@ struct add_rmq_sada_functor {
122123 cls.doc () = doc;
123124
124125 m.attr (" rmq_sada" ).attr (" __setitem__" )(t_min ? " Min" : " Max" , cls);
125- m.attr (" all_rmq_classes" ).attr (" append" )(cls);
126+ m.attr ((std::string (" all_range_" ) + (t_min ? " min" : " max" ) + " _classes" ).c_str ())
127+ .attr (" append" )(cls);
126128
127129 return cls;
128130 }
@@ -165,7 +167,8 @@ struct add_rmq_sct_functor {
165167 cls.doc () = doc;
166168
167169 m.attr (" rmq_sct" ).attr (" __setitem__" )(t_min ? " Min" : " Max" , cls);
168- m.attr (" all_rmq_classes" ).attr (" append" )(cls);
170+ m.attr ((std::string (" all_range_" ) + (t_min ? " min" : " max" ) + " _classes" ).c_str ())
171+ .attr (" append" )(cls);
169172
170173 return cls;
171174 }
@@ -190,12 +193,21 @@ using general_rmq_sct = py::class_<
190193 typename sdsl::range_maximum_sct<>::type>::type>;
191194
192195
193- inline auto add_rmq_classes (py::module & m)
196+ template <typename ... Ts>
197+ static
198+ auto make_rmq_params (const std::tuple<py::class_<Ts>&...>& params) {
199+ return std::tuple<std::tuple<std::tuple<Ts...>, std::integral_constant<bool , true >>,
200+ std::tuple<std::tuple<Ts...>, std::integral_constant<bool , false >>>();
201+ }
202+
203+
204+ inline auto add_rmq_classes (py::module & m, auto params)
194205{
195206 m.attr (" rmq_sparse_tables" ) = py::dict ();
196207 m.attr (" rmq_sada" ) = py::dict ();
197208 m.attr (" rmq_sct" ) = py::dict ();
198- m.attr (" all_rmq_classes" ) = py::list ();
209+ m.attr (" all_range_min_classes" ) = py::list ();
210+ m.attr (" all_range_max_classes" ) = py::list ();
199211
200212 using rmq_support_sparse_table_params = std::tuple<
201213 std::tuple<sdsl::int_vector<>,
@@ -212,25 +224,11 @@ inline auto add_rmq_classes(py::module& m)
212224 std::integral_constant<bool , false >>
213225 >;
214226
215- using rmq_sada_params = std::tuple<
216- std::tuple<std::tuple<sdsl::int_vector<>, sdsl::int_vector<16 >>,
217- std::integral_constant<bool , true >>,
218- std::tuple<std::tuple<sdsl::int_vector<>, sdsl::int_vector<16 >>,
219- std::integral_constant<bool , false >>
220- >;
221-
222- using rmq_sct_params = std::tuple<
223- std::tuple<std::tuple<sdsl::int_vector<>, sdsl::int_vector<16 >>,
224- std::integral_constant<bool , true >>,
225- std::tuple<std::tuple<sdsl::int_vector<>, sdsl::int_vector<16 >>,
226- std::integral_constant<bool , false >>
227- >;
228-
229227 auto rmq_sparse_tables = for_each_in_tuple (rmq_support_sparse_table_params (),
230228 add_rmq_sparse_table_functor (m, doc_rmq_sparse_table));
231- auto rmq_sada_classes = for_each_in_tuple (rmq_sada_params ( ),
229+ auto rmq_sada_classes = for_each_in_tuple (make_rmq_params (params ),
232230 add_rmq_sada_functor (m, doc_rmq_sada));
233- auto rmq_sct_classes = for_each_in_tuple (rmq_sct_params ( ),
231+ auto rmq_sct_classes = for_each_in_tuple (make_rmq_params (params ),
234232 add_rmq_sct_functor (m, doc_rmq_sct));
235233
236234 return std::make_tuple (rmq_sparse_tables, rmq_sada_classes, rmq_sct_classes);
0 commit comments