UniSet  1.4.0
Открытые типы | Открытые члены | Защищенные типы | Защищенные члены | Защищенные данные
Шаблон класса TriggerOutput< Caller, OutIdType, ValueType >

#include <TriggerOutput.h>

Полный список членов класса

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

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

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

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

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

typedef std::map< OutIdType,
ValueType > 
OutList

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

void check (OutIdType newout)

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

OutList outs
Caller * cal
Action act

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

template<class Caller, typename OutIdType, typename ValueType>
class TriggerOutput< Caller, OutIdType, ValueType >

Описание
Этот триггер гарантирует, что значению "val" будет равен всегда только один выход (или ни одного). При помощи TriggerOutput::set(), на определённый выход подаётся "val"(val также может быть = "0"), при этом все остальные выходы выставляются в "0". Работает в следующей последовательности: сперва выставляются все выходы в "0", а потом уже нужный (единственный) выход выставляется в "val".

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

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

Предупреждения:
Нет блокирования совместного доступа(не рассчитан на работу в многопоточной среде).
Пример использования
    #include "TriggerOutput.h"
    
    class MyClass
    {
        public:
            MyClass(){};
            ~MyClass(){};
        
            void out(int out_id, int val){ cout << "TriggerOUT out="<< out_id << " val=" << val <<endl;}            
        ...
    };

    ...
    MyClass rec;
    // Создание
    TriggerOutput<MyClass,int,int> tr_out(&rec, &MyClass::out);
    // формируем OUT триггер с двумя 'выходами'
    TriggerOutput<MyClass,int,int> tr_out(&rec, &MyClass::out);
    tr_out.add(1,0);
    tr_out.add(2,0);

    ...
    // Использование
    // подаём сперва на первый 'выход' значение, второй должен стать в "0",
    // потом на другой...
    tr_out.set(1,4);
    tr_out.set(2,3);

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

template<class Caller, typename OutIdType, typename ValueType>
typedef void(Caller::* TriggerOutput< Caller, OutIdType, ValueType >::Action)(OutIdType out, ValueType val)

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

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

Методы

template<class Caller , typename OutIdType , typename ValueType >
void TriggerOutput< Caller, OutIdType, ValueType >::add ( OutIdType  out,
ValueType  val 
)

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

Аргументы:
out- идентификатор 'выхода'
val- новое значение
template<class Caller , typename OutIdType , typename ValueType >
bool TriggerOutput< Caller, OutIdType, ValueType >::getState ( OutIdType  out)

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

template<class Caller , typename OutIdType , typename ValueType >
void TriggerOutput< Caller, OutIdType, ValueType >::remove ( OutIdType  out)

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

template<class Caller , typename OutIdType , typename ValueType >
void TriggerOutput< Caller, OutIdType, ValueType >::set ( OutIdType  out,
ValueType  val 
)

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

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

Объявления и описания членов классов находятся в файлах: