Menu

SObjectizer v.5.5.8 TODOs

Yauheni Akhotnikau

TODO

DONE

New dispatchers

prio_one_thread::strictly_ordered

Description in Wiki and Doxygen

prio_one_thread::quoted_round_robin

An example for prio_one_thread::quoted_round_robin

Description in Wiki and Doxygen

prio_dedicated_threads::one_per_prio

Implementation

Unit-tests

An example for prio_dedicated_threads::one_per_prio

Description in Wiki and Doxygen

Simplification for usage of ad-hoc agents

New helper environment_t::introduce_child_coop

Accepts reference to agent_coop_t as parent coop.

Simplification of coop dereg in presence of reference to agent_coop_t.

Something like:

// Wanted:
env.introduce_coop( []( so_5::rt::agent_coop_t & coop ) {
  coop.define_agent().
    .event< some_signa >( some_mbox, [&coop] {
      coop.deregister_normally();
    } );
  ...
} );

// Instead of:
env.introduce_coop( []( so_5::rt::agent_coop_t & coop ) {
  coop.define_agent().
    .event< some_signa >( some_mbox, [&coop] {
      coop.environment().deregister_coop(
        coop.query_coop_name(),
        so_5::rt::dereg_reason::normal );
    } );
  ...
} );

New variants of send-functions

Those function accept ad_hoc_agent_wrapper_t reference as a parameter for send_to_agent, send_delayed_to_agent and so on.

Support for MSVS2015

SO_5_HAVE_NOEXCEPT for MSVS2015

Check for support of noexcept keyword in MSVS2015.

Change of dispatcher internals

Remove internal queue inside agents

A trick with block on condition during handling evt_start-demand should be used instead.

Simplification of subscription rules

Subscription of agent before its coop will be registered

Subscription in agent constructor should be allowed.

Improvement for message limits

New form of limit_then_abort.

An overloaded version om limit_then_abort which can accept lambda-function. This lambda will be called before std::abort(). It allows to do some application-specific logging.

Remove usage of std::rand to make Coverity happy

Calls to std::rand in tests and examples must be changed to something from C++11.

Documentation impovement

Code samples in Doxygen-comments

For limit_then_transform

For synchronous interaction methods

get_one, run_one
async, make_async
wait_for, wait_forever
sync_get, make_sync_get

DECLINED

Change of dispatcher internals

Remove usage of std::deque in so_5::disp::reuse::work_thread

Implementation with std::deque has move higher performance. Probably because there is less memory allocation-deallocation operations involved.

Simplification for usage of ad-hoc agents

Aliases of limit_then functions in so_5 namespace

This allows to write more compact code for ad-hoc agent. For comparison:

// Now:
auto a = coop.define_agent( coop.make_agent_context() + priority
        + so_5::rt::agent_t::limit_then_abort< generation_request >( 1 )
        + so_5::rt::agent_t::limit_then_drop< ask_for_work >( 1 ) );

// Could be:
auto a = coop.define_agent( coop.make_agent_context() + priority
        + so_5::limit_then_abort< generation_request >( 1 )
        + so_5::limit_then_drop< ask_for_work >( 1 ) );

It wont be compiled under GCC 4.9/5.1


Related

Wiki: Internals