Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fast and paradigmatic-elegant

11 views
Skip to first unread message

Bonita Montero

unread,
Aug 28, 2022, 5:50:04 AM8/28/22
to
template<std::input_iterator CharInputIt, typename Callback>
requires std::is_integral_v<std::iter_value_t<CharInputIt>>
&& requires( Callback callback, CharInputIt cri ) { { callback( cri,
cri ) }; }
void linify( CharInputIt begin, CharInputIt end, Callback callback )
{
CharInputIt
scn = begin,
lineBegin;
if( scn == end ) [[unlikely]]
return;
auto checkedCallback = [&]() { if( lineBegin != scn ) callback(
lineBegin, scn ); };
for( ; ; )
for( lineBegin = scn; ; ++scn )
if( *scn == '\n' ) [[unlikely]]
{
checkedCallback();
if( ++scn == end )
return;
break;
}
else if( *scn == '\r' ) [[unlikely]]
{
checkedCallback();
if( ++scn == end || *scn == '\n' && ++scn == end )
return;
break;
}
}

0 new messages