Browse Source

[Minor] Add utility to iterate over a list of newline separated strings

tags/3.6
Vsevolod Stakhov 11 months ago
parent
commit
8c1c1ddd88
No account linked to committer's email address
1 changed files with 29 additions and 0 deletions
  1. 29
    0
      src/libutil/cxx/util.hxx

+ 29
- 0
src/libutil/cxx/util.hxx View File

@@ -65,6 +65,35 @@ inline constexpr auto make_string_view_from_it(_It begin, _It end)
};
}

/**
* Iterate over lines in a string, newline characters are dropped
* @tparam S
* @tparam F
* @param input
* @param functor
* @return
*/
template<class S, class F, typename std::enable_if_t<std::is_invocable_v<F, std::string_view> &&
std::is_constructible_v<std::string_view, S>, bool> = true>
inline auto string_foreach_line(const S &input, const F &functor)
{
auto it = input.begin();
auto end = input.end();

while (it != end) {
auto next = std::find(it, end, '\n');
while (next >= it && (*next == '\n' || *next == '\r')) {
--next;
}
functor(make_string_view_from_it(it, next));
it = next;

if (it != end) {
++it;
}
}
}

/**
* Enumerate for range loop
*/

Loading…
Cancel
Save