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
7    Use, modification and distribution is subject to the Boost Software
8    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
9    http://www.boost.org/LICENSE_1_0.txt)
10=============================================================================*/
11#if !defined(BOOST_SPIRIT_SEQUENTIAL_OR_IPP)
12#define BOOST_SPIRIT_SEQUENTIAL_OR_IPP
13
14namespace boost { namespace spirit {
15
16 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
17
18   ///////////////////////////////////////////////////////////////////////////
19    //
20    //  sequential-or class implementation
21    //
22    ///////////////////////////////////////////////////////////////////////////
23    template <typename A, typename B>
24    inline sequential_or<A, B>
25    operator||(parser<A> const& a, parser<B> const& b)
26    {
27        return sequential_or<A, B>(a.derived(), b.derived());
28    }
29
30    template <typename A>
31    inline sequential_or<A, chlit<char> >
32    operator||(parser<A> const& a, char b)
33    {
34        return sequential_or<A, chlit<char> >(a.derived(), b);
35    }
36
37    template <typename B>
38    inline sequential_or<chlit<char>, B>
39    operator||(char a, parser<B> const& b)
40    {
41        return sequential_or<chlit<char>, B>(a, b.derived());
42    }
43
44    template <typename A>
45    inline sequential_or<A, strlit<char const*> >
46    operator||(parser<A> const& a, char const* b)
47    {
48        return sequential_or<A, strlit<char const*> >(a.derived(), b);
49    }
50
51    template <typename B>
52    inline sequential_or<strlit<char const*>, B>
53    operator||(char const* a, parser<B> const& b)
54    {
55        return sequential_or<strlit<char const*>, B>(a, b.derived());
56    }
57
58    template <typename A>
59    inline sequential_or<A, chlit<wchar_t> >
60    operator||(parser<A> const& a, wchar_t b)
61    {
62        return sequential_or<A, chlit<wchar_t> >(a.derived(), b);
63    }
64
65    template <typename B>
66    inline sequential_or<chlit<wchar_t>, B>
67    operator||(wchar_t a, parser<B> const& b)
68    {
69        return sequential_or<chlit<wchar_t>, B>(a, b.derived());
70    }
71
72    template <typename A>
73    inline sequential_or<A, strlit<wchar_t const*> >
74    operator||(parser<A> const& a, wchar_t const* b)
75    {
76        return sequential_or<A, strlit<wchar_t const*> >(a.derived(), b);
77    }
78
79    template <typename B>
80    inline sequential_or<strlit<wchar_t const*>, B>
81    operator||(wchar_t const* a, parser<B> const& b)
82    {
83        return sequential_or<strlit<wchar_t const*>, B>(a, b.derived());
84    }
85
86BOOST_SPIRIT_CLASSIC_NAMESPACE_END
87
88}} // namespace boost::spirit
89
90#endif
91