Coops must no have names. Operations for coop registration and deregistration must be fast and scalable.
Methods and functions which shouldn't throw exceptions must be marked via noexcept.
A quote from mchain_template class implementation:
//! Actual implementation of pushing message to the queue. /*! * \attention This method is marked as 'const' but it changes * state of the object. It is because this method is called * from do_deliver_message() and do_deliver_service_request() which * must be 'const'. It is a flaw in the mbox'es design but * this flaw must be fixed at different level (such as modification * of abstract_message_box_t interface). */
For support of cross-platform compilation build_tests.rb must be splited into tests_build.rb and tests_run.rb files.
An intrusive smart pointer must be introduced instead of disp_binder_unique_ptr_t. It allows to write such code:
auto binder = create_private_disp(env)->binder(); coop.define_agent(binder)...; coop.define_agent(binder)...; coop.define_agent(binder)...;
A more simple and compact name coop_t must be used instead of agent_coop_t. Old name agent_coop_t should be just a typedef for coop_t. Old name agent_coop_t should also be marked as deprecated.
Could be useful for detection of agent's overloading and/or performance degradation.