1#ifndef LINTEL_SHAREDMEMORYREPOSITORY_H
2#define LINTEL_SHAREDMEMORYREPOSITORY_H
8#include <boost/container/map.hpp>
9#include <boost/container/vector.hpp>
27 std::shared_ptr<SharedMemorySegment> m_sharedMemorySegment;
28 std::size_t m_sizeOfData;
29 std::string m_sharedMemoryRepository;
36 return std::is_base_of_v<JsonSerializable, TYPE> || std::is_same_v<shm::String, TYPE> || std::is_arithmetic_v<TYPE>;
112template<
typename DATA,
typename DAO, std::
size_t MaxSize>
122 mutable std::array<DATA, MaxSize> *m_array;
123 mutable std::size_t m_generation;
133 m_array = &shm::constructArray<DATA, MaxSize>(
142 const std::shared_ptr<SharedMemorySegment> &
segment,
156 writer->String(
"repository");
157 writer->String(
"SharedMemoryArrayRepository");
162 if constexpr (std::is_base_of<JsonSerializable, DAO>()) {
165 }
else if constexpr (std::is_same<shm::String, DATA>()) {
173 bool deserialize(
const rapidjson::Value &
obj)
override {
throw std::runtime_error(
"Unsupported operation"); }
176template<
typename DATA,
typename DAO>
185 using Vector = boost::container::vector<
DATA,
186 boost::interprocess::allocator<DATA, boost::interprocess::managed_mapped_file::segment_manager>>;
187 mutable Vector *m_vector;
188 mutable std::size_t m_generation;
206 const std::shared_ptr<SharedMemorySegment> &
segment,
220 writer->String(
"repository");
221 writer->String(
"SharedMemoryVectorRepository");
226 if constexpr (std::is_base_of<JsonSerializable, DAO>()) {
229 }
else if constexpr (std::is_same<shm::String, DATA>()) {
237 bool deserialize(
const rapidjson::Value &
obj)
override {
throw std::runtime_error(
"Unsupported operation"); }
240template<
typename KEY,
typename VALUE,
typename KeyDao,
typename ValueDao>
251 using Map = boost::container::map<
KEY,
254 boost::interprocess::allocator<std::pair<const KEY, VALUE>,
255 boost::interprocess::managed_mapped_file::segment_manager>>;
257 mutable std::size_t m_generation;
275 const std::shared_ptr<SharedMemorySegment> &
segment,
294 writer->String(
"repository");
295 writer->String(
"SharedMemoryMapRepository");
298 for (
auto &iterator :
getMap()) {
299 const KEY &
key = iterator.first;
300 const VALUE &value = iterator.second;
304 if constexpr (std::is_base_of<JsonSerializable, KeyDao>()) {
307 }
else if constexpr (std::is_same<shm::String, KEY>()) {
311 if constexpr (std::is_base_of<JsonSerializable, ValueDao>()) {
314 }
else if constexpr (std::is_same<shm::String, VALUE>()) {
315 writer->String(value.c_str());
323 bool deserialize(
const rapidjson::Value &
obj)
override {
throw std::runtime_error(
"Unsupported operation"); }
326template<
typename DATA,
typename DAO>
335 mutable DATA *m_data;
336 mutable std::size_t m_generation;
354 const std::shared_ptr<SharedMemorySegment> &
segment,
368 writer->String(
"repository");
369 writer->String(
"SharedMemoryObjectRepository");
371 if constexpr (std::is_base_of<JsonSerializable, DAO>()) {
374 }
else if constexpr (std::is_same<shm::String, DATA>()) {
380 bool deserialize(
const rapidjson::Value &
obj)
override {
throw std::runtime_error(
"Unsupported operation"); }
#define LOG_TRACE(message,...)
Definition LoggerService.h:128
Definition JsonSerializable.h:17
Definition SharedMemoryRepository.h:120
std::shared_ptr< SharedMemoryService > m_sharedMemoryService
Definition SharedMemoryRepository.h:126
bool deserialize(const rapidjson::Value &obj) override
Definition SharedMemoryRepository.h:173
SharedMemoryType getType() const override
Definition SharedMemoryRepository.h:150
std::array< DATA, MaxSize > & getArray() const
Definition SharedMemoryRepository.h:129
SharedMemoryArrayRepository(const std::shared_ptr< SharedMemoryService > &sharedMemoryService, const std::shared_ptr< SharedMemorySegment > &segment, int32_t codeVersion, std::string uuid)
Definition SharedMemoryRepository.h:141
void serialize(rapidjson::Writer< rapidjson::StringBuffer > *writer) const override
Definition SharedMemoryRepository.h:152
Definition SharedMemoryRepository.h:249
SharedMemoryType getType() const override
Definition SharedMemoryRepository.h:288
std::shared_ptr< SharedMemoryService > m_sharedMemoryService
Definition SharedMemoryRepository.h:260
SharedMemoryMapRepository(const std::shared_ptr< SharedMemoryService > &sharedMemoryService, const std::shared_ptr< SharedMemorySegment > &segment, int32_t codeVersion, std::string uuid, int32_t sizeOfData=sizeof(VALUE))
Definition SharedMemoryRepository.h:274
Map & getMap() const
Definition SharedMemoryRepository.h:262
bool deserialize(const rapidjson::Value &obj) override
Definition SharedMemoryRepository.h:323
void serialize(rapidjson::Writer< rapidjson::StringBuffer > *writer) const override
Definition SharedMemoryRepository.h:290
Definition SharedMemoryRepository.h:333
void serialize(rapidjson::Writer< rapidjson::StringBuffer > *writer) const override
Definition SharedMemoryRepository.h:364
std::shared_ptr< SharedMemoryService > m_sharedMemoryService
Definition SharedMemoryRepository.h:339
bool deserialize(const rapidjson::Value &obj) override
Definition SharedMemoryRepository.h:380
DATA & getData() const
Definition SharedMemoryRepository.h:341
SharedMemoryObjectRepository(const std::shared_ptr< SharedMemoryService > &sharedMemoryService, const std::shared_ptr< SharedMemorySegment > &segment, int32_t codeVersion, std::string uuid)
Definition SharedMemoryRepository.h:353
SharedMemoryType getType() const override
Definition SharedMemoryRepository.h:362
Definition SharedMemoryRepository.h:86
ReadLockGuard(const ReadLockGuard &)=delete
ReadLockGuard & operator=(const ReadLockGuard &)=delete
~ReadLockGuard()
Definition SharedMemoryRepository.h:90
ReadLockGuard(const SharedMemoryRepository &owner)
Definition SharedMemoryRepository.h:88
Definition SharedMemoryRepository.h:25
const std::string & getSharedMemoryRepository() const
std::size_t getSizeOfData() const
virtual void onMigrate(int32_t currentActiveVersion)=0
const std::shared_ptr< SharedMemorySegment > & getSharedMemorySegment() const
std::string_view getTypeName() const
Definition SharedMemoryRepository.h:72
virtual void onAcquireReadLock() const
Definition SharedMemoryRepository.h:101
int32_t getCodeVersion() const
virtual void onReleaseReadLock() const
Definition SharedMemoryRepository.h:104
static constexpr bool isSerializable()
Definition SharedMemoryRepository.h:34
const std::string & getUuid() const
SharedMemoryRepository(std::shared_ptr< SharedMemorySegment > sharedMemorySegment, std::size_t sizeOfData, std::string_view sharedMemoryRepository, int32_t codeVersion, std::string uuid)
virtual SharedMemoryType getType() const =0
~SharedMemoryRepository() override=default
Definition SharedMemoryRepository.h:183
SharedMemoryType getType() const override
Definition SharedMemoryRepository.h:214
void serialize(rapidjson::Writer< rapidjson::StringBuffer > *writer) const override
Definition SharedMemoryRepository.h:216
Vector & getVector() const
Definition SharedMemoryRepository.h:193
SharedMemoryVectorRepository(const std::shared_ptr< SharedMemoryService > &sharedMemoryService, const std::shared_ptr< SharedMemorySegment > &segment, int32_t codeVersion, std::string uuid)
Definition SharedMemoryRepository.h:205
bool deserialize(const rapidjson::Value &obj) override
Definition SharedMemoryRepository.h:237
std::shared_ptr< SharedMemoryService > m_sharedMemoryService
Definition SharedMemoryRepository.h:191
Definition BaseFeature.h:6
SharedMemoryType
Definition SharedMemoryRepository.h:19
@ Vector
Definition SharedMemoryRepository.h:19
@ Array
Definition SharedMemoryRepository.h:19
@ Map
Definition SharedMemoryRepository.h:19
@ Object
Definition SharedMemoryRepository.h:19
constexpr std::string_view type_name()
Definition TypeName.h:9