25 #ifndef SKA_CHEETAH_PSRDADA_DADAREADCLIENT_H 26 #define SKA_CHEETAH_PSRDADA_DADAREADCLIENT_H 28 #include "cheetah/psrdada/DadaClientBase.h" 29 #include "cheetah/psrdada/detail/RawBytes.h" 30 #include "cheetah/psrdada/detail/RawBytesReader.h" 31 #include "panda/Engine.h" 63 typedef std::function<void(std::istream&, std::exception_ptr)> NextSequenceCallback;
83 DadaReadClient(key_t key, panda::Engine& engine,NextSequenceCallback
const& next_sequence_callback);
100 template <typename Iterator, typename DataType=typename std::iterator_traits<Iterator>::value_type>
101 Iterator&
read(Iterator& begin, Iterator
const& end);
118 template <
typename CallBackFunctor>
129 inline std::shared_ptr<bool> stopped()
const;
137 template <
typename CallBack>
138 void do_next_sequence(std::shared_ptr<bool> destructor_flag, CallBack callback);
141 std::unique_ptr<detail::RawBytesReader>& acquire_data_block();
142 void release_data_block();
148 char* open_block_read(ipcio_t* ipc, std::uint64_t *cursz, std::uint64_t *blk_id);
149 char* ipcbuf_get_next_read (ipcbuf_t*
id, uint64_t* bytes);
152 NextSequenceCallback _next_sequence_callback;
153 std::unique_ptr<detail::RawBytes> _current_block;
154 std::unique_ptr<detail::RawBytesReader> _current_reader;
156 panda::Engine& _engine;
157 mutable std::shared_ptr<bool> _destructor_flag;
158 std::mutex _block_mutex;
165 #include "cheetah/psrdada/detail/DadaReadClient.cpp" 167 #endif // SKA_CHEETAH_PSRDADA_DADAREADCLIENT_H DadaReadClient(key_t key, panda::Engine &engine, NextSequenceCallback const &next_sequence_callback)
Instatiate new DadaReadClient.
A general base class for DADA readers and writers.
Some limits and constants for FLDO.
Class that provides means for reading from a DADA ring buffer.
void next_sequence()
Move to the next sequence in the ring buffer.
Iterator & read(Iterator &begin, Iterator const &end)
Read from the data ring buffer.