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( ) )(
51 :
pos_{ other.pos_ },
end_{ other.end_ },
t_( other.t_ ),
52 r_( other.r_ ),
cur_{ std::move( other.cur_ ) }
59 r_( other.r_ ),
cur_( other.cur_ )
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 );
267 #endif // _NDS_IMPL_ENABLE_CATCH_TESTS_
269 #endif // NDS2_CLIENT_NDS1_CHANNEL_LISTING_HH
value_type & reference
Definition: channel_listing.hh:32
ChannelListIterator(Reader &r, Transform &t, int end)
Definition: channel_listing.hh:46
ChannelListIterator(ChannelListIterator &&other)
Definition: channel_listing.hh:50
ChannelListIterator(Reader &r, Transform &t, int pos, int end)
Definition: channel_listing.hh:41
Definition: basic_io.hh:26
value_type cur_
Definition: channel_listing.hh:111
std::result_of< decltype(&Transform::operator())(Transform, raw_sc2_channel) >::type value_type
Definition: channel_listing.hh:31
std::size_t difference_type
Definition: channel_listing.hh:34
TEST_CASE("daq_strlcpy copies strings safely when buffers are sufficiently large")
Definition: test_bsd_string.cc:9
ChannelListIterator(Reader &r, Transform &t)
Definition: channel_listing.hh:37
reference operator*()
Definition: channel_listing.hh:77
std::array< char, 148 > raw_sc2_channel
Definition: channel_listing.hh:22
value_type * pointer
Definition: channel_listing.hh:33
Reader & r_
Definition: channel_listing.hh:110
nds_impl::common::Span< char > identify_padded_string(It begin, It end)
Definition: utils.hh:19
bool operator==(const ChannelListIterator< Reader, Transform > &other) const
Definition: channel_listing.hh:64
int end_
Definition: channel_listing.hh:108
Definition: dummy_socket.hh:45
Definition: channel_listing.hh:25
static void read_in_sc2_channel(Reader &r, raw_sc2_channel &buf)
Definition: channel_listing.hh:114
void read_get_channels(Reader &r, OutIt it, Transform t=Transform(), Predicate p=Predicate())
Definition: channel_listing.hh:180
std::vector< char > generate_sc2_channel_stream(int count)
Definition: nds1_test_utilities.cc:81
ChannelListIterator< Reader, Transform > operator++(int)
Definition: channel_listing.hh:98
std::input_iterator_tag iterator_category
Definition: channel_listing.hh:35
static raw_sc2_channel read_in_sc2_channel(Reader &r)
Definition: channel_listing.hh:134
ChannelListIterator< Reader, Transform > & operator++()
Definition: channel_listing.hh:82
int pos_
Definition: channel_listing.hh:104
Definition: buffered_reader.hh:17
pointer data() const
Definition: utils.hh:169
Transform & t_
Definition: channel_listing.hh:109
bool operator!=(const ChannelListIterator< Reader, Transform > &other) const
Definition: channel_listing.hh:71
ChannelListIterator(const ChannelListIterator< Reader, Transform > &other)
Definition: channel_listing.hh:56