Класс so_4::rt::impl::std_sys_dict_t

Граф наследования:so_4::rt::impl::std_sys_dict_t:

so_4::rt::impl::sys_dict_t

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


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

Стандартная реализация интерфейса sys_dict_t.

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

virtual ret_code_t add_class (class_handler_impl_t &handler)
 Добавление описания класса в состав системы.
virtual ret_code_t remove_class (class_handler_impl_t &handler)
 Изъятие описания класса из состава системы.
virtual ret_code_t find_agent_class (const std::string &class_name, class_handler_impl_t *&agent_class) const
 Поиск описания типа агента по имени типа.
virtual ret_code_t do_registration (agent_coop_t &coop, agent_wrapper_ptr_vector_t &agents)
virtual ret_code_t do_deregistration (const std::string &coop_name, agent_name_list_t &agent_names)
 Выполнение дерегистрации кооперации.
virtual ret_code_t make_global (const cpp_util_2::string_piece_t agent, const std::string &agent_type)
virtual size_t check_dereg (coop_map_t &dereg_coops)
 Сборка мусора.
virtual agent_wrapper_t * find_agent (const cpp_util_2::string_piece_t agent_name)
 Поиск агента по имени.
virtual const agent_wrapper_t * find_agent (const cpp_util_2::string_piece_t agent_name) const
virtual void cleanup (coop_vector_t &coops)

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

typedef
ACE_Hash_Map_Manager_Ex
< cpp_util_2::string_piece_t,
agent_wrapper_t *, ACE_Hash
< cpp_util_2::string_piece_t >
, ACE_Equal_To
< cpp_util_2::string_piece_t >
, ACE_Null_Mutex > 
agent_map_t

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

ret_code_t check_parent_coop (const agent_coop_t &coop, agent_coop_t *&parent_coop)
 Проверка корректности родительской кооперации.
ret_code_t is_coop_name_can_be_used (const agent_coop_t &coop) const
ret_code_t is_agents_names_can_be_used (const agent_coop_t &coop) const
ret_code_t try_create_agents_wrappers (agent_coop_t &coop, agent_wrapper_ptr_vector_t &created_wrappers)
void deregister_coop (agent_coop_t &coop, agent_name_list_t &agent_names)
void deregister_agent (agent_wrapper_t &agent)
 Дерегистрация одного агента.
bool check_dereg_coop (const agent_coop_t &coops)
 Попытка дерегистрировать содержимое кооперации.
ret_code_t find_coop (const std::string &coop_name, const agent_coop_t *&coop) const
 Поиск кооперации среди существующих коопераций.
ret_code_t check_agents_classes (const agent_coop_t &coop)
 Проверка наличия описанных классов для агентов.
ret_code_t create_agents_wrappers (const agent_coop_t &coop, agent_map_t &result_map)
 Создание инфраструктуры для всех входящих в кооперацию агентов.
ret_code_t create_agent_wrapper (const std::string &name, const std::string &type_name, agent_wrapper_t *&wrapper, agent_t *agent)
 Создание инфраструктуры для агента.
ret_code_t create_global_agent_wrapper (const cpp_util_2::string_piece_t name, const std::string &type_name, agent_wrapper_t *&wrapper)
 Создание инфраструктуры для глобального агента.

Защищенные статические члены

static void destroy_coop (const coop_map_t::value_type &v)
 Удаление одной кооперации.

Закрытые данные

class_map_t m_classes
 Словарь загеристрированных классов.
std::auto_ptr
< class_relation_handler_t
m_class_relation
 Обработчик взаимоотношений между классами.
coop_map_t m_coops
 Существующие кооперации.
coop_map_t m_dereg_coops
 Дерегистрируемые в данный момент кооперации.
std::auto_ptr< agent_map_t > m_agents
 Существующие агенты.
std::auto_ptr< agent_map_t > m_dereg_agents
 Дерегистрируемые в данный момент агенты.

Методы

ret_code_t so_4::rt::impl::std_sys_dict_t::add_class ( class_handler_impl_t handler  )  [virtual]

Добавление описания класса в состав системы.

Класс добавляется, только если его имя уникально.

Замещает so_4::rt::impl::sys_dict_t.

Перекрестные ссылки m_class_relation, m_classes, so_4::rt::impl::class_handler_impl_t::query_class_name(), so_4::rc_invalid_name и SO_4_ERROR_RETURN.

ret_code_t so_4::rt::impl::std_sys_dict_t::do_registration ( agent_coop_t coop,
agent_wrapper_ptr_vector_t &  agents 
) [virtual]

Возвращает:
0, если кооперация успешно зарегистрирована.
В пaраметре agents возвращаются указатели на созданные обертки агентов.

Замещает so_4::rt::impl::sys_dict_t.

Перекрестные ссылки check_parent_coop(), so_4::rt::impl::coop_relation::storage_t::parent_bind() и so_4::rt::agent_coop_t::relation().

ret_code_t so_4::rt::impl::std_sys_dict_t::do_deregistration ( const std::string &  coop_name,
agent_name_list_t agent_names 
) [virtual]

Выполнение дерегистрации кооперации.

В аргумент agent_names помещаются имена агентов, которые попали под дерегистрацию (как в самой кооперации, так и в дочерних ей кооперациях).

