1 /* 2 * SObjectizer-5 3 */ 4 5 /*! 6 * \since 7 * v.5.5.3 8 * 9 * \file 10 * \brief A collector for agent tuning options. 11 */ 12 13 #pragma once 14 15 #include <so_5/subscription_storage_fwd.hpp> 16 #include <so_5/message_limit.hpp> 17 #include <so_5/priority.hpp> 18 19 namespace so_5 20 { 21 22 // 23 // agent_tuning_options_t 24 // 25 /*! 26 * \since 27 * v.5.5.3 28 * 29 * \brief A collector for agent tuning options. 30 */ 31 class agent_tuning_options_t 32 { 33 public : 34 agent_tuning_options_t() = default; 35 36 friend inline void swap(so_5::agent_tuning_options_t & a,so_5::agent_tuning_options_t & b)37 swap( 38 so_5::agent_tuning_options_t & a, 39 so_5::agent_tuning_options_t & b ) noexcept 40 { 41 using std::swap; 42 swap( a.m_subscription_storage_factory, 43 b.m_subscription_storage_factory ); 44 swap( a.m_message_limits, b.m_message_limits ); 45 swap( a.m_priority, b.m_priority ); 46 } 47 48 //! Set factory for subscription storage creation. 49 agent_tuning_options_t & subscription_storage_factory(subscription_storage_factory_t factory)50 subscription_storage_factory( 51 subscription_storage_factory_t factory ) 52 { 53 m_subscription_storage_factory = std::move( factory ); 54 55 return *this; 56 } 57 58 const subscription_storage_factory_t & query_subscription_storage_factory() const59 query_subscription_storage_factory() const 60 { 61 return m_subscription_storage_factory; 62 } 63 64 //! Default subscription storage factory. 65 static subscription_storage_factory_t default_subscription_storage_factory()66 default_subscription_storage_factory() 67 { 68 return so_5::default_subscription_storage_factory(); 69 } 70 71 message_limit::description_container_t giveout_message_limits()72 giveout_message_limits() 73 { 74 return std::move( m_message_limits ); 75 } 76 77 template< typename... Args > 78 agent_tuning_options_t & message_limits(Args &&...args)79 message_limits( Args &&... args ) 80 { 81 message_limit::accept_indicators( 82 m_message_limits, 83 std::forward< Args >( args )... ); 84 85 return *this; 86 } 87 88 //! Set priority for agent. 89 /*! \since 90 * v.5.5.8 */ 91 92 agent_tuning_options_t & priority(so_5::priority_t v)93 priority( so_5::priority_t v ) 94 { 95 m_priority = v; 96 return *this; 97 } 98 99 //! Get priority value. 100 so_5::priority_t query_priority() const101 query_priority() const 102 { 103 return m_priority; 104 } 105 106 private : 107 subscription_storage_factory_t m_subscription_storage_factory = 108 default_subscription_storage_factory(); 109 110 message_limit::description_container_t m_message_limits; 111 112 //! Priority for agent. 113 /*! \since 114 * v.5.5.8 */ 115 116 so_5::priority_t m_priority = so_5::prio::default_priority; 117 }; 118 119 } /* namespace so_5 */ 120 121