DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
datahandlinglibs
include
datahandlinglibs
utils
BufferedFileReader.hpp
Go to the documentation of this file.
1
9
#ifndef DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_UTILS_BUFFEREDFILEREADER_HPP_
10
#define DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_UTILS_BUFFEREDFILEREADER_HPP_
11
12
#include "
datahandlinglibs/DataHandlingIssues.hpp
"
13
#include "
datahandlinglibs/ReadoutLogging.hpp
"
14
15
#include "
logging/Logging.hpp
"
16
17
#include <boost/align/aligned_allocator.hpp>
18
#include <boost/iostreams/device/file_descriptor.hpp>
19
#include <boost/iostreams/filter/lzma.hpp>
20
#include <boost/iostreams/filter/zlib.hpp>
21
#include <boost/iostreams/filter/zstd.hpp>
22
#include <boost/iostreams/filtering_stream.hpp>
23
#include <boost/iostreams/stream.hpp>
24
#include <boost/iostreams/stream_buffer.hpp>
25
26
#include <fcntl.h>
27
#include <fstream>
28
#include <iostream>
29
#include <limits>
30
#include <string>
31
#include <unistd.h>
32
33
using
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
;
34
35
namespace
dunedaq
{
36
namespace
datahandlinglibs
{
42
template
<
class
ReadoutType,
size_t
Alignment = 4096>
43
class
BufferedFileReader
44
{
45
using
io_source_t
= boost::iostreams::file_descriptor_source;
46
using
aligned_allocator_t
= boost::alignment::aligned_allocator<io_source_t::char_type, Alignment>;
47
using
filtering_istream_t
=
48
boost::iostreams::filtering_stream<boost::iostreams::input, char, std::char_traits<char>,
aligned_allocator_t
>;
49
50
public
:
59
BufferedFileReader
(std::string
filename
,
size_t
buffer_size, std::string compression_algorithm =
"None"
)
60
{
61
open
(
filename
, buffer_size, compression_algorithm);
62
}
63
67
BufferedFileReader
() {}
68
69
BufferedFileReader
(
const
BufferedFileReader
&) =
delete
;
70
BufferedFileReader
&
operator=
(
const
BufferedFileReader
&) =
delete
;
71
BufferedFileReader
(
BufferedFileReader
&&) =
delete
;
72
BufferedFileReader
&
operator=
(
BufferedFileReader
&&) =
delete
;
73
82
void
open
(std::string
filename
,
size_t
buffer_size, std::string compression_algorithm =
"None"
)
83
{
84
m_filename
=
filename
;
85
m_buffer_size
= buffer_size;
86
m_compression_algorithm
= compression_algorithm;
87
88
int
fd =
::open
(
m_filename
.c_str(), O_RDONLY);
89
if
(fd == -1) {
90
throw
BufferedReaderWriterCannotOpenFile(
ERS_HERE
,
m_filename
);
91
}
92
93
io_source_t
io_source(fd, boost::iostreams::file_descriptor_flags::close_handle);
94
if
(
m_compression_algorithm
==
"zstd"
) {
95
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"Using zstd compression"
<< std::endl;
96
m_input_stream
.push(boost::iostreams::zstd_decompressor());
97
}
else
if
(
m_compression_algorithm
==
"lzma"
) {
98
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"Using lzma compression"
<< std::endl;
99
m_input_stream
.push(boost::iostreams::lzma_decompressor());
100
}
else
if
(
m_compression_algorithm
==
"zlib"
) {
101
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"Using zlib compression"
<< std::endl;
102
m_input_stream
.push(boost::iostreams::zlib_decompressor());
103
}
else
if
(
m_compression_algorithm
==
"None"
) {
104
TLOG_DEBUG
(
TLVL_WORK_STEPS
) <<
"Running without compression"
<< std::endl;
105
}
else
{
106
throw
BufferedReaderWriterConfigurationError
(
ERS_HERE
,
107
"Non-recognized compression algorithm: "
+
m_compression_algorithm
);
108
}
109
110
m_input_stream
.push(io_source,
m_buffer_size
);
111
m_is_open
=
true
;
112
}
113
120
bool
is_open
()
const
{
return
m_is_open
; }
121
127
bool
read
(ReadoutType& element)
128
{
129
if
(!
m_is_open
)
130
return
false
;
131
m_input_stream
.read(
reinterpret_cast<
char
*
>
(&element),
sizeof
(element));
// NOLINT
132
return
(
m_input_stream
.gcount() ==
sizeof
(element));
133
}
134
138
void
close
()
139
{
140
m_input_stream
.reset();
141
m_is_open
=
false
;
142
}
143
144
private
:
145
// Config parameters
146
std::string
m_filename
;
147
size_t
m_buffer_size
;
148
std::string
m_compression_algorithm
;
149
150
// Internals
151
filtering_istream_t
m_input_stream
;
152
bool
m_is_open
=
false
;
153
};
154
155
}
// namespace datahandlinglibs
156
}
// namespace dunedaq
157
158
#endif
// DATAHANDLINGLIBS_INCLUDE_DATAHANDLINGLIBS_UTILS_BUFFEREDFILEREADER_HPP_
DataHandlingIssues.hpp
TLVL_WORK_STEPS
@ TLVL_WORK_STEPS
Definition
IfaceWrapper.cpp:52
ERS_HERE
#define ERS_HERE
Definition
LocalContext.hpp:141
ReadoutLogging.hpp
dunedaq::datahandlinglibs::BufferedFileReader::operator=
BufferedFileReader & operator=(BufferedFileReader &&)=delete
BufferedFileReader is not move-assignable.
dunedaq::datahandlinglibs::BufferedFileReader::open
void open(std::string filename, size_t buffer_size, std::string compression_algorithm="None")
Definition
BufferedFileReader.hpp:82
dunedaq::datahandlinglibs::BufferedFileReader::m_buffer_size
size_t m_buffer_size
Definition
BufferedFileReader.hpp:147
dunedaq::datahandlinglibs::BufferedFileReader::io_source_t
boost::iostreams::file_descriptor_source io_source_t
Definition
BufferedFileReader.hpp:45
dunedaq::datahandlinglibs::BufferedFileReader::operator=
BufferedFileReader & operator=(const BufferedFileReader &)=delete
BufferedFileReader is not copy-assginable.
dunedaq::datahandlinglibs::BufferedFileReader::BufferedFileReader
BufferedFileReader(const BufferedFileReader &)=delete
BufferedFileReader is not copy-constructible.
dunedaq::datahandlinglibs::BufferedFileReader::close
void close()
Definition
BufferedFileReader.hpp:138
dunedaq::datahandlinglibs::BufferedFileReader::m_is_open
bool m_is_open
Definition
BufferedFileReader.hpp:152
dunedaq::datahandlinglibs::BufferedFileReader::filtering_istream_t
boost::iostreams::filtering_stream< boost::iostreams::input, char, std::char_traits< char >, aligned_allocator_t > filtering_istream_t
Definition
BufferedFileReader.hpp:47
dunedaq::datahandlinglibs::BufferedFileReader::is_open
bool is_open() const
Definition
BufferedFileReader.hpp:120
dunedaq::datahandlinglibs::BufferedFileReader::m_compression_algorithm
std::string m_compression_algorithm
Definition
BufferedFileReader.hpp:148
dunedaq::datahandlinglibs::BufferedFileReader::m_input_stream
filtering_istream_t m_input_stream
Definition
BufferedFileReader.hpp:151
dunedaq::datahandlinglibs::BufferedFileReader::BufferedFileReader
BufferedFileReader()
Definition
BufferedFileReader.hpp:67
dunedaq::datahandlinglibs::BufferedFileReader::m_filename
std::string m_filename
Definition
BufferedFileReader.hpp:146
dunedaq::datahandlinglibs::BufferedFileReader::BufferedFileReader
BufferedFileReader(std::string filename, size_t buffer_size, std::string compression_algorithm="None")
Definition
BufferedFileReader.hpp:59
dunedaq::datahandlinglibs::BufferedFileReader::aligned_allocator_t
boost::alignment::aligned_allocator< io_source_t::char_type, Alignment > aligned_allocator_t
Definition
BufferedFileReader.hpp:46
dunedaq::datahandlinglibs::BufferedFileReader::read
bool read(ReadoutType &element)
Definition
BufferedFileReader.hpp:127
dunedaq::datahandlinglibs::BufferedFileReader::BufferedFileReader
BufferedFileReader(BufferedFileReader &&)=delete
BufferedFileReader is not move-constructible.
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
dunedaq::datahandlinglibs::logging::TLVL_WORK_STEPS
@ TLVL_WORK_STEPS
Definition
ReadoutLogging.hpp:23
dunedaq::datahandlinglibs
Definition
DataHandlingConcept.hpp:16
dunedaq
Including Qt Headers.
Definition
module.cpp:16
dunedaq::BufferedReaderWriterConfigurationError
SourceID[" << sourceid << "] Command daqdataformats::SourceID Readout Initialization std::string initerror BufferedReaderWriterConfigurationError
Definition
DataHandlingIssues.hpp:41
tablepositions::filename
@ filename
Definition
ui_constants.hpp:11
Generated on
for DUNE-DAQ by
1.17.0