#include "../ContainerOperation.hpp" #include #include #include #include template < typename T, template > class CONT > std::ostream& operator<<(std::ostream& os, const CONT& array) { os << "["; BOOST_FOREACH(T val, array) { std::cout << val << "\t"; } os << "]"; return os; } template > class CONT > CONT operator-(CONT arr1, CONT arr2) { using namespace boost::lambda; BOOST_STATIC_ASSERT(sizeof(arr1) == sizeof(arr2)); std::transform(arr1.begin(), arr1.end(), arr2.begin(), arr1.begin(), _1 -= _2); return arr1; } template > class CONT > CONT operator+(CONT arr1, CONT arr2) { using namespace boost::lambda; BOOST_STATIC_ASSERT(sizeof(arr1) == sizeof(arr2)); std::transform(arr1.begin(), arr1.end(), arr2.begin(), arr1.begin(), _1 += _2); return arr1; } template > class CONT > CONT operator*(CONT arr1, CONT arr2) { using namespace boost::lambda; BOOST_STATIC_ASSERT(sizeof(arr1) == sizeof(arr2)); std::transform(arr1.begin(), arr1.end(), arr2.begin(), arr1.begin(), _1 *= _2); return arr1; } template > class CONT > CONT operator/(CONT arr1, CONT arr2) { using namespace boost::lambda; BOOST_STATIC_ASSERT(sizeof(arr1) == sizeof(arr2)); std::transform(arr1.begin(), arr1.end(), arr2.begin(), arr1.begin(), _1 /= _2); return arr1; } template > class CONT > CONT operator%(CONT arr1, CONT arr2) { using namespace boost::lambda; BOOST_STATIC_ASSERT(sizeof(arr1) == sizeof(arr2)); std::transform(arr1.begin(), arr1.end(), arr2.begin(), arr1.end(), _1 %= _2); return arr1; } template > class CONT > CONT operator+(CONT arr1, const T& rval) { using namespace boost::lambda; std::transform(arr1.begin(), arr1.end(), arr1.begin(), _1 += rval); return arr1; } template > class CONT > CONT operator-(CONT arr1, const T& rval) { using namespace boost::lambda; std::transform(arr1.begin(), arr1.end(), arr1.begin(), _1 -= rval); return arr1; } template > class CONT > CONT operator*(CONT arr1, const T& rval) { using namespace boost::lambda; std::transform(arr1.begin(), arr1.end(), arr1.begin(), _1 *= rval); return arr1; } template > class CONT > CONT operator/(CONT arr1, const T& rval) { using namespace boost::lambda; std::transform(arr1.begin(), arr1.end(), arr1.begin(), _1 /= rval); return arr1; } template > class CONT > CONT operator%(CONT arr1, const T& rval) { using namespace boost::lambda; std::transform(arr1.begin(), arr1.end(), arr1.begin(), _1 %= rval); return arr1; }