45 template<
typename Iterator,
typename Skipper>
46 struct ConfigSettingParser<Iterator, bertini::endgame::SecurityConfig, Skipper> : qi::grammar<Iterator, bertini::endgame::SecurityConfig(), Skipper>
50 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"SecurityConfig")
53 namespace phx = boost::phoenix;
63 using boost::spirit::lexeme;
64 using boost::spirit::as_string;
65 using boost::spirit::ascii::no_case;
69 std::string level_name =
"securitylevel";
70 std::string maxnorm_name =
"securitymaxnorm";
73 root_rule_.name(
"config::Security");
75 root_rule_ = ((security_level_[phx::bind( [
this](bertini::endgame::SecurityConfig & S,
int l)
79 ^ security_max_norm_[phx::bind( [
this](bertini::endgame::SecurityConfig & S, T norm)
83 >> -no_setting_) | no_setting_;
85 all_names_ = (no_case[level_name] >>
':') | (no_case[maxnorm_name] >>
':');
87 security_level_.name(
"security_level_");
88 security_level_ = *(char_ - all_names_) >> (no_case[level_name] >>
':') >> qi::int_[_val = _1] >>
';';
90 security_max_norm_.name(
"security_max_norm_");
91 security_max_norm_ = *(char_ - all_names_) >> (no_case[maxnorm_name] >>
':')
92 >> mpfr_rules.number_string_[phx::bind( [
this](T & num, std::string str)
94 num = bertini::NumTraits<T>::FromString(str);
95 }, _val, _1 )] >>
';';
97 no_setting_.name(
"no_setting_");
98 no_setting_ = *(char_ - all_names_);
100 no_decl_.name(
"no_decl_");
107 using phx::construct;
108 using namespace qi::labels;
109 qi::on_error<qi::fail>
112 val(
"config parser could not complete parsing. Expecting ")<<
115 construct<std::string>(_3,_2)<<
125 qi::rule<Iterator, bertini::endgame::SecurityConfig(), ascii::space_type > root_rule_;
126 qi::rule<Iterator, int(), ascii::space_type > security_level_;
127 qi::rule<Iterator, T(), ascii::space_type > security_max_norm_;
128 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
129 rules::LongNum<Iterator> mpfr_rules;
142 template<
typename Iterator,
typename Skipper>
143 struct ConfigSettingParser<Iterator, bertini::endgame::EndgameConfig, Skipper> : qi::grammar<Iterator, bertini::endgame::EndgameConfig(), Skipper>
146 using R = mpq_rational;
148 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"EndgameConfig")
150 namespace phx = boost::phoenix;
160 using boost::spirit::lexeme;
161 using boost::spirit::as_string;
162 using boost::spirit::ascii::no_case;
166 std::string samplefactor_name =
"samplefactor";
167 std::string numpoints_name =
"numsamplepoints";
168 std::string mintrack_name =
"nbhdradius";
171 root_rule_.name(
"config::Endgame");
173 root_rule_ = ((sample_factor_[phx::bind( [
this](bertini::endgame::EndgameConfig & S, R num)
175 S.sample_factor = num;
177 ^ min_track_[phx::bind( [
this](bertini::endgame::EndgameConfig & S, T num)
179 S.min_track_time = num;
181 ^ num_sample_[phx::bind( [
this](bertini::endgame::EndgameConfig & S,
unsigned num)
183 S.num_sample_points = num;
190 all_names_ = (no_case[samplefactor_name] >>
':') | (no_case[numpoints_name] >>
':')| (no_case[mintrack_name] >>
':');
192 sample_factor_.name(
"sample_factor_");
193 sample_factor_ = *(char_ - all_names_) >> (no_case[samplefactor_name] >>
':')
194 >> mpfr_rules.rational[phx::bind( [
this](R & num, std::string str)
196 num = bertini::NumTraits<double>::FromString(str);
197 }, _val, _1 )] >>
';';
199 min_track_.name(
"min_track_");
200 min_track_ = *(char_ - all_names_) >> (no_case[mintrack_name] >>
':')
201 >> mpfr_rules.number_string_[phx::bind( [
this](T & num, std::string str)
203 num = bertini::NumTraits<T>::FromString(str);
204 }, _val, _1 )] >>
';';
206 num_sample_.name(
"num_sample_");
207 num_sample_ = *(char_ - all_names_) >> (no_case[numpoints_name] >>
':')
208 >> qi::uint_[_val=_1] >>
';';
210 no_setting_.name(
"no_setting_");
211 no_setting_ = *(char_ - all_names_);
213 no_decl_.name(
"no_decl_");
221 using phx::construct;
222 using namespace qi::labels;
223 qi::on_error<qi::fail>
226 val(
"config parser could not complete parsing. Expecting ")<<
229 construct<std::string>(_3,_2)<<
239 qi::rule<Iterator, bertini::endgame::EndgameConfig(), ascii::space_type > root_rule_;
240 qi::rule<Iterator, R(), ascii::space_type > sample_factor_;
241 qi::rule<Iterator, T(), ascii::space_type > min_track_;
242 qi::rule<Iterator,
unsigned int(), ascii::space_type > num_sample_;
243 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
244 rules::LongNum<Iterator> mpfr_rules;
254 template<
typename Iterator,
typename Skipper>
255 struct ConfigSettingParser<Iterator, bertini::endgame::PowerSeriesConfig, Skipper> : qi::grammar<Iterator, bertini::endgame::PowerSeriesConfig(), Skipper>
259 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"bertini::endgame::PowerSeriesConfigType")
261 namespace phx = boost::phoenix;
271 using boost::spirit::lexeme;
272 using boost::spirit::as_string;
273 using boost::spirit::ascii::no_case;
277 std::string maxcycle_name =
"maxcyclenum";
280 root_rule_.name(
"bertini::endgame::PowerSeriesConfig");
282 root_rule_ = (max_cycle_[phx::bind( [
this](bertini::endgame::PowerSeriesConfig & S,
unsigned num)
284 S.max_cycle_number = num;
292 all_names_ = eps >> (no_case[maxcycle_name] >>
':');
294 max_cycle_.name(
"max_cycle_");
295 max_cycle_ = *(char_ - all_names_) >> (no_case[maxcycle_name] >>
':') >> qi::uint_[_val=_1] >>
';';
297 no_setting_.name(
"no_setting_");
298 no_setting_ = *(char_ - all_names_);
300 no_decl_.name(
"no_decl_");
308 using phx::construct;
309 using namespace qi::labels;
310 qi::on_error<qi::fail>
313 val(
"config parser could not complete parsing. Expecting ")<<
316 construct<std::string>(_3,_2)<<
326 qi::rule<Iterator, bertini::endgame::PowerSeriesConfig(), Skipper> root_rule_;
327 qi::rule<Iterator,
unsigned int(), ascii::space_type > max_cycle_;
328 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
338 template<
typename Iterator,
typename Skipper>
339 struct ConfigSettingParser<Iterator, bertini::endgame::CauchyConfig, Skipper> : qi::grammar<Iterator, bertini::endgame::CauchyConfig(), Skipper>
343 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"bertini::endgame::CauchyConfig")
345 namespace phx = boost::phoenix;
355 using boost::spirit::lexeme;
356 using boost::spirit::as_string;
357 using boost::spirit::ascii::no_case;
361 std::string cyclecutoff_name =
"cycletimecutoff";
362 std::string ratiocutoff_name =
"ratiotimecutoff";
365 root_rule_.name(
"config::Cauchy");
367 root_rule_ = ((cycle_cutoff_[phx::bind( [
this](bertini::endgame::CauchyConfig & S, T num)
369 S.cycle_cutoff_time = num;
371 ^ ratio_cutoff_[phx::bind( [
this](bertini::endgame::CauchyConfig & S, T num)
373 S.ratio_cutoff_time = num;
375 >> -no_setting_) | no_setting_;
377 all_names_ = (no_case[cyclecutoff_name] >>
':') | (no_case[ratiocutoff_name] >>
':');
379 cycle_cutoff_.name(
"cycle_cutoff_");
380 cycle_cutoff_ = *(char_ - all_names_) >> (no_case[cyclecutoff_name] >>
':')
381 >> mpfr_rules.number_string_[phx::bind( [
this](T & num, std::string str)
383 num = bertini::NumTraits<T>::FromString(str);
384 }, _val, _1 )] >>
';';
386 ratio_cutoff_.name(
"ratio_cutoff_");
387 ratio_cutoff_ = *(char_ - all_names_) >> (no_case[ratiocutoff_name] >>
':')
388 >> mpfr_rules.number_string_[phx::bind( [
this](T & num, std::string str)
390 num = bertini::NumTraits<T>::FromString(str);
391 }, _val, _1 )] >>
';';
393 no_setting_.name(
"no_setting_");
394 no_setting_ = *(char_ - all_names_);
396 no_decl_.name(
"no_decl_");
403 using phx::construct;
404 using namespace qi::labels;
405 qi::on_error<qi::fail>
408 val(
"config parser could not complete parsing. Expecting ")<<
411 construct<std::string>(_3,_2)<<
421 qi::rule<Iterator, bertini::endgame::CauchyConfig(), ascii::space_type > root_rule_;
422 qi::rule<Iterator, T(), ascii::space_type > cycle_cutoff_, ratio_cutoff_;
423 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
424 rules::LongNum<Iterator> mpfr_rules;
432 template<
typename Iterator,
typename Skipper>
433 struct ConfigSettingParser<Iterator, bertini::endgame::TrackBackConfig, Skipper> : qi::grammar<Iterator, bertini::endgame::TrackBackConfig(), Skipper>
437 ConfigSettingParser() : ConfigSettingParser::base_type(root_rule_,
"bertini::endgame::TrackBackConfig")
439 namespace phx = boost::phoenix;
449 using boost::spirit::lexeme;
450 using boost::spirit::as_string;
451 using boost::spirit::ascii::no_case;
455 std::string min_cycle_name =
"mincycletrackback";
456 std::string junk_removal_name =
"junkremovaltrackback";
457 std::string maxdepth_name =
"maxldtdepth";
459 root_rule_.name(
"bertini::endgame::TrackBackConfig");
461 root_rule_ = root_rule_ = ((min_cycle_[phx::bind( [
this](bertini::endgame::TrackBackConfig & S,
unsigned num)
463 S.minimum_cycle = num;
465 ^ junk_removal_[phx::bind( [
this](bertini::endgame::TrackBackConfig & S,
int num)
467 S.junk_removal_test =
static_cast<bool>(num);
469 ^ max_depth_[phx::bind( [
this](bertini::endgame::TrackBackConfig & S,
unsigned num)
471 S.max_depth_LDT = num;
474 >> -no_setting_) | no_setting_;
478 all_names_ = eps >> (no_case[min_cycle_name] >>
':') |
479 (no_case[junk_removal_name] >>
':') |
480 (no_case[maxdepth_name] >>
':');
482 min_cycle_.name(
"min_cycle_");
483 min_cycle_ = *(char_ - all_names_) >> (no_case[min_cycle_name] >>
':') >> qi::uint_[_val=_1] >>
';';
485 junk_removal_.name(
"junk_removal_");
486 junk_removal_ = *(char_ - all_names_) >> (no_case[junk_removal_name] >>
':') >> qi::int_[_val=_1] >>
';';
488 max_depth_.name(
"max_depth_");
489 max_depth_ = *(char_ - all_names_) >> (no_case[maxdepth_name] >>
':') >> qi::uint_[_val=_1] >>
';';
491 no_setting_.name(
"no_setting_");
492 no_setting_ = *(char_ - all_names_);
494 no_decl_.name(
"no_decl_");
502 using phx::construct;
503 using namespace qi::labels;
504 qi::on_error<qi::fail>
507 val(
"config parser could not complete parsing. Expecting ")<<
510 construct<std::string>(_3,_2)<<
520 qi::rule<Iterator, bertini::endgame::TrackBackConfig(), Skipper> root_rule_;
521 qi::rule<Iterator,
unsigned int(), ascii::space_type > min_cycle_, max_depth_;
522 qi::rule<Iterator, int(), ascii::space_type > junk_removal_;
523 qi::rule<Iterator, ascii::space_type, std::string()> no_decl_, no_setting_, all_names_;
Provides the base type for config settings parsers.
Configs and settings for endgames.