Возвращает:
0, если кооперация успешно дерегистрирована.

Замещает so_4::rt::impl::sys_dict_t.

Перекрестные ссылки so_4::rt::impl::coop_relation::storage_t::child_query_all(), so_4::rt::impl::coop_ptr_to_coop_name(), find_coop() и so_4::rt::agent_coop_t::relation().

ret_code_t so_4::rt::impl::std_sys_dict_t::make_global ( const cpp_util_2::string_piece_t  agent,
const std::string &  agent_type 
) [virtual]

Сделать агент глобальным. Если такого агента еще нет, то создается wrapper без реального агента.

Возвращает:
0, если создание глобального агента прошло нормально.

Замещает so_4::rt::impl::sys_dict_t.

Перекрестные ссылки create_global_agent_wrapper(), find_agent(), m_agents, m_dereg_agents, so_4::rc_invalid_object, so_4::ace::rehash_hash_map(), SO_4_ABORT_ON_ACE_ERROR и SO_4_ERROR_RETURN.

size_t so_4::rt::impl::std_sys_dict_t::check_dereg ( coop_map_t &  dereg_coops  )  [virtual]

Сборка мусора.

Окончательная дерегистрация коопераций и агентов.

Возвращается количество еще не дерегистрированных коопераций.

В dereg_coops помещаются окончательно дерегистрированные кооперации

Замещает so_4::rt::impl::sys_dict_t.

Перекрестные ссылки check_dereg_coop() и m_dereg_coops.

agent_wrapper_t * so_4::rt::impl::std_sys_dict_t::find_agent ( const cpp_util_2::string_piece_t  agent_name  )  [virtual]

Поиск агента по имени.

Возвращает:
0, если агент не найден среди зарегистрированных агентов.

Замещает so_4::rt::impl::sys_dict_t.

Перекрестные ссылки m_agents.

Используется в make_global().

void so_4::rt::impl::std_sys_dict_t::cleanup ( coop_vector_t coops  )  [virtual]

Полная очистка словаря при завершении работы системы. В coops возвращаются все кооперации для которых:

  • у всех зарегистрированных на данный момент агентов (а так же ожидащих дерегистрации) нужно вызывать метод agent_t::so_on_deregistration().
  • агенты, которые были созданны динамически (регистрировались через dyn_agent_coop_t), должны быть уничтожены физически не смотря на количество ссылок.

Сообщений о дерегистрации коопераций не рассылается, т.к. к этому моменту диспетчер уже не работает. Для выполнения всех этих действий нужно воспользоваться методом destroy_coops().

Необходимость в двух методах cleanup() и destroy_coops() для очистки словаря возникла из-за того, что саму очистку словаря нужно осуществлять при заблокированном ядре. А вызывать метод agent_t::so_on_deregistration() необходимо при незаблокированном ядре.

v.4.2.7
В возвращенном списке порядок следования элементов соответствует тому порядку, в котором коопераци должны уничтожаться.

Замещает so_4::rt::impl::sys_dict_t.

Перекрестные ссылки so_4::rt::impl::clean_hash_map(), so_4::rt::impl::coop_map_to_vector(), m_agents, m_coops, m_dereg_agents, m_dereg_coops и so_4::rt::impl::make_cleanup_vector().

ret_code_t so_4::rt::impl::std_sys_dict_t::check_parent_coop ( const agent_coop_t coop,
agent_coop_t *&  parent_coop 
) [protected]

Проверка корректности родительской кооперации.

Начиная с:
v.4.2.7 Если задано имя родительской кооперации, то родительская кооперация ищется среди зарегистрированных коопераций.
Аргументы:
coop  Регистрируемая кооперация у которой нужно брать имя родительской кооперации.
parent_coop  Приемник указателя на родительскую кооперацию. Остается неизменным, если родительской кооперации нет.

Перекрестные ссылки m_coops, so_4::rt::impl::coop_relation::storage_t::parent_coop_name(), so_4::rt::agent_coop_t::query_name(), so_4::rc_not_found, so_4::rt::agent_coop_t::relation() и SO_4_ERROR_RETURN.

Используется в do_registration().

bool so_4::rt::impl::std_sys_dict_t::check_dereg_coop ( const agent_coop_t coops  )  [protected]

Попытка дерегистрировать содержимое кооперации.

Возвращает true, если содержимое кооперации полностью дерегистрировано.

Перекрестные ссылки so_4::rt::impl::coop_relation::storage_t::child_count(), m_dereg_agents, so_4::rt::agent_coop_t::query_agent(), so_4::rt::agent_coop_t::relation(), so_4::rt::agent_coop_t::size(), SO_4_ABORT_ON_ACE_ERROR и so_4::rt::agent_t::so_query_name().

Используется в check_dereg().


Данные класса

Обработчик взаимоотношений между классами.

Начиная с:
2003.02.11

Используется в add_class(), check_agents_classes(), create_global_agent_wrapper() и remove_class().


Документация по SObjectizer v.4.4 'Тебуломста'. Последние изменения: Thu Sep 18 10:26:50 2008. Создано системой  doxygen1.5.6 Intervale SourceForge.net Logo