/* * MemoryLogHandler.h * * Created on: 24 апр. 2020 г. * Author: AAM */ #ifndef LOGGING_MEMORYLOGHANDLER_H_ #define LOGGING_MEMORYLOGHANDLER_H_ #include #include #include #include #include #include #include "ILogHandler.hh" #include "StorageManager.hh" namespace logging { class MemoryLogHandler : public ILogHandler { public: enum ACCUMULATION_POLICY { RESTRICTIVE = 0, EXPANSION = 1 }; private: std::size_t records_balance; std::size_t records_capacity; ACCUMULATION_POLICY accum_policy; std::mutex lock; typedef std::vector< char, std::pmr::polymorphic_allocator > RecordData; typedef std::deque< RecordData, std::pmr::polymorphic_allocator > Records; typedef std::map< base::record_priority, Records, std::greater, std::pmr::polymorphic_allocator< std::pair< const base::record_priority, Records > > > Collection; Collection records; StorageManager & storage; public: MemoryLogHandler( StorageManager &, std::pmr::memory_resource *, std::size_t ); /* Разместь журнальную запись в памяти хранилища. */ void publish( const LogRecord & ); /* Очистить память хранилища от записей.*/ void flush(); void process(); /* Установить вместительность сообщений. */ void set_capacity( std::size_t ); void set_accumulation_policy( ACCUMULATION_POLICY ); }; } #endif /* LOGGING_MEMORYLOGHANDLER_H_ */