5#ifndef NDS2_CLIENT_NDS1_CHANNEL_LISTING_HH
6#define NDS2_CLIENT_NDS1_CHANNEL_LISTING_HH
12#include "common/utils.hh"
24 template <
typename Reader,
typename Transform >
29 typedef typename std::result_of<
decltype (
30 &Transform::operator( ) )(
116 const size_t name_length = 60;
117 std::array< char, 1 > tmp;
118 r.read_exactly( buf.data( ), buf.data( ) + name_length );
124 r.peek( tmp.data( ), tmp.data( ) + 1 );
125 if ( tmp[ 0 ] ==
'\t' )
127 r.read_exactly( tmp.data( ), tmp.data( ) + 1 );
129 r.read_exactly( buf.data( ) + name_length,
130 buf.data( ) + buf.size( ) );
177 decltype ( &Transform::operator( ) )(
182 Transform t = Transform( ),
183 Predicate p = Predicate( ) )
186 basic_reader io( r );
187 auto count = io.read_uint32_hex( );
192 std::copy_if( begin_range, end_range, it, p );
202#ifdef _NDS_IMPL_ENABLE_CATCH_TESTS_
214#include "common/utils.hh"
244 std::vector< std::string > channels;
250 std::back_inserter( channels ),
254 char_span input_span( input.data( ), input.size( ) );
255 char_span name_span =
257 input.data( ), input.data( ) + 60 );
258 return std::string{ name_span.data( ), name_span.size( ) };
260 []( std::string& channel_name ) ->
bool {
264 REQUIRE( channels.size( ) == 340 );
Definition buffered_reader.hh:18
Definition basic_io.hh:27
Definition channel_listing.hh:26
ChannelListIterator(Reader &r, Transform &t)
Definition channel_listing.hh:37
bool operator==(const ChannelListIterator< Reader, Transform > &other) const
Definition channel_listing.hh:64
ChannelListIterator(ChannelListIterator &&other)
Definition channel_listing.hh:50
value_type & reference
Definition channel_listing.hh:32
ChannelListIterator(Reader &r, Transform &t, int end)
Definition channel_listing.hh:46
ChannelListIterator(Reader &r, Transform &t, int pos, int end)
Definition channel_listing.hh:41
reference operator*()
Definition channel_listing.hh:77
std::result_of< decltype(&Transform::operator())(Transform, raw_sc2_channel)>::type value_type
Definition channel_listing.hh:31
int end_
Definition channel_listing.hh:108
ChannelListIterator< Reader, Transform > & operator++()
Definition channel_listing.hh:82
static raw_sc2_channel read_in_sc2_channel(Reader &r)
Definition channel_listing.hh:134
value_type cur_
Definition channel_listing.hh:111
int pos_
Definition channel_listing.hh:107
Transform & t_
Definition channel_listing.hh:109
value_type * pointer
Definition channel_listing.hh:33
std::size_t difference_type
Definition channel_listing.hh:34
bool operator!=(const ChannelListIterator< Reader, Transform > &other) const
Definition channel_listing.hh:71
ChannelListIterator(const ChannelListIterator< Reader, Transform > &other)
Definition channel_listing.hh:56
ChannelListIterator< Reader, Transform > operator++(int)
Definition channel_listing.hh:98
static void read_in_sc2_channel(Reader &r, raw_sc2_channel &buf)
Definition channel_listing.hh:114
Reader & r_
Definition channel_listing.hh:110
std::input_iterator_tag iterator_category
Definition channel_listing.hh:35
nds_impl::common::Span< char > identify_padded_string(It begin, It end)
Definition utils.hh:19
void read_get_channels(Reader &r, OutIt it, Transform t=Transform(), Predicate p=Predicate())
Definition channel_listing.hh:180
std::array< char, 148 > raw_sc2_channel
Definition channel_listing.hh:22
Definition span_reader.hh:14
std::vector< char > generate_sc2_channel_stream(int count)
Definition nds1_test_utilities.cc:81
Definition dummy_socket.hh:46
TEST_CASE("daq_strlcpy copies strings safely when buffers are sufficiently large")
Definition test_bsd_string.cc:9