diff --git a/gtsam_unstable/linear/QPSParser.cpp b/gtsam_unstable/linear/QPSParser.cpp index 5ab0f8728..cfee58cbd 100644 --- a/gtsam_unstable/linear/QPSParser.cpp +++ b/gtsam_unstable/linear/QPSParser.cpp @@ -4,59 +4,44 @@ #define BOOST_SPIRIT_USE_PHOENIX_V3 1 #include +#include +#include + #include #include #include #include +namespace bf = boost::fusion; +namespace qi = boost::spirit::qi; + namespace gtsam { -typedef boost::spirit::qi::grammar> base_grammar; +typedef qi::grammar> base_grammar; struct QPSParser::MPSGrammar: base_grammar { + typedef std::vector Chars; RawQP * rqp_; + boost::function const&)> setName; + boost::function const &)> addRow; + boost::function< + void(bf::vector const &)> rhsSingle; boost::function< void( - boost::fusion::vector, std::vector, - std::vector> const&)> setName; + bf::vector)> rhsDouble; + boost::function< + void(bf::vector)> colSingle; boost::function< void( - boost::fusion::vector, char, std::vector, - std::vector, std::vector> const &)> addRow; + bf::vector const &)> colDouble; + boost::function< + void(bf::vector const &)> addQuadTerm; boost::function< void( - boost::fusion::vector, std::vector, - std::vector, std::vector, std::vector, double, - std::vector > const &)> rhsSingle; + bf::vector const &)> addBound; boost::function< - void( - boost::fusion::vector, std::vector, - std::vector, std::vector, std::vector, double, - std::vector, std::vector, std::vector, double>)> rhsDouble; - boost::function< - void( - boost::fusion::vector, std::vector, - std::vector, std::vector, std::vector, double, - std::vector>)> colSingle; - boost::function< - void( - boost::fusion::vector, std::vector, - std::vector, std::vector, double, std::vector, - std::vector, std::vector, double> const &)> colDouble; - boost::function< - void( - boost::fusion::vector, std::vector, - std::vector, std::vector, std::vector, double, - std::vector> const &)> addQuadTerm; - boost::function< - void( - boost::fusion::vector, std::vector, - std::vector, std::vector, std::vector, - std::vector, std::vector, double> const &)> addBound; - boost::function< - void( - boost::fusion::vector, std::vector, - std::vector, std::vector, std::vector, - std::vector, std::vector> const &)> addBoundFr; + void(bf::vector const &)> addBoundFr; MPSGrammar(RawQP * rqp) : base_grammar(start), rqp_(rqp), setName( boost::bind(&RawQP::setName, rqp, ::_1)), addRow( @@ -75,7 +60,7 @@ struct QPSParser::MPSGrammar: base_grammar { word = lexeme[+character]; name = lexeme[lit("NAME") >> *blank >> title >> +space][setName]; row = lexeme[*blank >> character >> +blank >> word >> *blank][addRow]; - rhs_single = lexeme[*blank >> word >> +blank >> word >> +blank>> double_ + rhs_single = lexeme[*blank >> word >> +blank >> word >> +blank >> double_ >> *blank][rhsSingle]; rhs_double = lexeme[(*blank >> word >> +blank >> word >> +blank >> double_ >> +blank >> word >> +blank >> double_)[rhsDouble] >> *blank]; @@ -103,28 +88,11 @@ struct QPSParser::MPSGrammar: base_grammar { >> end]; } - boost::spirit::qi::rule, char()> character; - boost::spirit::qi::rule, - std::vector()> word; - boost::spirit::qi::rule, - std::vector()> title; - boost::spirit::qi::rule > row; - boost::spirit::qi::rule > end; - boost::spirit::qi::rule > col_single; - boost::spirit::qi::rule > col_double; - boost::spirit::qi::rule > rhs_single; - boost::spirit::qi::rule > rhs_double; - boost::spirit::qi::rule > ranges; - boost::spirit::qi::rule > bound; - boost::spirit::qi::rule > bound_fr; - boost::spirit::qi::rule > bounds; - boost::spirit::qi::rule > quad; - boost::spirit::qi::rule > quad_l; - boost::spirit::qi::rule > rows; - boost::spirit::qi::rule > cols; - boost::spirit::qi::rule > rhs; - boost::spirit::qi::rule > name; - boost::spirit::qi::rule > start; + qi::rule, char()> character; + qi::rule, Chars()> word, title; + qi::rule > row, end, col_single, + col_double, rhs_single, rhs_double, ranges, bound, bound_fr, bounds, quad, + quad_l, rows, cols, rhs, name, start; }; QP QPSParser::Parse() { @@ -136,8 +104,6 @@ QP QPSParser::Parse() { if (!parse(begin, last, MPSGrammar(&rawData)) || begin != last) { throw QPSParserException(); - } else { -// std::cout << "Parse Successful." << std::endl; } return rawData.makeQP(); diff --git a/gtsam_unstable/linear/QPSParser.h b/gtsam_unstable/linear/QPSParser.h index 6e8b8164b..11eba4d86 100644 --- a/gtsam_unstable/linear/QPSParser.h +++ b/gtsam_unstable/linear/QPSParser.h @@ -8,8 +8,6 @@ #pragma once #include -#include -#include #include namespace gtsam {