Add fast queue to commons

This commit is contained in:
2020-05-20 12:40:32 +02:00
parent 399027340a
commit 2cae760d4a
6 changed files with 326 additions and 4 deletions
+40
View File
@@ -0,0 +1,40 @@
#ifndef FASTQUEUE_HPP
#define FASTQUEUE_HPP
#include <cstddef>
#include <cstdint>
#include <atomic>
template <class T>
class FastQueue {
const size_t slot_n_bytes_;
const size_t n_slots_;
char* buffer_;
std::atomic_int* buffer_status_;
uint16_t write_slot_id_;
uint16_t read_slot_id_;
public:
enum SLOT_STATUS {
EMPTY=0,
RESERVED=1,
READY=2
};
FastQueue(const size_t slot_data_n_bytes, const uint16_t n_slots);
virtual ~FastQueue();
T* get_metadata_buffer(const int slot_id);
char* get_data_buffer(const int slot_id);
int reserve();
void commit();
int read();
void release();
};
#endif //FASTQUEUE_HPP
+25
View File
@@ -0,0 +1,25 @@
#ifndef SF_DAQ_BUFFER_FORMATS_HPP
#define SF_DAQ_BUFFER_FORMATS_HPP
#include "buffer_config.hpp"
struct ImageMetadataBuffer
{
uint64_t pulse_id[core_buffer::WRITER_DATA_CACHE_N_IMAGES];
uint64_t frame_index[core_buffer::WRITER_DATA_CACHE_N_IMAGES];
uint32_t daq_rec[core_buffer::WRITER_DATA_CACHE_N_IMAGES];
uint8_t is_good_frame[core_buffer::WRITER_DATA_CACHE_N_IMAGES];
uint64_t data_n_bytes[core_buffer::WRITER_DATA_CACHE_N_IMAGES];
uint16_t n_pulses_in_buffer;
};
struct ImageMetadata
{
uint64_t pulse_id;
uint64_t frame_index;
uint32_t daq_rec;
uint8_t is_good_frame;
uint64_t data_n_bytes;
};
#endif //SF_DAQ_BUFFER_FORMATS_HPP