mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-04 15:09:40 +00:00
AK: Implement wrapper for reverse range for loop
Now it is possible to use range for loop in reverse mode for a container. ``` for (auto item : in_reverse(vector)) ```
This commit is contained in:
parent
a54e20d958
commit
f34fff852b
|
@ -87,4 +87,22 @@ private:
|
|||
int m_index { 0 };
|
||||
};
|
||||
|
||||
namespace ReverseWrapper {
|
||||
|
||||
template<typename Container>
|
||||
struct ReverseWrapper {
|
||||
Container& container;
|
||||
};
|
||||
|
||||
template<typename Container>
|
||||
auto begin(ReverseWrapper<Container> wrapper) { return wrapper.container.rbegin(); }
|
||||
|
||||
template<typename Container>
|
||||
auto end(ReverseWrapper<Container> wrapper) { return wrapper.container.rend(); }
|
||||
|
||||
template<typename Container>
|
||||
ReverseWrapper<Container> in_reverse(Container&& container) { return { container }; }
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include "AK/ReverseIterator.h"
|
||||
#include <LibTest/TestCase.h>
|
||||
|
||||
#include <AK/NonnullOwnPtrVector.h>
|
||||
|
@ -552,10 +553,18 @@ TEST_CASE(rend)
|
|||
EXPECT_EQ(*expected, *expected_in_reverse);
|
||||
}
|
||||
|
||||
TEST_CASE(reverse_loop)
|
||||
TEST_CASE(reverse_iterator_for_loop)
|
||||
{
|
||||
Vector<int> v { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
int index = 9;
|
||||
for (auto rev = v.rbegin(); rev != v.rend(); ++rev)
|
||||
EXPECT_EQ(*rev, index--);
|
||||
}
|
||||
|
||||
TEST_CASE(reverse_range_for_loop)
|
||||
{
|
||||
Vector<int> v { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
|
||||
int index = 9;
|
||||
for (auto item : AK::ReverseWrapper::in_reverse(v))
|
||||
EXPECT_EQ(item, index--);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue