Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c++ > #86135 > unrolled thread

Fast and paradigmatic-elegant

Started byBonita Montero <Bonita.Montero@gmail.com>
First post2022-08-28 11:49 +0200
Last post2022-08-28 11:49 +0200
Articles 1 — 1 participant

Back to article view | Back to comp.lang.c++


Contents

  Fast and paradigmatic-elegant Bonita Montero <Bonita.Montero@gmail.com> - 2022-08-28 11:49 +0200

#86135 — Fast and paradigmatic-elegant

FromBonita Montero <Bonita.Montero@gmail.com>
Date2022-08-28 11:49 +0200
SubjectFast and paradigmatic-elegant
Message-ID<tefdns$jic2$1@dont-email.me>
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;
			}
}

[toc] | [standalone]


Back to top | Article view | comp.lang.c++


csiph-web