src/util/strip/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../util/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | |||
| 7 | // pred(x) == true ==> drop | ||
| 8 | template <common_range R, class F> | ||
| 9 | CEXP auto lstrip_view(R CR range, F&& pred) NE { | ||
| 10 | auto v = range | views::drop_while(std::forward<F>(pred)); | ||
| 11 | return subrange{begin(v), end(v)}; | ||
| 12 | } | ||
| 13 | // pred(x) == true ==> drop | ||
| 14 | template <common_range R, class F> | ||
| 15 | 73340762 | CEXP auto rstrip_view(R CR range, F&& pred) NE { | |
| 16 | 73340762 | auto v = range | views::reverse | views::drop_while(std::forward<F>(pred)); | |
| 17 | 73340762 | return subrange{end(v).base(), begin(v).base()}; | |
| 18 | } | ||
| 19 | // pred(x) == true ==> drop | ||
| 20 | template <common_range R, class F> | ||
| 21 | CEXP auto strip_view(R CR range, F&& pred) NE { | ||
| 22 | auto v = range | views::drop_while(std::forward<F>(pred)) | views::reverse | views::drop_while(std::forward<F>(pred)); | ||
| 23 | return subrange{end(v).base(), begin(v).base()}; | ||
| 24 | } | ||
| 25 | |||
| 26 | } // namespace tifa_libs | ||
| 27 |