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


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

Fast and paradigmatic-elegant

From Bonita Montero <Bonita.Montero@gmail.com>
Newsgroups comp.lang.c++
Subject Fast and paradigmatic-elegant
Date 2022-08-28 11:49 +0200
Organization A noiseless patient Spider
Message-ID <tefdns$jic2$1@dont-email.me> (permalink)

Show all headers | View raw


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;
			}
}

Back to comp.lang.c++ | Previous | Next | Find similar | Unroll thread


Thread

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

csiph-web