mirror of
https://github.com/boostorg/lambda2.git
synced 2025-05-11 05:33:57 +00:00
Add compound assignment operators
This commit is contained in:
parent
04367ac3e5
commit
f3a3810be4
@ -127,6 +127,17 @@ BOOST_LAMBDA2_UNARY_FN(--, decrement)
|
||||
BOOST_LAMBDA2_POSTFIX_FN(++, postfix_increment)
|
||||
BOOST_LAMBDA2_POSTFIX_FN(--, postfix_decrement)
|
||||
|
||||
BOOST_LAMBDA2_BINARY_FN(+=, plus_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(-=, minus_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(*=, multiplies_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(/=, divides_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(%=, modulus_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(&=, bit_and_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(|=, bit_or_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(^=, bit_xor_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(<<=, left_shift_equal)
|
||||
BOOST_LAMBDA2_BINARY_FN(>>=, right_shift_equal)
|
||||
|
||||
// operators
|
||||
|
||||
template<class T> using remove_cvref_t = std::remove_cv_t<std::remove_reference_t<T>>;
|
||||
@ -202,6 +213,19 @@ BOOST_LAMBDA2_UNARY_LAMBDA(--, lambda2_detail::decrement)
|
||||
BOOST_LAMBDA2_POSTFIX_LAMBDA(++, lambda2_detail::postfix_increment)
|
||||
BOOST_LAMBDA2_POSTFIX_LAMBDA(--, lambda2_detail::postfix_decrement)
|
||||
|
||||
// compound assignment
|
||||
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(+=, lambda2_detail::plus_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(-=, lambda2_detail::minus_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(*=, lambda2_detail::multiplies_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(/=, lambda2_detail::divides_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(%=, lambda2_detail::modulus_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(&=, lambda2_detail::bit_and_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(|=, lambda2_detail::bit_or_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(^=, lambda2_detail::bit_xor_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(<<=, lambda2_detail::left_shift_equal)
|
||||
BOOST_LAMBDA2_BINARY_LAMBDA(>>=, lambda2_detail::right_shift_equal)
|
||||
|
||||
} // namespace lambda2
|
||||
} // namespace boost
|
||||
|
||||
|
@ -23,3 +23,4 @@ run dereference.cpp ;
|
||||
run placeholders.cpp ;
|
||||
run increment.cpp ;
|
||||
run subscript.cpp ;
|
||||
run compound.cpp ;
|
||||
|
32
test/compound.cpp
Normal file
32
test/compound.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright 2021 Peter Dimov
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// https://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
#include <boost/lambda2.hpp>
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <functional>
|
||||
|
||||
#define TEST_COMPOUND(Op) \
|
||||
BOOST_TEST_EQ( (_1 Op 1)(x1), y1 Op 1 ); \
|
||||
BOOST_TEST_EQ( (_1 Op _2)(x1, x2), y1 Op y2 ); \
|
||||
BOOST_TEST_EQ( ((_1 Op _2) Op _3)(x1, x2, x3), (y1 Op y2) Op y3 );
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace boost::lambda2;
|
||||
|
||||
int x1 = 1, x2 = 2, x3 = 3, y1 = 1, y2 = 2, y3 = 3;
|
||||
|
||||
TEST_COMPOUND(+=)
|
||||
TEST_COMPOUND(-=)
|
||||
TEST_COMPOUND(*=)
|
||||
TEST_COMPOUND(/=)
|
||||
TEST_COMPOUND(%=)
|
||||
TEST_COMPOUND(&=)
|
||||
TEST_COMPOUND(|=)
|
||||
TEST_COMPOUND(^=)
|
||||
TEST_COMPOUND(<<=)
|
||||
TEST_COMPOUND(>>=)
|
||||
|
||||
return boost::report_errors();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user