/* * Copyright 2008-2012 NVIDIA Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include #include #include #include namespace thrust { namespace detail { namespace functional { template struct plus_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T &rhs) const { return lhs += rhs; } }; // end plus_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator+=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator+=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator+=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator+=() template struct minus_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T &rhs) const { return lhs -= rhs; } }; // end minus_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator-=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator-=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator-=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator-=() template struct multiplies_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T&rhs) const { return lhs *= rhs; } }; // end multiplies_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator*=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator*=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator*=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator*=() template struct divides_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T&rhs) const { return lhs /= rhs; } }; // end divides_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator/=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator/=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator/=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator/=() template struct modulus_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T&rhs) const { return lhs %= rhs; } }; // end modulus_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator%=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator%=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator%=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator%=() template struct bit_and_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T&rhs) const { return lhs &= rhs; } }; // end bit_and_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator&=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator&=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator&=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator&=() template struct bit_or_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T&rhs) const { return lhs |= rhs; } }; // end bit_or_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator|=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator|=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator|=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator|=() template struct bit_xor_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T&rhs) const { return lhs ^= rhs; } }; // end bit_xor_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator^=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator|=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator^=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator|=() template struct bit_lshift_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T&rhs) const { return lhs <<= rhs; } }; // end bit_lshift_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator<<=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator<<=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator<<=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator<<=() template struct bit_rshift_equal : public thrust::binary_function { __host__ __device__ T& operator()(T &lhs, const T&rhs) const { return lhs >>= rhs; } }; // end bit_rshift_equal template __host__ __device__ actor< composite< binary_operator, actor, typename as_actor::type > > operator>>=(const actor &_1, const T2 &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator>>=() template __host__ __device__ actor< composite< binary_operator, actor, actor > > operator>>=(const actor &_1, const actor &_2) { return compose(binary_operator(), make_actor(_1), make_actor(_2)); } // end operator>>=() } // end functional } // end detail } // end thrust