Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 26th, 2012  |  syntax: None  |  size: 0.82 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Boost::Spirit::Qi Auto-rules and conditional actions
  2. struct GenderTally
  3. {
  4.  std::vector<std::string> males;
  5.  std::vector<std::string> females;
  6. };
  7.        
  8. m:Steve;
  9. f:Dora;
  10. f:Martha;
  11. m:Joe;
  12. ...
  13.        
  14. BOOST_FUSION_ADAPT_STRUCT(
  15.     GenderTally,
  16.     (std::vector<std::string>, males)
  17.     (std::vector<std::string>, females)
  18. );
  19.  
  20. rule<Iterator, std::string()> r = +alnum;
  21. rule<Iterator, GenderTally()> g =
  22.     *(   ("f:" >> r)[phx::push_back(at_c<0>(_val), _1)]
  23.      |   ("m:" >> r)[phx::push_back(at_c<1>(_val), _1)]
  24.      );
  25.        
  26. struct Gender {
  27.     char gender;
  28.     std::string name;
  29. };
  30.  
  31. typedef std::vector<Gender> GenderTally;
  32.  
  33. BOOST_FUSION_ADAPT_STRUCT(
  34.     Gender,
  35.     (char, gender)
  36.     (std::string, name)
  37. );
  38.        
  39. rule<Iterator, std::string()> r = +alnum;
  40. rule<Iterator, GenderTally()> g = *(char_('f') >> ':' >> r | char_('m') >> ':' >> r);