/* * FailureManager.h * * Created on: 4 окт. 2019 г. * Author: titov */ #ifndef SOURCE_PROCESSING_FAILUREMANAGER_H_ #define SOURCE_PROCESSING_FAILUREMANAGER_H_ #include "FailureInterface.hh" #include "FailureManagerInterface.hh" #include "../../driver/safety/ITermination.hh" #include #include #include namespace processing { namespace failure { class FailureManager : public FailureManagerInterface { //todo: подумать над map. typedef std::deque< std::pair, std::pmr::polymorphic_allocator< std::pair > > FaliureRecords; public: FailureManager( driver::safety::ITermination & terminator, std::pmr::memory_resource * memory ); bool isFailureActual() const; bool isFailureStored() const; bool checkFailureStored(FailureId id) const; void acknowledge(); void fault(); void registration( FailureId failure_id, FaliureInterface * failure ); //~FailureManager() = default; class FailureIterator { protected: FailureId position; const FaliureRecords & records; virtual bool check(); public: FailureIterator( FailureId pos, const FaliureRecords & records ); bool operator!=( const FailureIterator & fit ) const; FailureId operator* () const; const FailureIterator & operator++(); }; struct FailureStoredConteiner { FailureIterator begin() const; FailureIterator end() const; unsigned int getFailureCount() const; FailureStoredConteiner( const FaliureRecords & records ); private: const FaliureRecords & records; }; FailureStoredConteiner getFailureStoredId() const; class FailureTickedIterator : public FailureIterator { protected: virtual bool check(); public: FailureTickedIterator( FailureId pos, const FaliureRecords & records ) : FailureIterator(pos, records) {} }; struct FailureTickedConteiner { FailureTickedIterator begin() const; FailureTickedIterator end() const; FailureTickedConteiner( const FaliureRecords & records ); private: const FaliureRecords & records; }; FailureTickedConteiner getFailureTickedId() const; private: FaliureRecords failures; bool failure_stored; driver::safety::ITermination & terminator; }; }} #endif /* SOURCE_PROCESSING_FAILUREMANAGER_H_ */