lintel 0.2.0
Loading...
Searching...
No Matches
SharedMemoryService.h
Go to the documentation of this file.
1#ifndef LINTEL_SHAREDMEMORYSERVICE_H
2#define LINTEL_SHAREDMEMORYSERVICE_H
3
4#include <filesystem>
5#include <map>
6#include <memory>
7#include <mutex>
8#include <ostream>
9#include <set>
10#include <utility>
11
21
22namespace lintel {
25class SharedMemorySegmentHandle;
26
34 : public PropertyRegistration<SharedMemoryService>
36 , public std::enable_shared_from_this<SharedMemoryService>
37{
38private:
39 // variables
40 std::map<std::string, std::shared_ptr<SharedMemorySegmentHandle>> m_segments;
41 mutable std::mutex m_segmentsMutex;
42 std::size_t m_generation = 0;
43 std::shared_ptr<SchedulerService> m_schedulerService;
44 // properties
45 std::shared_ptr<Property<std::chrono::seconds>> m_scheduleRate;
46 std::shared_ptr<Property<bool>> m_autoExtend;
47 std::shared_ptr<Property<std::size_t>> m_autoExtendEpsilon;
48
49 // initializer function
50 static std::map<std::string, std::shared_ptr<SharedMemorySegmentHandle>> create(
51 const std::vector<std::shared_ptr<SharedMemorySegment>> &set);
52
53 void onCheck();
54
55public:
60 SharedMemoryService(const std::shared_ptr<SharedMemorySegmentManager> &sharedMemorySegmentManager,
61 std::shared_ptr<SchedulerService> schedulerService,
62 const std::shared_ptr<ProcessName> &processName);
63
64 ~SharedMemoryService() override = default;
65
67 void onInitialize() override;
68
72 [[nodiscard]] std::size_t getGeneration() const;
73
75 void growOf(const std::shared_ptr<SharedMemorySegment> &segment, std::size_t grow) override;
76
78 void shrinkOf(const std::shared_ptr<SharedMemorySegment> &segment) override;
79
85 [[nodiscard]] SharedMemorySegmentInfo showStateOf(const std::shared_ptr<SharedMemorySegment> &segment) const override;
86
89 std::map<std::string, std::shared_ptr<SharedMemorySegmentHandle>> &segmentsOf() { return m_segments; }
90
94 std::mutex &segmentsMutexOf() { return m_segmentsMutex; }
95
101 SharedMemorySegmentHandle &segmentOf(const std::string &name);
102
109 ShmSegmentAccessor getSegmentAccessor(const std::shared_ptr<SharedMemorySegment> &segment);
110};
111
112}// namespace lintel
113#endif// LINTEL_SHAREDMEMORYSERVICE_H
Definition ISharedMemoryService.h:12
Definition PropertyRegistration.h:14
Definition ShmConstructors.h:33
Definition SharedMemorySegmentInfo.h:13
Definition SharedMemoryService.h:37
void shrinkOf(const std::shared_ptr< SharedMemorySegment > &segment) override
ShmSegmentAccessor getSegmentAccessor(const std::shared_ptr< SharedMemorySegment > &segment)
std::size_t getGeneration() const
SharedMemoryService(const std::shared_ptr< SharedMemorySegmentManager > &sharedMemorySegmentManager, std::shared_ptr< SchedulerService > schedulerService, const std::shared_ptr< ProcessName > &processName)
SharedMemorySegmentHandle & segmentOf(const std::string &name)
void growOf(const std::shared_ptr< SharedMemorySegment > &segment, std::size_t grow) override
SharedMemorySegmentInfo showStateOf(const std::shared_ptr< SharedMemorySegment > &segment) const override
void onInitialize() override
~SharedMemoryService() override=default
std::map< std::string, std::shared_ptr< SharedMemorySegmentHandle > > & segmentsOf()
Definition SharedMemoryService.h:89
std::mutex & segmentsMutexOf()
Definition SharedMemoryService.h:94
Definition ShmSegmentAccessor.h:21
Definition BaseFeature.h:6
constexpr std::string_view type_name()
Definition TypeName.h:9