From eb89ddcd5368670ea631393733c0342c758b7419 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Sat, 20 Nov 2021 05:58:35 +1000 Subject: [PATCH] view: add trim_if --- view.hpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/view.hpp b/view.hpp index 84f2d603..3b204046 100644 --- a/view.hpp +++ b/view.hpp @@ -727,6 +727,29 @@ namespace cruft { } + /////////////////////////////////////////////////////////////////////////// + template + view + trim_if [[nodiscard]] ( + view const buffer, + FunctionT &&test + ) { + auto const first = std::find_if_not ( + std::begin (buffer), + std::end (buffer), + test + ); + + auto const last = std::find_if_not ( + std::make_reverse_iterator (buffer.end ()), + std::make_reverse_iterator (first), + test + ); + + return view (first, last.base ()); + } + + /////////////////////////////////////////////////////////////////////////// /// Returns a reference to a value of the designated type at the front of /// the word-view. if there is insufficient data for the extraction an