MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/processing/failure/FailureManager.hh

103 lines
2.4 KiB
C++

/*
* 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 <memory_resource>
#include <deque>
#include <utility>
namespace processing { namespace failure {
class FailureManager : public FailureManagerInterface {
//todo: ïîäóìàòü íàä map.
typedef std::deque<
std::pair<FailureId, FaliureInterface *>,
std::pmr::polymorphic_allocator< std::pair<FailureId, FaliureInterface *> >
> 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_ */