Шаблон класса gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >

Хранитель значения и data-source для него. Подробнее...

#include <value_holder.hpp>

Граф наследования:gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >:

gemont_1::value_holder_as_trait_t< Access_type, Data_source_value_type, Value_extractor, Data_source >

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

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

typedef nonconst_suffix_t
< Access_type,
Data_source_value_type,
Value_extractor, Data_source > 
nonconst_accessor_t
 Удобный псевдоним.
typedef const_suffix_t
< Access_type > 
const_accessor_t
 Удобный псевдоним.

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

 value_holder_t (const std::string &name, const std::string &data_class)
 Инициализирующий конструктор.
 value_holder_t (const std::string &name, const std::string &data_class, const Access_type &initial)
 Инициализирующий конструктор.
 value_holder_t (const std::string &name, const std::string &data_class, const Access_type &initial, void(*starter)(abstract_data_source_t &))
 Инициализирующий конструктор с возможностью автоматического запуска.
nonconst_accessor_t operator* ()
const_accessor_t operator* () const
void start ()
 Старт источника данных.
void stop ()
 Останов источника данных.

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

Access_type m_v
 Значение, к которому нужно обращаться через operator*().
Data_source m_ds
 Источник данных, в котором отражаются изменения m_v.


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

template<class Access_type, class Data_source_value_type = Access_type, class Value_extractor = simple_get< Data_source_value_type, Access_type >, class Data_source = scalar_data_source_t< Data_source_value_type >>
class gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >

Хранитель значения и data-source для него.

Начиная с:
v.1.0.9 Использование обычных scalar_data_source_t является трудоемким. Необходимо отдельно хранить скаляр, отдельно data-source для него. При этом после каждого (!) изменения скаляра необходимо обновить его значение в data-source. Естественно, это усложняет разработку и черевато трудноуловимыми ошибками.
Класс value_holder_t предназначен для объединения в одном объекте скалярного значения и data-source для него. Для доступа к значению необходимо использовать двойной оператор **:
gemont_1::value_holder_t< unsigned int >  value( ... );
(**value) = 16;

Если оператор * вызвается для неконстантного объекта value_holder_t, то считается, что хранимое значение обновляется и, поэтому, обновленное значение автоматически помещается в data-source.

Класс value_holder_t может использоваться не только для скалярных значений. Например, часто бывает необходимо мониторить размер некоторого STL-контейнера. В этом случае value_holder_t следует использовать так:

gemont_1::value_holder_t<
    std::set< std::string >,
    unsigned int,
    gemont_1::stl_container_size< std::set< std::string > > >
  value( ... );
(**value).insert( "my_string" );
В приведенном примере любое обновление содержимого контейнера будет автоматически приводить к изменению data-source.

Для того, чтобы стартовать источник данных сразу в конструкторе, необходимо использовать конструктор, который получает аргумент starter -- передать указатель на gemont_1::auto_start():

gemont_1::value_holder_t<
    std::set< std::string >,
    unsigned int,
    gemont_1::stl_container_size< std::set< std::string > > >
  value( "str1", "my_string", "n/a", &gemont_1::auto_start );
(**value).insert( "my_string" );
Примеры:

sysconf/main.cpp.


Конструктор(ы)

template<class Access_type , class Data_source_value_type = Access_type, class Value_extractor = simple_get< Data_source_value_type, Access_type >, class Data_source = scalar_data_source_t< Data_source_value_type >>
gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::value_holder_t ( const std::string &  name,
const std::string &  data_class 
) [inline]

Инициализирующий конструктор.

Источник данных создается в остановленном состоянии.

Аргументы:
name  Имя источника данных.
data_class  Имя класса данных.

Перекрестные ссылки gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::m_ds и gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::m_v.

template<class Access_type , class Data_source_value_type = Access_type, class Value_extractor = simple_get< Data_source_value_type, Access_type >, class Data_source = scalar_data_source_t< Data_source_value_type >>
gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::value_holder_t ( const std::string &  name,
const std::string &  data_class,
const Access_type &  initial 
) [inline]

Инициализирующий конструктор.

Источник данных создается в остановленном состоянии.

Аргументы:
name  Имя источника данных.
data_class  Имя класса данных.
initial  Начальное значение.

Перекрестные ссылки gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::m_ds и gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::m_v.

template<class Access_type , class Data_source_value_type = Access_type, class Value_extractor = simple_get< Data_source_value_type, Access_type >, class Data_source = scalar_data_source_t< Data_source_value_type >>
gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::value_holder_t ( const std::string &  name,
const std::string &  data_class,
const Access_type &  initial,
void(*)(abstract_data_source_t &)  starter 
) [inline]

Инициализирующий конструктор с возможностью автоматического запуска.

Аргументы:
name  Имя источника данных.
data_class  Имя класса данных.
initial  Начальное значение.

Перекрестные ссылки gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::m_ds и gemont_1::value_holder_t< Access_type, Data_source_value_type, Value_extractor, Data_source >::m_v.


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

Документация по Generic MONitoring Tools v.1.4.0. Последние изменения: Mon Oct 20 16:21:28 2008. Создано системой  doxygen1.5.7.1 Intervale SourceForge.net Logo