9
3

list.ipp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*=============================================================================
  2. Copyright (c) 1998-2003 Joel de Guzman
  3. Copyright (c) 2001 Daniel Nuffer
  4. Copyright (c) 2002 Hartmut Kaiser
  5. http://spirit.sourceforge.net/
  6. Use, modification and distribution is subject to the Boost Software
  7. License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  8. http://www.boost.org/LICENSE_1_0.txt)
  9. =============================================================================*/
  10. #if !defined(BOOST_SPIRIT_LIST_IPP)
  11. #define BOOST_SPIRIT_LIST_IPP
  12. namespace boost { namespace spirit {
  13. BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
  14. ///////////////////////////////////////////////////////////////////////////
  15. //
  16. // operator% is defined as:
  17. // a % b ---> a >> *(b >> a)
  18. //
  19. ///////////////////////////////////////////////////////////////////////////
  20. template <typename A, typename B>
  21. inline sequence<A, kleene_star<sequence<B, A> > >
  22. operator%(parser<A> const& a, parser<B> const& b)
  23. {
  24. return a.derived() >> *(b.derived() >> a.derived());
  25. }
  26. template <typename A>
  27. inline sequence<A, kleene_star<sequence<chlit<char>, A> > >
  28. operator%(parser<A> const& a, char b)
  29. {
  30. return a.derived() >> *(b >> a.derived());
  31. }
  32. template <typename B>
  33. inline sequence<chlit<char>, kleene_star<sequence<B, chlit<char> > > >
  34. operator%(char a, parser<B> const& b)
  35. {
  36. return a >> *(b.derived() >> a);
  37. }
  38. template <typename A>
  39. inline sequence<A, kleene_star<sequence<strlit<char const*>, A> > >
  40. operator%(parser<A> const& a, char const* b)
  41. {
  42. return a.derived() >> *(b >> a.derived());
  43. }
  44. template <typename B>
  45. inline sequence<strlit<char const*>,
  46. kleene_star<sequence<B, strlit<char const*> > > >
  47. operator%(char const* a, parser<B> const& b)
  48. {
  49. return a >> *(b.derived() >> a);
  50. }
  51. template <typename A>
  52. inline sequence<A, kleene_star<sequence<chlit<wchar_t>, A> > >
  53. operator%(parser<A> const& a, wchar_t b)
  54. {
  55. return a.derived() >> *(b >> a.derived());
  56. }
  57. template <typename B>
  58. inline sequence<chlit<wchar_t>, kleene_star<sequence<B, chlit<wchar_t> > > >
  59. operator%(wchar_t a, parser<B> const& b)
  60. {
  61. return a >> *(b.derived() >> a);
  62. }
  63. template <typename A>
  64. inline sequence<A, kleene_star<sequence<strlit<wchar_t const*>, A> > >
  65. operator%(parser<A> const& a, wchar_t const* b)
  66. {
  67. return a.derived() >> *(b >> a.derived());
  68. }
  69. template <typename B>
  70. inline sequence<strlit<wchar_t const*>,
  71. kleene_star<sequence<B, strlit<wchar_t const*> > > >
  72. operator%(wchar_t const* a, parser<B> const& b)
  73. {
  74. return a >> *(b.derived() >> a);
  75. }
  76. BOOST_SPIRIT_CLASSIC_NAMESPACE_END
  77. }} // namespace boost::spirit
  78. #endif