UniSet  2.6.0
Открытые типы | Открытые члены | Защищенные члены | Защищенные данные | Полный список членов класса
Шаблон класса uniset::TriggerOR< Caller, InputType >
Граф связей класса uniset::TriggerOR< Caller, InputType >:
Collaboration graph
[см. легенду]

Открытые типы

typedef void(Caller::* Action )(bool newstate)
typedef std::unordered_map
< InputType, bool > 
InputMap

Открытые члены

 TriggerOR (Caller *r, Action a) noexcept
bool state () const noexcept
bool getState (InputType in) const noexcept
bool commit (InputType in, bool state)
void add (InputType in, bool state)
void remove (InputType in)
InputMap::const_iterator begin () noexcept
InputMap::const_iterator end () noexcept
void update ()
void reset ()

Защищенные члены

void check ()

Защищенные данные

InputMap inputs
bool out
Caller * cal
Action act

Подробное описание

template<class Caller, typename InputType = int>
class uniset::TriggerOR< Caller, InputType >

Триггер "ИЛИ", со множеством входов. Логика включения следующая:

В конструкторе указывается функция, которая будет вызываться при ИЗМЕНЕНИИ состояния выхода.

Предупреждения
Нет блокирования совместного доступа(не рассчитан на работу в многопоточной среде).
Пример использования
#include "TriggerOR.h"
class MyClass
{
public:
MyClass(){};
~MyClass(){};
void out( bool newstate){ cout << "OR out state="<< newstate <<endl;}
...
};
...
MyClass rec;
// Создание
TriggerOR<MyClass> tr(&rec, &MyClass::out);
// Добавление 'входов'
tr.add(1,true);
tr.add(2,false);
tr.add(3,false);
tr.add(4,false);
...
// Использование:
// подаём на вход N1 "0"
// после чего, при изменении состояния 'выхода' будет вызвана функция MyClass::out, в которой производится
// фактическая обработка 'изменения состояния'
tr.commit(1,false);

Определения типов

template<class Caller , typename InputType = int>
typedef void(Caller::* uniset::TriggerOR< Caller, InputType >::Action)(bool newstate)

прототип функции вызова

Аргументы
newstate- новое состояние 'выхода'