Skip to content

Commit f3a3810

Browse files
committed
Add compound assignment operators
1 parent 04367ac commit f3a3810

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

include/boost/lambda2/lambda2.hpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,17 @@ BOOST_LAMBDA2_UNARY_FN(--, decrement)
127127
BOOST_LAMBDA2_POSTFIX_FN(++, postfix_increment)
128128
BOOST_LAMBDA2_POSTFIX_FN(--, postfix_decrement)
129129

130+
BOOST_LAMBDA2_BINARY_FN(+=, plus_equal)
131+
BOOST_LAMBDA2_BINARY_FN(-=, minus_equal)
132+
BOOST_LAMBDA2_BINARY_FN(*=, multiplies_equal)
133+
BOOST_LAMBDA2_BINARY_FN(/=, divides_equal)
134+
BOOST_LAMBDA2_BINARY_FN(%=, modulus_equal)
135+
BOOST_LAMBDA2_BINARY_FN(&=, bit_and_equal)
136+
BOOST_LAMBDA2_BINARY_FN(|=, bit_or_equal)
137+
BOOST_LAMBDA2_BINARY_FN(^=, bit_xor_equal)
138+
BOOST_LAMBDA2_BINARY_FN(<<=, left_shift_equal)
139+
BOOST_LAMBDA2_BINARY_FN(>>=, right_shift_equal)
140+
130141
// operators
131142

132143
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)
202213
BOOST_LAMBDA2_POSTFIX_LAMBDA(++, lambda2_detail::postfix_increment)
203214
BOOST_LAMBDA2_POSTFIX_LAMBDA(--, lambda2_detail::postfix_decrement)
204215

216+
// compound assignment
217+
218+
BOOST_LAMBDA2_BINARY_LAMBDA(+=, lambda2_detail::plus_equal)
219+
BOOST_LAMBDA2_BINARY_LAMBDA(-=, lambda2_detail::minus_equal)
220+
BOOST_LAMBDA2_BINARY_LAMBDA(*=, lambda2_detail::multiplies_equal)
221+
BOOST_LAMBDA2_BINARY_LAMBDA(/=, lambda2_detail::divides_equal)
222+
BOOST_LAMBDA2_BINARY_LAMBDA(%=, lambda2_detail::modulus_equal)
223+
BOOST_LAMBDA2_BINARY_LAMBDA(&=, lambda2_detail::bit_and_equal)
224+
BOOST_LAMBDA2_BINARY_LAMBDA(|=, lambda2_detail::bit_or_equal)
225+
BOOST_LAMBDA2_BINARY_LAMBDA(^=, lambda2_detail::bit_xor_equal)
226+
BOOST_LAMBDA2_BINARY_LAMBDA(<<=, lambda2_detail::left_shift_equal)
227+
BOOST_LAMBDA2_BINARY_LAMBDA(>>=, lambda2_detail::right_shift_equal)
228+
205229
} // namespace lambda2
206230
} // namespace boost
207231

test/Jamfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ run dereference.cpp ;
2323
run placeholders.cpp ;
2424
run increment.cpp ;
2525
run subscript.cpp ;
26+
run compound.cpp ;

test/compound.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright 2021 Peter Dimov
2+
// Distributed under the Boost Software License, Version 1.0.
3+
// https://www.boost.org/LICENSE_1_0.txt
4+
5+
#include <boost/lambda2.hpp>
6+
#include <boost/core/lightweight_test.hpp>
7+
#include <functional>
8+
9+
#define TEST_COMPOUND(Op) \
10+
BOOST_TEST_EQ( (_1 Op 1)(x1), y1 Op 1 ); \
11+
BOOST_TEST_EQ( (_1 Op _2)(x1, x2), y1 Op y2 ); \
12+
BOOST_TEST_EQ( ((_1 Op _2) Op _3)(x1, x2, x3), (y1 Op y2) Op y3 );
13+
14+
int main()
15+
{
16+
using namespace boost::lambda2;
17+
18+
int x1 = 1, x2 = 2, x3 = 3, y1 = 1, y2 = 2, y3 = 3;
19+
20+
TEST_COMPOUND(+=)
21+
TEST_COMPOUND(-=)
22+
TEST_COMPOUND(*=)
23+
TEST_COMPOUND(/=)
24+
TEST_COMPOUND(%=)
25+
TEST_COMPOUND(&=)
26+
TEST_COMPOUND(|=)
27+
TEST_COMPOUND(^=)
28+
TEST_COMPOUND(<<=)
29+
TEST_COMPOUND(>>=)
30+
31+
return boost::report_errors();
32+
}

0 commit comments

Comments
 (0)