MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/processing/failure/FailureManager.hh
2024-06-07 11:12:56 +03:00

103 lines
2.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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_ */