11#ifndef DDTMEMORYACCESSOR_H_
12#define DDTMEMORYACCESSOR_H_
14#include <boost/circular_buffer.hpp>
15#include <boost/interprocess/containers/string.hpp>
16#include <boost/interprocess/containers/vector.hpp>
17#include <boost/interprocess/managed_shared_memory.hpp>
18#include <boost/signals2/signal.hpp>
27namespace ip = boost::interprocess;
67typedef ip::basic_string<char, std::char_traits<char>,
char_allocator>
73typedef boost::signals2::signal<void()>
SignalT;
116 meta_data(md_length, uint8_t(), void_alloc),
118 data(vector_length, uint8_t(), void_alloc) {}
207 DataSample(
const int32_t
id,
const int md_length,
const int vector_length)
211 data(vector_length) {}
255 const int vector_length)
281 const std::string &data_stream_identifier,
282 DdtLogger *logger,
const uint64_t time_window = 0,
283 const int32_t reading_interval = 10);
326 void WriteData(
const int32_t writer_index,
const int32_t topic_id,
327 const int32_t sample_id,
const uint8_t *datavec,
328 const int32_t datavec_size,
const uint8_t *metadata_vec,
329 const int32_t metadatavec_size,
const uint64_t timestamp);
369 void get_data_packet(std::string *stream_identifier, uint32_t *checksum,
370 int32_t *sample_length, int64_t *writer_idx,
443 void Init(
const std::string &mem_id,
const std::string &stream_id,
444 DdtLogger *ddt_logger,
const uint64_t time_win,
445 const int32_t interval);
456 int32_t CreateNewShm();
462 int32_t SearchCircBuffer();
468 int32_t SearchWriterIndex();
470 ip::managed_shared_memory *managed_shm;
477 ip::managed_shared_memory::segment_manager>
483 typedef boost::circular_buffer<DataPacketShared, cb_alloc> cb;
486 std::string data_stream_identifier;
487 uint64_t time_window;
488 int32_t reading_interval;
490 std::atomic<int64_t> *writer_index;
492 int64_t reader_index;
494 int32_t number_of_unread_elements;
495 int32_t circ_buf_capacity;
496 int32_t number_of_lost_packages;
498 std::mutex circ_buffer_mutex;
499 std::mutex packets_mutex;
503 std::promise<void> exit_signal;
504 std::future<void> future_object;
506 std::atomic<bool> reading_active;
507 std::atomic<bool> pub_unreg;
508 std::atomic<bool> compute_checksum;
510 int32_t max_data_sample_size;
511 int additional_space;
513 std::list<DataPacketShared *> packets;
Definition ddtLogger.hpp:43
virtual ~DdtMemoryAccessor()
Definition ddtMemoryAccessor.cpp:28
void set_compute_checksum(const bool compute_crc)
Definition ddtMemoryAccessor.cpp:542
void StopReading()
Definition ddtMemoryAccessor.cpp:317
bool get_is_initialized() const
Definition ddtMemoryAccessor.cpp:559
bool get_data_available()
Definition ddtMemoryAccessor.cpp:426
void set_pub_unreg(const bool STATE)
Definition ddtMemoryAccessor.cpp:540
void CloseSharedMemory()
Definition ddtMemoryAccessor.cpp:73
void StartReading()
Definition ddtMemoryAccessor.cpp:302
int32_t OpenSharedMemory()
Definition ddtMemoryAccessor.cpp:117
void NewData()
Definition ddtMemoryAccessor.cpp:345
int32_t get_number_of_unread_elements()
Definition ddtMemoryAccessor.cpp:436
void WriteData(const int32_t writer_index, const int32_t topic_id, const int32_t sample_id, const uint8_t *datavec, const int32_t datavec_size, const uint8_t *metadata_vec, const int32_t metadatavec_size, const uint64_t timestamp)
Definition ddtMemoryAccessor.cpp:183
void Reattach()
Definition ddtMemoryAccessor.cpp:337
void Reset()
Definition ddtMemoryAccessor.cpp:527
void get_data_packet(std::string *stream_identifier, uint32_t *checksum, int32_t *sample_length, int64_t *writer_idx, uint64_t *timestamp, DataSample **sample)
Definition ddtMemoryAccessor.cpp:441
DdtMemoryAccessor()
Definition ddtMemoryAccessor.cpp:17
SignalT * DataAvailableSignal()
Definition ddtMemoryAccessor.cpp:523
bool get_compute_checksum() const
Definition ddtMemoryAccessor.cpp:555
void SetSizeConstraints(const int32_t max_sample_size, const int32_t space)
Definition ddtMemoryAccessor.cpp:331
const uint32_t ComputeChecksum(DataSampleShared *const data_sample_shared)
Definition ddtMemoryAccessor.cpp:80
Contains common used constants. This file shall contain constants that can be used by all application...
Class to wrap the usage of log4cplus as logging utility. This file provides a wrapper class for the u...
ip::allocator< char, segment_manager_t > char_allocator
Definition ddtMemoryAccessor.hpp:62
ip::vector< uint8_t, uint8_allocator > uint8_vector
Definition ddtMemoryAccessor.hpp:47
ip::allocator< uint16_t, segment_manager_t > uint16_allocator
Definition ddtMemoryAccessor.hpp:52
ip::allocator< uint8_t, segment_manager_t > uint8_allocator
Definition ddtMemoryAccessor.hpp:42
ip::vector< uint16_t, uint16_allocator > uint16_vector
Definition ddtMemoryAccessor.hpp:57
ip::allocator< void, segment_manager_t > void_allocator
Definition ddtMemoryAccessor.hpp:37
ip::basic_string< char, std::char_traits< char >, char_allocator > char_string
Definition ddtMemoryAccessor.hpp:68
boost::signals2::signal< void()> SignalT
Definition ddtMemoryAccessor.hpp:73
ip::managed_shared_memory::segment_manager segment_manager_t
Definition ddtMemoryAccessor.hpp:32
Definition ddtClient.hpp:32
const int META_DATA_LENGTH
Definition ddtConstants.hpp:59
Definition ddtMemoryAccessor.hpp:126
DataPacketShared(const char *const ds_id, const int32_t check, const int vector_length, const void_allocator &void_alloc)
Definition ddtMemoryAccessor.hpp:164
int32_t sample_length
Definition ddtMemoryAccessor.hpp:140
DataSampleShared sample
Definition ddtMemoryAccessor.hpp:155
uint32_t checksum
Definition ddtMemoryAccessor.hpp:135
uint64_t timestamp
Definition ddtMemoryAccessor.hpp:150
int64_t writer_index
Definition ddtMemoryAccessor.hpp:145
char_string data_stream_identifier
Definition ddtMemoryAccessor.hpp:130
int32_t sample_length
Definition ddtMemoryAccessor.hpp:231
DataPacket(const char *const ds_id, const int32_t check, const int vector_length)
Definition ddtMemoryAccessor.hpp:254
uint32_t checksum
Definition ddtMemoryAccessor.hpp:226
DataSample sample
Definition ddtMemoryAccessor.hpp:246
std::string data_stream_identifier
Definition ddtMemoryAccessor.hpp:221
int64_t writer_index
Definition ddtMemoryAccessor.hpp:236
uint64_t timestamp
Definition ddtMemoryAccessor.hpp:241
Definition ddtMemoryAccessor.hpp:80
int32_t topic_id
Definition ddtMemoryAccessor.hpp:84
int32_t sample_id
Definition ddtMemoryAccessor.hpp:99
int32_t meta_data_length
Definition ddtMemoryAccessor.hpp:89
uint8_vector meta_data
Definition ddtMemoryAccessor.hpp:94
uint8_vector data
Definition ddtMemoryAccessor.hpp:104
DataSampleShared(const int32_t id, const int md_length, const int vector_length, const void_allocator &void_alloc)
Definition ddtMemoryAccessor.hpp:113
Definition ddtMemoryAccessor.hpp:175
std::vector< uint8_t > meta_data
Definition ddtMemoryAccessor.hpp:189
int32_t topic_id
Definition ddtMemoryAccessor.hpp:179
DataSample(const int32_t id, const int md_length, const int vector_length)
Definition ddtMemoryAccessor.hpp:207
std::vector< uint8_t > data
Definition ddtMemoryAccessor.hpp:199
int32_t sample_id
Definition ddtMemoryAccessor.hpp:194
int32_t meta_data_length
Definition ddtMemoryAccessor.hpp:184