diff options
author | Kevin Smith <git@kismith.co.uk> | 2013-01-12 18:41:34 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2013-01-13 10:36:26 (GMT) |
commit | f3bc816af1b0d61452de973963e453bf3b3f95a2 (patch) | |
tree | e895f8afa3580e6cff6f5ad2017d45bf147a17c2 /3rdParty/Boost/src/boost/fusion/mpl | |
parent | 188fc285c6555eadd3c9d50ab8a94adcade78d89 (diff) | |
download | swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.zip swift-f3bc816af1b0d61452de973963e453bf3b3f95a2.tar.bz2 |
Adding in the spirit Boost stuff
Change-Id: I4f127ce61667243b64081b0aa309028d5077045f
Diffstat (limited to '3rdParty/Boost/src/boost/fusion/mpl')
18 files changed, 625 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/fusion/mpl/at.hpp b/3rdParty/Boost/src/boost/fusion/mpl/at.hpp new file mode 100644 index 0000000..27e95ed --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/at.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_AT_10022005_1616) +#define FUSION_AT_10022005_1616 + +#include <boost/mpl/at.hpp> +#include <boost/fusion/sequence/intrinsic/value_at.hpp> + +namespace boost { +namespace fusion +{ + struct fusion_sequence_tag; +} + +namespace mpl +{ + template <typename Tag> + struct at_impl; + + template <> + struct at_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename N> + struct apply : fusion::result_of::value_at<Sequence, N> {}; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/back.hpp new file mode 100644 index 0000000..a516fa7 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/back.hpp @@ -0,0 +1,32 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_BACK_10022005_1620) +#define FUSION_BACK_10022005_1620 + +#include <boost/mpl/back.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/iterator/prior.hpp> +#include <boost/fusion/iterator/value_of.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct back_impl; + + template <> + struct back_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply : + fusion::result_of::value_of< + typename fusion::result_of::prior< + typename fusion::result_of::end<Sequence>::type + >::type> {}; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp b/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp new file mode 100644 index 0000000..c9f92f8 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/begin.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_BEGIN_10022005_1620) +#define FUSION_BEGIN_10022005_1620 + +#include <boost/mpl/begin_end.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp> +#include <boost/fusion/iterator/mpl/fusion_iterator.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct begin_impl; + + template <> + struct begin_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef fusion_iterator<typename fusion::result_of::begin<Sequence>::type> type; + }; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp b/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp new file mode 100644 index 0000000..28d0e5b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/clear.hpp @@ -0,0 +1,33 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_CLEAR_10022005_1817) +#define FUSION_CLEAR_10022005_1817 + +#include <boost/mpl/clear.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/mpl/detail/clear.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct clear_impl; + + template <> + struct clear_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef typename + fusion::detail::clear<typename fusion::detail::tag_of<Sequence>::type>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp b/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp new file mode 100644 index 0000000..e6e83f6 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/detail/clear.hpp @@ -0,0 +1,46 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_CLEAR_10022005_1442) +#define FUSION_CLEAR_10022005_1442 + +#include <boost/fusion/container/vector/vector_fwd.hpp> +#include <boost/fusion/container/list/list_fwd.hpp> +#include <boost/fusion/container/map/map_fwd.hpp> +#include <boost/fusion/container/set/set_fwd.hpp> +#include <boost/fusion/container/deque/deque_fwd.hpp> + +namespace boost { namespace fusion +{ + struct cons_tag; + struct map_tag; + struct set_tag; + struct vector_tag; + struct deque_tag; + + namespace detail + { + template <typename Tag> + struct clear; + + template <> + struct clear<cons_tag> : mpl::identity<list<> > {}; + + template <> + struct clear<map_tag> : mpl::identity<map<> > {}; + + template <> + struct clear<set_tag> : mpl::identity<set<> > {}; + + template <> + struct clear<vector_tag> : mpl::identity<vector<> > {}; + + template <> + struct clear<deque_tag> : mpl::identity<deque<> > {}; + } +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp b/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp new file mode 100644 index 0000000..56d0924 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/empty.hpp @@ -0,0 +1,26 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_EMPTY_10022005_1619) +#define FUSION_EMPTY_10022005_1619 + +#include <boost/mpl/empty.hpp> +#include <boost/fusion/sequence/intrinsic/empty.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct empty_impl; + + template <> + struct empty_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply : fusion::result_of::empty<Sequence> {}; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/end.hpp b/3rdParty/Boost/src/boost/fusion/mpl/end.hpp new file mode 100644 index 0000000..3de5e18 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/end.hpp @@ -0,0 +1,31 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_END_10022005_1619) +#define FUSION_END_10022005_1619 + +#include <boost/mpl/begin_end.hpp> +#include <boost/fusion/sequence/intrinsic/end.hpp> +#include <boost/fusion/adapted/mpl/detail/end_impl.hpp> +#include <boost/fusion/iterator/mpl/fusion_iterator.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct end_impl; + + template <> + struct end_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef fusion_iterator<typename fusion::result_of::end<Sequence>::type> type; + }; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp b/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp new file mode 100644 index 0000000..7566866 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/erase.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_ERASE_10022005_1835) +#define FUSION_ERASE_10022005_1835 + +#include <boost/mpl/erase.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/erase.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct erase_impl; + + template <> + struct erase_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename First, typename Last> + struct apply + { + typedef typename + fusion::result_of::erase<Sequence, First, Last>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp b/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp new file mode 100644 index 0000000..9d1df69 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/erase_key.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_ERASE_KEY_10022005_1907) +#define FUSION_ERASE_KEY_10022005_1907 + +#include <boost/mpl/erase_key.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/erase_key.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct erase_key_impl; + + template <> + struct erase_key_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename Key> + struct apply + { + typedef typename + fusion::result_of::erase_key<Sequence, Key>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/front.hpp new file mode 100644 index 0000000..43bbd42 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/front.hpp @@ -0,0 +1,28 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_FRONT_10022005_1618) +#define FUSION_FRONT_10022005_1618 + +#include <boost/mpl/front.hpp> +#include <boost/fusion/sequence/intrinsic/begin.hpp> +#include <boost/fusion/iterator/value_of.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct front_impl; + + template <> + struct front_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply : + fusion::result_of::value_of<typename fusion::result_of::begin<Sequence>::type> {}; + }; +}} + +#endif diff --git a/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp b/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp new file mode 100644 index 0000000..6ab5ea1 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/has_key.hpp @@ -0,0 +1,27 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_HAS_KEY_10022005_1617) +#define FUSION_HAS_KEY_10022005_1617 + +#include <boost/mpl/has_key.hpp> +#include <boost/fusion/sequence/intrinsic/has_key.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct has_key_impl; + + template <> + struct has_key_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename Key> + struct apply : fusion::result_of::has_key<Sequence, Key> {}; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp b/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp new file mode 100644 index 0000000..d59e54b --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/insert.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_INSERT_10022005_1837) +#define FUSION_INSERT_10022005_1837 + +#include <boost/mpl/insert.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/insert.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct insert_impl; + + template <> + struct insert_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename Pos, typename T> + struct apply + { + typedef typename + fusion::result_of::insert<Sequence, Pos, T>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp b/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp new file mode 100644 index 0000000..e8b5b8e --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/insert_range.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_INSERT_RANGE_10022005_1838) +#define FUSION_INSERT_RANGE_10022005_1838 + +#include <boost/mpl/insert_range.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/insert_range.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct insert_range_impl; + + template <> + struct insert_range_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename Pos, typename Range> + struct apply + { + typedef typename + fusion::result_of::insert_range<Sequence, Pos, Range>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp new file mode 100644 index 0000000..505daea --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/pop_back.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_POP_BACK_10022005_1801) +#define FUSION_POP_BACK_10022005_1801 + +#include <boost/mpl/pop_back.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/pop_back.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct pop_back_impl; + + template <> + struct pop_back_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef typename + fusion::result_of::pop_back<Sequence>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp new file mode 100644 index 0000000..d51cf70 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/pop_front.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_POP_FRONT_10022005_1800) +#define FUSION_POP_FRONT_10022005_1800 + +#include <boost/mpl/pop_front.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/pop_front.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct pop_front_impl; + + template <> + struct pop_front_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply + { + typedef typename + fusion::result_of::pop_front<Sequence>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp b/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp new file mode 100644 index 0000000..a2348c5 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/push_back.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_PUSH_BACK_10022005_1647) +#define FUSION_PUSH_BACK_10022005_1647 + +#include <boost/mpl/push_back.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/push_back.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct push_back_impl; + + template <> + struct push_back_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename T> + struct apply + { + typedef typename + fusion::result_of::push_back<Sequence, T>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp b/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp new file mode 100644 index 0000000..5bcf9bb --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/push_front.hpp @@ -0,0 +1,39 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_PUSH_FRONT_10022005_1720) +#define FUSION_PUSH_FRONT_10022005_1720 + +#include <boost/mpl/push_front.hpp> +#include <boost/fusion/support/tag_of.hpp> +#include <boost/fusion/algorithm/transformation/push_front.hpp> +#include <boost/fusion/sequence/convert.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct push_front_impl; + + template <> + struct push_front_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence, typename T> + struct apply + { + typedef typename + fusion::result_of::push_front<Sequence, T>::type + result; + + typedef typename + fusion::result_of::convert< + typename fusion::detail::tag_of<Sequence>::type, result>::type + type; + }; + }; +}} + +#endif + diff --git a/3rdParty/Boost/src/boost/fusion/mpl/size.hpp b/3rdParty/Boost/src/boost/fusion/mpl/size.hpp new file mode 100644 index 0000000..1e7f351 --- /dev/null +++ b/3rdParty/Boost/src/boost/fusion/mpl/size.hpp @@ -0,0 +1,26 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +==============================================================================*/ +#if !defined(FUSION_SIZE_10022005_1617) +#define FUSION_SIZE_10022005_1617 + +#include <boost/mpl/size.hpp> +#include <boost/fusion/sequence/intrinsic/size.hpp> + +namespace boost { namespace mpl +{ + template <typename Tag> + struct size_impl; + + template <> + struct size_impl<fusion::fusion_sequence_tag> + { + template <typename Sequence> + struct apply : fusion::result_of::size<Sequence> {}; + }; +}} + +#endif |