33#include "bertini2/nag_algorithms/common/config.hpp"
44 template<
typename Iterator,
typename Skipper>
45 struct ConfigSettingParser<Iterator, algorithm::TolerancesConfig, Skipper> : qi::grammar<Iterator, algorithm::TolerancesConfig(), Skipper>
49 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"config::TolerancesType")
51 namespace phx = boost::phoenix;
61 using boost::spirit::lexeme;
62 using boost::spirit::as_string;
63 using boost::spirit::ascii::no_case;
67 std::string newton_before_name =
"tracktolbeforeeg";
68 std::string newton_during_name =
"tracktolduringeg";
69 std::string final_tol_name =
"finaltol";
70 std::string path_trunc_name =
"pathtruncationthreshold";
73 root_rule_.name(
"config::Tolerances");
75 root_rule_ = ((newton_before_endgame_[phx::bind( [
this](algorithm::TolerancesConfig & S, T l)
77 S.newton_before_endgame = l;
79 ^ newton_during_endgame_[phx::bind( [
this](algorithm::TolerancesConfig & S, T num)
81 S.newton_during_endgame = num;
83 ^ final_tol_[phx::bind( [
this](algorithm::TolerancesConfig & S, T num)
85 S.final_tolerance = num;
87 ^ path_trunc_threshold_[phx::bind( [
this](algorithm::TolerancesConfig & S, T num)
89 S.path_truncation_threshold = num;
96 all_names_ = (no_case[newton_before_name] >>
':') | (no_case[newton_during_name] >>
':')| (no_case[final_tol_name] >>
':')
97 | (no_case[path_trunc_name] >>
':');
99 newton_before_endgame_.name(
"newton_before_endgame_");
100 newton_before_endgame_ = *(char_ - all_names_) >> (no_case[newton_before_name] >>
':')
101 >> mpfr_rules.number_string_[phx::bind( [
this](T & num, std::string str)
103 num = bertini::NumTraits<T>::FromString(str);
104 }, _val, _1 )] >>
';';
106 newton_during_endgame_.name(
"newton_during_endgame_");
107 newton_during_endgame_ = *(char_ - all_names_) >> (no_case[newton_during_name] >>
':')
108 >> mpfr_rules.number_string_[phx::bind( [
this](T & num, std::string str)
110 num = bertini::NumTraits<T>::FromString(str);
111 }, _val, _1 )] >>
';';
113 final_tol_.name(
"final_tol_");
114 final_tol_ = *(char_ - all_names_) >> (no_case[final_tol_name] >>
':')
115 >> mpfr_rules.number_string_[phx::bind( [
this](T & num, std::string str)
117 num = bertini::NumTraits<T>::FromString(str);
118 }, _val, _1 )] >>
';';
120 path_trunc_threshold_.name(
"path_trunc_threshold_");
121 path_trunc_threshold_ = *(char_ - all_names_) >> (no_case[path_trunc_name] >>
':')
122 >> mpfr_rules.number_string_[phx::bind( [
this](T & num, std::string str)
124 num = bertini::NumTraits<T>::FromString(str);
125 }, _val, _1 )] >>
';';
127 no_setting_.name(
"no_setting_");
128 no_setting_ = *(char_ - all_names_);
130 no_decl_.name(
"no_decl_");
138 using phx::construct;
139 using namespace qi::labels;
140 qi::on_error<qi::fail>
143 val(
"config parser could not complete parsing. Expecting ")<<
146 construct<std::string>(_3,_2)<<
156 qi::rule<Iterator, algorithm::TolerancesConfig(), ascii::space_type > root_rule_;
157 qi::rule<Iterator, T(), ascii::space_type > newton_before_endgame_, newton_during_endgame_,
158 final_tol_, path_trunc_threshold_;
159 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
160 rules::LongNum<Iterator> mpfr_rules;
174 template<
typename Iterator,
typename ComplexT,
typename Skipper>
175 struct ConfigSettingParser<Iterator, algorithm::ZeroDimConfig<ComplexT>, Skipper> : qi::grammar<Iterator, algorithm::ZeroDimConfig<ComplexT>(), Skipper>
178 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"algorithm::ZeroDimConfig")
180 namespace phx = boost::phoenix;
190 using boost::spirit::lexeme;
191 using boost::spirit::as_string;
192 using boost::spirit::ascii::no_case;
196 std::string init_prec_name =
"initialprec";
197 std::string max_cross_resolve_name =
"maxcrossedpathresolves";
198 std::string start_time_name =
"starttime";
199 std::string endgame_boundary_name =
"endgamebdry";
200 std::string target_time_name =
"targettime";
201 std::string path_variable_name_name =
"pathvarname";
204 root_rule_.name(
"config::ZeroDim");
206 root_rule_ = ((init_prec_[phx::bind( [
this](algorithm::ZeroDimConfig<ComplexT> & S,
int num)
208 S.initial_ambient_precision = num;
210 ^ path_variable_name_[phx::bind( [
this](algorithm::ZeroDimConfig<ComplexT> & S, std::string omnom)
212 S.path_variable_name = omnom;
214 ^ max_cross_resolve_[phx::bind( [
this](algorithm::ZeroDimConfig<ComplexT> & S,
int num)
216 S.max_num_crossed_path_resolve_attempts = num;
218 ^ start_time_[phx::bind( [
this](algorithm::ZeroDimConfig<ComplexT> & S, ComplexT num)
222 ^ endgame_boundary_[phx::bind( [
this](algorithm::ZeroDimConfig<ComplexT> & S, ComplexT num)
224 S.endgame_boundary = num;
226 ^ target_time_[phx::bind( [
this](algorithm::ZeroDimConfig<ComplexT> & S, ComplexT num)
231 >> -no_setting_) | no_setting_;
233 all_names_ = (no_case[init_prec_name] >>
':') |
234 (no_case[target_time_name] >>
':') |
235 (no_case[path_variable_name_name] >>
':') |
236 (no_case[max_cross_resolve_name] >>
':') |
237 (no_case[start_time_name] >>
':') |
238 (no_case[endgame_boundary_name] >>
':')
242 auto str_to_ComplexT = [
this](ComplexT & num, std::string str)
244 num = bertini::NumTraits<ComplexT>::FromString(str);
249 valid_variable_name_.name(
"valid_variable_name_");
250 valid_variable_name_ = +qi::alpha >> *(qi::alnum | qi::char_(
"[]_") );
253 path_variable_name_.name(
"path_variable_name_");
254 path_variable_name_ = *(char_ - all_names_) >> (no_case[path_variable_name_name] >>
':') >> valid_variable_name_ >>
';';
256 init_prec_.name(
"init_prec_");
257 init_prec_ = *(char_ - all_names_) >> (no_case[init_prec_name] >>
':') >> qi::int_[_val=_1] >>
';';
259 max_cross_resolve_.name(
"max_cross_resolve_");
260 max_cross_resolve_ = *(char_ - all_names_) >> (no_case[max_cross_resolve_name] >>
':') >> qi::int_[_val=_1] >>
';';
262 start_time_.name(
"start_time_");
263 start_time_ = *(char_ - all_names_) >> (no_case[start_time_name] >>
':')
264 >> mpfr_rules.number_string_[phx::bind( str_to_ComplexT, _val, _1 )] >>
';';
266 endgame_boundary_.name(
"endgame_boundary_");
267 endgame_boundary_ = *(char_ - all_names_) >> (no_case[endgame_boundary_name] >>
':')
268 >> mpfr_rules.number_string_[phx::bind( str_to_ComplexT, _val, _1 )] >>
';';
270 target_time_.name(
"target_time_");
271 target_time_ = *(char_ - all_names_) >> (no_case[target_time_name] >>
':')
272 >> mpfr_rules.number_string_[phx::bind( str_to_ComplexT, _val, _1 )] >>
';';
276 no_setting_.name(
"no_setting_");
277 no_setting_ = *(char_ - all_names_);
279 no_decl_.name(
"no_decl_");
286 using phx::construct;
287 using namespace qi::labels;
288 qi::on_error<qi::fail>
291 val(
"config parser could not complete parsing. Expecting ")<<
294 construct<std::string>(_3,_2)<<
304 qi::rule<Iterator, algorithm::ZeroDimConfig<ComplexT>(), ascii::space_type > root_rule_;
306 qi::rule<Iterator, ComplexT(), ascii::space_type > start_time_, target_time_, endgame_boundary_;
307 qi::rule<Iterator, int(), ascii::space_type > init_prec_, max_cross_resolve_;
308 qi::rule<Iterator, std::string(), ascii::space_type > valid_variable_name_, path_variable_name_;
311 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
312 rules::LongNum<Iterator> mpfr_rules;
318 template<
typename Iterator,
typename Skipper>
319 struct ConfigSettingParser<Iterator, algorithm::MidPathConfig, Skipper> : qi::grammar<Iterator, algorithm::MidPathConfig(), Skipper>
323 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"config::MidPath")
325 namespace phx = boost::phoenix;
335 using boost::spirit::lexeme;
336 using boost::spirit::as_string;
337 using boost::spirit::ascii::no_case;
341 std::string same_point_tol_name =
"midpathtol";
344 root_rule_.name(
"config::MidPath");
346 root_rule_ = ((same_point_tol_[phx::bind( [
this](algorithm::MidPathConfig & S, T num)
348 S.same_point_tolerance = num;
351 >> -no_setting_) | no_setting_;
353 all_names_ = (no_case[same_point_tol_name] >>
':');
355 auto str_to_T = [
this](T & num, std::string str)
357 num = bertini::NumTraits<T>::FromString(str);
361 same_point_tol_.name(
"same_point_tol_");
362 same_point_tol_ = *(char_ - all_names_) >> (no_case[same_point_tol_name] >>
':')
363 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
366 no_setting_.name(
"no_setting_");
367 no_setting_ = *(char_ - all_names_);
369 no_decl_.name(
"no_decl_");
376 using phx::construct;
377 using namespace qi::labels;
378 qi::on_error<qi::fail>
381 val(
"config parser could not complete parsing. Expecting ")<<
384 construct<std::string>(_3,_2)<<
394 qi::rule<Iterator, algorithm::MidPathConfig(), ascii::space_type > root_rule_;
395 qi::rule<Iterator, T(), ascii::space_type > same_point_tol_;
396 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
397 rules::LongNum<Iterator> mpfr_rules;
402 template<
typename Iterator,
typename Skipper>
403 struct ConfigSettingParser<Iterator, algorithm::AutoRetrackConfig, Skipper> : qi::grammar<Iterator, algorithm::AutoRetrackConfig(), Skipper>
407 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"config::AutoRetrack")
409 namespace phx = boost::phoenix;
419 using boost::spirit::lexeme;
420 using boost::spirit::as_string;
421 using boost::spirit::ascii::no_case;
425 std::string decrease_factor_name =
"retracktolfactor";
428 root_rule_.name(
"config::AutoRetrack");
430 root_rule_ = ((decrease_factor[phx::bind( [
this](algorithm::AutoRetrackConfig & S, T num)
432 S.midpath_decrease_tolerance_factor = num;
435 >> -no_setting_) | no_setting_;
437 all_names_ = (no_case[decrease_factor_name] >>
':');
439 auto str_to_T = [
this](T & num, std::string str)
441 num = bertini::NumTraits<T>::FromString(str);
445 decrease_factor.name(
"decrease_factor");
446 decrease_factor = *(char_ - all_names_) >> (no_case[decrease_factor_name] >>
':')
447 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
450 no_setting_.name(
"no_setting_");
451 no_setting_ = *(char_ - all_names_);
453 no_decl_.name(
"no_decl_");
460 using phx::construct;
461 using namespace qi::labels;
462 qi::on_error<qi::fail>
465 val(
"config parser could not complete parsing. Expecting ")<<
468 construct<std::string>(_3,_2)<<
478 qi::rule<Iterator, algorithm::AutoRetrackConfig(), ascii::space_type > root_rule_;
479 qi::rule<Iterator, T(), ascii::space_type > decrease_factor;
480 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
481 rules::LongNum<Iterator> mpfr_rules;
486 template<
typename Iterator,
typename Skipper>
487 struct ConfigSettingParser<Iterator, algorithm::SharpeningConfig, Skipper> : qi::grammar<Iterator, algorithm::SharpeningConfig(), Skipper>
491 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"algorithm::config::Sharpening")
493 namespace phx = boost::phoenix;
503 using boost::spirit::lexeme;
504 using boost::spirit::as_string;
505 using boost::spirit::ascii::no_case;
509 std::string sharpen_digits_name =
"sharpendigits";
510 std::string func_res_tol_name =
"functiontolerance";
511 std::string ratio_tol_name =
"ratiotolerance";
514 root_rule_.name(
"config::Sharpening");
516 root_rule_ = ((sharpen_digits_[phx::bind( [
this](algorithm::SharpeningConfig & S,
unsigned num)
518 S.sharpendigits = num;
520 ^ func_res_tol_[phx::bind( [
this](algorithm::SharpeningConfig & S, T num)
522 S.function_residual_tolerance = num;
524 ^ ratio_tol_[phx::bind( [
this](algorithm::SharpeningConfig & S, T num)
526 S.ratio_tolerance = num;
529 >> -no_setting_) | no_setting_;
531 all_names_ = (no_case[sharpen_digits_name] >>
':') |
532 (no_case[func_res_tol_name] >>
':') |
533 (no_case[ratio_tol_name] >>
':')
537 auto str_to_T = [
this](T & num, std::string str)
539 num = bertini::NumTraits<T>::FromString(str);
543 func_res_tol_.name(
"func_res_tol_");
544 func_res_tol_ = *(char_ - all_names_) >> (no_case[func_res_tol_name] >>
':')
545 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
547 ratio_tol_.name(
"ratio_tol_");
548 ratio_tol_ = *(char_ - all_names_) >> (no_case[ratio_tol_name] >>
':')
549 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
551 sharpen_digits_.name(
"sharpen_digits_");
552 sharpen_digits_ = *(char_ - all_names_) >> (no_case[sharpen_digits_name] >>
':') >> qi::uint_[_val=_1] >>
';';
556 no_setting_.name(
"no_setting_");
557 no_setting_ = *(char_ - all_names_);
559 no_decl_.name(
"no_decl_");
566 using phx::construct;
567 using namespace qi::labels;
568 qi::on_error<qi::fail>
571 val(
"config parser could not complete parsing. Expecting ")<<
574 construct<std::string>(_3,_2)<<
584 qi::rule<Iterator, algorithm::SharpeningConfig(), ascii::space_type > root_rule_;
586 qi::rule<Iterator, T(), ascii::space_type > func_res_tol_, ratio_tol_;
587 qi::rule<Iterator,
unsigned int(), ascii::space_type > sharpen_digits_;
589 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
590 rules::LongNum<Iterator> mpfr_rules;
596 template<
typename Iterator,
typename Skipper>
597 struct ConfigSettingParser<Iterator, algorithm::RegenerationConfig, Skipper> : qi::grammar<Iterator, algorithm::RegenerationConfig(), Skipper>
601 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"algorithm::config::Regeneration")
603 namespace phx = boost::phoenix;
613 using boost::spirit::lexeme;
614 using boost::spirit::as_string;
615 using boost::spirit::ascii::no_case;
619 std::string regen_remove_inf_name =
"regenremoveinf";
620 std::string slice_before_name =
"slicetolbeforeeg";
621 std::string slice_during_name =
"slicetolduringeg";
622 std::string slice_final_name =
"slicefinaltol";
623 std::string higher_dim_check_name =
"regenhigherdimtest";
624 std::string start_level_name =
"regenstartlevel";
627 root_rule_.name(
"config::Regeneration");
629 root_rule_ = ((regen_remove_inf_[phx::bind( [
this](algorithm::RegenerationConfig & S,
int num)
631 S.remove_infinite_endpoints =
static_cast<bool>(num);
633 ^ higher_dim_check_[phx::bind( [
this](algorithm::RegenerationConfig & S,
int num)
635 S.higher_dimension_check =
static_cast<bool>(num);
637 ^ start_level_[phx::bind( [
this](algorithm::RegenerationConfig & S,
int num)
641 ^ slice_before_[phx::bind( [
this](algorithm::RegenerationConfig & S, T num)
643 S.newton_before_endgame = num;
645 ^ slice_during_[phx::bind( [
this](algorithm::RegenerationConfig & S, T num)
647 S.newton_during_endgame = num;
649 ^ slice_final_[phx::bind( [
this](algorithm::RegenerationConfig & S, T num)
651 S.final_tolerance = num;
654 >> -no_setting_) | no_setting_;
656 all_names_ = (no_case[regen_remove_inf_name] >>
':') |
657 (no_case[higher_dim_check_name] >>
':') |
658 (no_case[start_level_name] >>
':') |
659 (no_case[slice_before_name] >>
':') |
660 (no_case[slice_during_name] >>
':') |
661 (no_case[slice_final_name] >>
':')
665 auto str_to_T = [
this](T & num, std::string str)
667 num = bertini::NumTraits<T>::FromString(str);
671 higher_dim_check_.name(
"higher_dim_check_");
672 higher_dim_check_ = *(char_ - all_names_) >> (no_case[higher_dim_check_name] >>
':') >> qi::int_[_val=_1] >>
';';
674 start_level_.name(
"start_level_");
675 start_level_ = *(char_ - all_names_) >> (no_case[start_level_name] >>
':') >> qi::int_[_val=_1] >>
';';
677 regen_remove_inf_.name(
"regen_remove_inf_");
678 regen_remove_inf_ = *(char_ - all_names_) >> (no_case[regen_remove_inf_name] >>
':') >> qi::int_[_val=_1] >>
';';
682 slice_before_.name(
"slice_before_");
683 slice_before_ = *(char_ - all_names_) >> (no_case[slice_before_name] >>
':')
684 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
686 slice_during_.name(
"slice_during_");
687 slice_during_ = *(char_ - all_names_) >> (no_case[slice_during_name] >>
':')
688 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
690 slice_final_.name(
"slice_final_");
691 slice_final_ = *(char_ - all_names_) >> (no_case[slice_final_name] >>
':')
692 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
696 no_setting_.name(
"no_setting_");
697 no_setting_ = *(char_ - all_names_);
699 no_decl_.name(
"no_decl_");
706 using phx::construct;
707 using namespace qi::labels;
708 qi::on_error<qi::fail>
711 val(
"config parser could not complete parsing. Expecting ")<<
714 construct<std::string>(_3,_2)<<
724 qi::rule<Iterator, algorithm::RegenerationConfig(), ascii::space_type > root_rule_;
726 qi::rule<Iterator, T(), ascii::space_type > slice_before_, slice_during_, slice_final_;
727 qi::rule<Iterator, int(), ascii::space_type > regen_remove_inf_, start_level_, higher_dim_check_;
729 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
730 rules::LongNum<Iterator> mpfr_rules;
737 template<
typename Iterator,
typename Skipper>
738 struct ConfigSettingParser<Iterator, algorithm::PostProcessingConfig, Skipper> : qi::grammar<Iterator, algorithm::PostProcessingConfig(), Skipper>
742 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"algorithm::PostProcessingConfig")
744 namespace phx = boost::phoenix;
754 using boost::spirit::lexeme;
755 using boost::spirit::as_string;
756 using boost::spirit::ascii::no_case;
760 std::string real_thresh_name =
"imagthreshold";
761 std::string endpoint_finite_name =
"endpointfinitethreshold";
762 std::string same_point_name =
"endpointsamethreshold";
766 root_rule_.name(
"config::PostProcessing");
768 root_rule_ = ((real_threshold_[phx::bind( [
this](algorithm::PostProcessingConfig & S, T num)
770 S.real_threshold = num;
772 ^ endpoint_finite_[phx::bind( [
this](algorithm::PostProcessingConfig & S, T num)
774 S.endpoint_finite_threshold = num;
776 ^ same_point_[phx::bind( [
this](algorithm::PostProcessingConfig & S, T num)
778 S.same_point_tolerance = num;
781 >> -no_setting_) | no_setting_;
783 all_names_ = (no_case[real_thresh_name] >>
':') |
784 (no_case[endpoint_finite_name] >>
':') |
785 (no_case[same_point_name] >>
':')
789 auto str_to_T = [
this](T & num, std::string str)
791 num = bertini::NumTraits<T>::FromString(str);
794 real_threshold_.name(
"real_thresh_");
795 real_threshold_ = *(char_ - all_names_) >> (no_case[real_thresh_name] >>
':')
796 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
798 endpoint_finite_.name(
"endpoint_finite_");
799 endpoint_finite_ = *(char_ - all_names_) >> (no_case[endpoint_finite_name] >>
':')
800 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
802 same_point_.name(
"same_point_");
803 same_point_ = *(char_ - all_names_) >> (no_case[same_point_name] >>
':')
804 >> mpfr_rules.number_string_[phx::bind( str_to_T, _val, _1 )] >>
';';
808 no_setting_.name(
"no_setting_");
809 no_setting_ = *(char_ - all_names_);
811 no_decl_.name(
"no_decl_");
818 using phx::construct;
819 using namespace qi::labels;
820 qi::on_error<qi::fail>
823 val(
"config parser could not complete parsing. Expecting ")<<
826 construct<std::string>(_3,_2)<<
836 qi::rule<Iterator, algorithm::PostProcessingConfig(), ascii::space_type > root_rule_;
838 qi::rule<Iterator, T(), ascii::space_type > real_threshold_, endpoint_finite_, same_point_;
840 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
841 rules::LongNum<Iterator> mpfr_rules;
849 template<
typename Iterator,
typename Skipper>
850 struct ConfigSettingParser<Iterator, algorithm::classic::AlgoChoice, Skipper> : qi::grammar<Iterator, algorithm::classic::AlgoChoice(), Skipper>
854 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"config::classic::AlgoChoice")
856 namespace phx = boost::phoenix;
866 using boost::spirit::lexeme;
867 using boost::spirit::as_string;
868 using boost::spirit::ascii::no_case;
870 tracktype_.add(
"-4", algorithm::classic::AlgoChoice::EvalFunctions);
871 tracktype_.add(
"-3", algorithm::classic::AlgoChoice::EvalFunctionJacobian);
872 tracktype_.add(
"-2", algorithm::classic::AlgoChoice::NewtonIteration);
873 tracktype_.add(
"-1", algorithm::classic::AlgoChoice::NewtonIterationCondNum);
874 tracktype_.add(
"0", algorithm::classic::AlgoChoice::ZeroDim);
875 tracktype_.add(
"1", algorithm::classic::AlgoChoice::NID);
876 tracktype_.add(
"2", algorithm::classic::AlgoChoice::SampleComponent);
877 tracktype_.add(
"3", algorithm::classic::AlgoChoice::MembershipTest);
878 tracktype_.add(
"4", algorithm::classic::AlgoChoice::ExtractWitnessSet);
879 tracktype_.add(
"5", algorithm::classic::AlgoChoice::WitnessSetProjection);
880 tracktype_.add(
"6", algorithm::classic::AlgoChoice::IsosingularStab);
882 std::string setting_name =
"tracktype";
885 root_rule_.name(
"config::classic::AlgoChoice");
887 root_rule_ = config_name_[_val = _1] >> -no_setting_
888 | no_setting_[_val = algorithm::classic::AlgoChoice::ZeroDim];
890 config_name_.name(
"tracktype_");
891 config_name_ = *(char_ - (no_case[setting_name] >>
':')) >> (no_case[setting_name] >>
':') >> tracktype_[_val = _1] >>
';';
893 no_setting_.name(
"no_setting_");
894 no_setting_ = *(char_ - no_case[setting_name]);
896 no_decl_.name(
"no_decl_");
903 using phx::construct;
904 using namespace qi::labels;
905 qi::on_error<qi::fail>
908 val(
"config parser could not complete parsing. Expecting ")<<
911 construct<std::string>(_3,_2)<<
921 qi::rule<Iterator, algorithm::classic::AlgoChoice(), ascii::space_type > root_rule_, config_name_;
922 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_;
924 qi::symbols<char,algorithm::classic::AlgoChoice> tracktype_;
Provides the base type for config settings parsers.