UniSet 2.32.1
Открытые типы | Открытые члены | Защищенные типы | Защищенные члены | Защищенные данные | Полный список членов класса
Шаблон класса uniset::TriggerOUT< Caller, OutIdType, ValueType >

#include <TriggerOUT.h>

Граф связей класса uniset::TriggerOUT< Caller, OutIdType, ValueType >:
Collaboration graph
[см. легенду]

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

typedef void(Caller::* Action) (OutIdType out, ValueType val)
 

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

 TriggerOUT (Caller *r, Action a) noexcept
 
bool getState (OutIdType out) const noexcept
 
void set (OutIdType out, ValueType val)
 
void add (OutIdType out, ValueType val)
 
void remove (OutIdType out) noexcept
 
void update ()
 
void reset ()
 

Защищенные типы

typedef std::unordered_map< OutIdType, ValueType > OutList
 

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

void resetOuts (OutIdType outIgnore)
 

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

OutList outs
 
Caller * cal
 
Action act
 

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

template<class Caller, typename OutIdType = int, typename ValueType = bool>
class uniset::TriggerOUT< Caller, OutIdType, ValueType >
Описание
Этот триггер гарантирует, что значению "val" будет равен всегда только один выход (или ни одного). При помощи TriggerOUT::set(), на определённый выход подаётся "val"(val также может быть = "0"), при этом все остальные выходы выставляются в "0". Работает в следующей последовательности: сперва выставляются все выходы в "0", а потом уже нужный (единственный) выход выставляется в "val".

Полезен для случаев, когда, например, команда "включить" и "отключить" подается на разные выходы. В этом случае тригер не позволяет иметь на выходах противоречивое состояние.

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

Предупреждения
Нет блокирования совместного доступа(не рассчитан на работу в многопоточной среде).
Пример использования
#include "TriggerOUT.h"
class MyClass
{
public:
MyClass(){};
~MyClass(){};
void out(int out_id, int val){ cout << "TriggerOUT out="<< out_id << " val=" << val <<endl;}
...
};
...
MyClass rec;
// Создание:
TriggerOUT<MyClass,int,int> tr_out(&rec, &MyClass::out);
// формируем OUT триггер с двумя 'выходами'
tr_out.add(1,0);
tr_out.add(2,0);
...
// Использование:
// подаём сперва на первый 'выход' значение, второй должен стать в "0",
// потом на другой...
tr_out.set(1,4);
cout << ( tr_out.getState(2) !=0 ? "FAIL" : "OK" ) << endl;
tr_out.set(2,3);
cout << ( tr_out.getState(1) !=0 ? "FAIL" : "OK" ) << endl;

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

◆ Action

template<class Caller , typename OutIdType = int, typename ValueType = bool>
typedef void(Caller::* uniset::TriggerOUT< Caller, OutIdType, ValueType >::Action) (OutIdType out, ValueType val)

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

Аргументы
out- идентификатор 'выхода'
val- новое значение

Методы

◆ add()

template<class Caller , typename OutIdType = int, typename ValueType = bool>
void uniset::TriggerOUT< Caller, OutIdType, ValueType >::add ( OutIdType out,
ValueType val )

добавить новый 'выход' и установить начальное значение.

Аргументы
out- идентификатор 'выхода'
val- новое значение

◆ getState()

template<class Caller , typename OutIdType = int, typename ValueType = bool>
bool uniset::TriggerOUT< Caller, OutIdType, ValueType >::getState ( OutIdType out) const
noexcept

получить текущее значение указанного 'выхода'

◆ remove()

template<class Caller , typename OutIdType = int, typename ValueType = bool>
void uniset::TriggerOUT< Caller, OutIdType, ValueType >::remove ( OutIdType out)
noexcept

удалить указанный 'выход'

◆ set()

template<class Caller , typename OutIdType = int, typename ValueType = bool>
void uniset::TriggerOUT< Caller, OutIdType, ValueType >::set ( OutIdType out,
ValueType val )

установить значение одного из 'выходов'

Аргументы
out- идентификатор 'выхода'
val- новое значение