DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::datahandlinglibs::FileSourceBuffer Class Reference

#include <FileSourceBuffer.hpp>

Public Member Functions

 FileSourceBuffer (int input_limit, int chunk_size=0)
 
 FileSourceBuffer (const FileSourceBuffer &)=delete
 FileSourceBuffer is not copy-constructible.
 
FileSourceBufferoperator= (const FileSourceBuffer &)=delete
 FileSourceBuffer is not copy-assginable.
 
 FileSourceBuffer (FileSourceBuffer &&)=delete
 FileSourceBuffer is not move-constructible.
 
FileSourceBufferoperator= (FileSourceBuffer &&)=delete
 FileSourceBuffer is not move-assignable.
 
void read (const std::string &sourcefile)
 
const int & num_elements ()
 
std::vector< std::uint8_t > & get ()
 

Private Attributes

int m_input_limit
 
int m_chunk_size
 
int m_element_count
 
std::string m_source_filename
 
std::ifstream m_rawdata_ifs
 
std::vector< std::uint8_t > m_input_buffer
 

Detailed Description

Definition at line 26 of file FileSourceBuffer.hpp.

Constructor & Destructor Documentation

◆ FileSourceBuffer() [1/3]

dunedaq::datahandlinglibs::FileSourceBuffer::FileSourceBuffer ( int input_limit,
int chunk_size = 0 )
inlineexplicit

◆ FileSourceBuffer() [2/3]

dunedaq::datahandlinglibs::FileSourceBuffer::FileSourceBuffer ( const FileSourceBuffer & )
delete

FileSourceBuffer is not copy-constructible.

◆ FileSourceBuffer() [3/3]

dunedaq::datahandlinglibs::FileSourceBuffer::FileSourceBuffer ( FileSourceBuffer && )
delete

FileSourceBuffer is not move-constructible.

Member Function Documentation

◆ get()

std::vector< std::uint8_t > & dunedaq::datahandlinglibs::FileSourceBuffer::get ( )
inline

Definition at line 89 of file FileSourceBuffer.hpp.

90 {
91 return std::ref(m_input_buffer);
92 }

◆ num_elements()

const int & dunedaq::datahandlinglibs::FileSourceBuffer::num_elements ( )
inline

Definition at line 87 of file FileSourceBuffer.hpp.

87{ return std::ref(m_element_count); }

◆ operator=() [1/2]

FileSourceBuffer & dunedaq::datahandlinglibs::FileSourceBuffer::operator= ( const FileSourceBuffer & )
delete

FileSourceBuffer is not copy-assginable.

◆ operator=() [2/2]

FileSourceBuffer & dunedaq::datahandlinglibs::FileSourceBuffer::operator= ( FileSourceBuffer && )
delete

FileSourceBuffer is not move-assignable.

◆ read()

void dunedaq::datahandlinglibs::FileSourceBuffer::read ( const std::string & sourcefile)
inline

Definition at line 41 of file FileSourceBuffer.hpp.

42 {
43 m_source_filename = sourcefile;
44 try {
45
46 // Open file
47 m_rawdata_ifs.open(m_source_filename, std::ios::in | std::ios::binary);
48 if (!m_rawdata_ifs) {
49 throw CannotOpenFile(ERS_HERE, m_source_filename);
50 }
51
52 // Check file size
53 m_rawdata_ifs.ignore(std::numeric_limits<std::streamsize>::max());
54 std::streamsize filesize = m_rawdata_ifs.gcount();
55 if (filesize > m_input_limit) { // bigger than configured limit
56 std::ostringstream oss;
57 oss << "File size limit exceeded, "
58 << "filesize is " << filesize << ", "
59 << "configured limit is " << m_input_limit << ", "
60 << "filename is " << m_source_filename;
62 }
63
64 // Check for exact match
65 if (m_chunk_size > 0) {
66 int remainder = filesize % m_chunk_size;
67 if (remainder > 0) {
68 ers::info(FileHasExtraData(ERS_HERE, remainder, filesize, m_chunk_size, m_source_filename));
69 }
70 // Set usable element count
71 m_element_count = filesize / m_chunk_size;
72 TLOG_DEBUG(TLVL_BOOKKEEPING) << "Available elements: " << std::to_string(m_element_count);
73 }
74
75 // Read file into input buffer
76 m_rawdata_ifs.seekg(0, std::ios::beg);
77 m_input_buffer.reserve(filesize);
78 m_input_buffer.insert(
79 m_input_buffer.begin(), std::istreambuf_iterator<char>(m_rawdata_ifs), std::istreambuf_iterator<char>());
80 TLOG_DEBUG(TLVL_BOOKKEEPING) << "Available bytes " << std::to_string(m_input_buffer.size());
81
82 } catch (const std::exception& ex) {
83 throw GenericConfigurationError(ERS_HERE, "Cannot read file: " + m_source_filename, ex.what());
84 }
85 }
#define ERS_HERE
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112
SourceID[" << sourceid << "] Command daqdataformats::SourceID Readout Initialization std::string initerror Configuration std::string conferror GenericConfigurationError
void warning(const Issue &issue)
Definition ers.hpp:115
void info(const Issue &issue)
Definition ers.hpp:95

Member Data Documentation

◆ m_chunk_size

int dunedaq::datahandlinglibs::FileSourceBuffer::m_chunk_size
private

Definition at line 97 of file FileSourceBuffer.hpp.

◆ m_element_count

int dunedaq::datahandlinglibs::FileSourceBuffer::m_element_count
private

Definition at line 98 of file FileSourceBuffer.hpp.

◆ m_input_buffer

std::vector<std::uint8_t> dunedaq::datahandlinglibs::FileSourceBuffer::m_input_buffer
private

Definition at line 103 of file FileSourceBuffer.hpp.

◆ m_input_limit

int dunedaq::datahandlinglibs::FileSourceBuffer::m_input_limit
private

Definition at line 96 of file FileSourceBuffer.hpp.

◆ m_rawdata_ifs

std::ifstream dunedaq::datahandlinglibs::FileSourceBuffer::m_rawdata_ifs
private

Definition at line 102 of file FileSourceBuffer.hpp.

◆ m_source_filename

std::string dunedaq::datahandlinglibs::FileSourceBuffer::m_source_filename
private

Definition at line 99 of file FileSourceBuffer.hpp.


The documentation for this class was generated from the following file: