/*============================================================================= Copyright (c) 2011-2019 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout 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) =============================================================================*/ #ifndef SPROUT_VALARRAY_BITWISE_HPP #define SPROUT_VALARRAY_BITWISE_HPP #include #include #include #include #include #include #include #include #include #include #include namespace sprout { // // operator& // template inline SPROUT_CONSTEXPR sprout::valarray operator&(sprout::valarray const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), rhs.begin(), lhs, sprout::bit_and<>()); } template inline SPROUT_CONSTEXPR sprout::valarray operator&(sprout::valarray const& lhs, T const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), lhs, sprout::bind2nd(sprout::bit_and<>(), rhs)); } template inline SPROUT_CONSTEXPR sprout::valarray operator&(T const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(rhs.begin(), rhs.end(), rhs, sprout::bind1st(sprout::bit_and<>(), lhs)); } // // operator| // template inline SPROUT_CONSTEXPR sprout::valarray operator|(sprout::valarray const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), rhs.begin(), lhs, sprout::bit_or<>()); } template inline SPROUT_CONSTEXPR sprout::valarray operator|(sprout::valarray const& lhs, T const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), lhs, sprout::bind2nd(sprout::bit_or<>(), rhs)); } template inline SPROUT_CONSTEXPR sprout::valarray operator|(T const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(rhs.begin(), rhs.end(), rhs, sprout::bind1st(sprout::bit_or<>(), lhs)); } // // operator^ // template inline SPROUT_CONSTEXPR sprout::valarray operator^(sprout::valarray const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), rhs.begin(), lhs, sprout::bit_xor<>()); } template inline SPROUT_CONSTEXPR sprout::valarray operator^(sprout::valarray const& lhs, T const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), lhs, sprout::bind2nd(sprout::bit_xor<>(), rhs)); } template inline SPROUT_CONSTEXPR sprout::valarray operator^(T const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(rhs.begin(), rhs.end(), rhs, sprout::bind1st(sprout::bit_xor<>(), lhs)); } // // operator<< // template inline SPROUT_CONSTEXPR sprout::valarray operator<<(sprout::valarray const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), rhs.begin(), lhs, sprout::shift_left<>()); } template inline SPROUT_CONSTEXPR sprout::valarray operator<<(sprout::valarray const& lhs, T const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), lhs, sprout::bind2nd(sprout::shift_left<>(), rhs)); } template inline SPROUT_CONSTEXPR sprout::valarray operator<<(T const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(rhs.begin(), rhs.end(), rhs, sprout::bind1st(sprout::shift_left<>(), lhs)); } // // operator>> // template inline SPROUT_CONSTEXPR sprout::valarray operator>>(sprout::valarray const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), rhs.begin(), lhs, sprout::shift_right<>()); } template inline SPROUT_CONSTEXPR sprout::valarray operator>>(sprout::valarray const& lhs, T const& rhs) { return sprout::fixed::transform(lhs.begin(), lhs.end(), lhs, sprout::bind2nd(sprout::shift_right<>(), rhs)); } template inline SPROUT_CONSTEXPR sprout::valarray operator>>(T const& lhs, sprout::valarray const& rhs) { return sprout::fixed::transform(rhs.begin(), rhs.end(), rhs, sprout::bind1st(sprout::shift_right<>(), lhs)); } } // namespace sprout #endif // #ifndef SPROUT_VALARRAY_BITWISE_HPP