libjmmcg  release_579_6_g8cffd
A C++ library containing an eclectic mix of useful, advanced components.
Todo List
Class abseil_t
Consider using hashes from . Consider using hashes from . Member BOOST_AUTO_TEST_CASE_TEMPLATE (small_ctor, T, string_types) In gcc 5.10 std::string uses small-string optimisation - needs testing. In gcc 5.10 std::string uses small-string optimisation - needs testing. Class business_state_machine_t< SrcMsgT >::ExecutionReportResponse 5.1: "TODO" of [1]: the response to an ExecutionReport is a various messages. 5.1: "TODO" of [1]: the response to an ExecutionReport is a various messages. Member finite_fifo_test_types Does not seem to be perf tested...? Does not seem to be perf tested...? Namespace isimud Update when this is official. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::BATSBOE::common::convert< OrdType > (FIX::common::field_str_const_range_t const &a) What should be done with OrdType's that cannot be mapped?. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::BATSBOE::common::convert< SecurityID_t > (FIX::common::field_str_const_range_t const &a) We need to consider the symbology used, for example a conversion from ISIN to MIT native symbology. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::BATSBOE::common::convert< Side > (FIX::common::field_str_const_range_t const &a) What should be done with Side's that cannot be mapped?. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::BATSBOE::common::convert< TIF > (FIX::common::field_str_const_range_t const &a) What should be done with TIF's that cannot be mapped?. Namespace isimud::ISIMUD_VER_NAMESPACE::exchanges::BATSBOE::US::v1 Namespace isimud::ISIMUD_VER_NAMESPACE::exchanges::BATSBOE::US::v2 Class isimud::ISIMUD_VER_NAMESPACE::exchanges::common::exchange_to_client_processor< ClientCxnPtr, EchgCxn > _todo000114We need to write to the dest_skt found using the xdest in the msg in the unordered_tuple of exchange_to_client_processor passed as a template parameter & fn arg..Pass this up to the client_to_exchange_transformations & link_t..The client_to_exchange_transformations should contain the unordered_tuple of exchange_to_client_transformations (which contain the connections to the various exchanges). Member isimud::ISIMUD_VER_NAMESPACE::exchanges::FIX::common::convert (MIT::common::OrderStatus const &a) noexcept(false) What should be done with OrderStatus's that cannot be mapped?. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::FIX::common::convert (MIT::common::ExecType const &a) noexcept(false) What should be done with ExecType's that cannot be mapped?. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::FIX::common::convert (MIT::common::Side const &a) What should be done with Side's that cannot be mapped?. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::FIX::v5_0sp2::private_::ID_type Need to implement this properly.. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::FIX::v5_0sp2::private_::IDREF_type Need to implement this properly.. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::FIX::v5_0sp2::private_::rfc_1766_language_code_type Need to implement this properly.. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::MIT::common::convert< OrderType > (FIX::common::field_str_const_range_t const &a) What should be done with OrderType's that cannot be mapped?. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::MIT::common::convert< Side > (FIX::common::field_str_const_range_t const &a) What should be done with Side's that cannot be mapped?. Member isimud::ISIMUD_VER_NAMESPACE::exchanges::MIT::common::convert< TIF > (FIX::common::field_str_const_range_t const &a) What should be done with TIF's that cannot be mapped?. Class isimud::ISIMUD_VER_NAMESPACE::exchanges::MIT::common::exchange_to_client_transformations< SrcMsgDetails, DestMsgDetails >::business_state_machine_t::ExecutionReportResponse 5.1: "TODO" of [1]: the response to an ExecutionReport is a various messages. Namespace isimud::ISIMUD_VER_NAMESPACE::exchanges::OUCH::NYSE::tests Namespace isimud::ISIMUD_VER_NAMESPACE::exchanges::OUCH::SWX::tests Member isimud::ISIMUD_VER_NAMESPACE::order_book< MsgType >::orders_by_time Consider a faster collection, such as boost circular buffer for something similar. Member jmmcg::LIBJMMCG_VER_NAMESPACE::cache::basic_statistics::outstanding_fills (void) const noexcept(true) JMG need to compute this. Member jmmcg::LIBJMMCG_VER_NAMESPACE::cache::operator<< (tostream &os, const ro< F_, P_, TT_, S_ > &r) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::cache::operator<< (tostream &os, const basic_statistics &stats) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::crt_exception< API, Mdl >::operator<< (tostream &o, const crt_exception &e) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::exception< API, Mdl >::operator<< (tostream &o, const exception &e) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::factoring::monte_carlo (const collection_type::value_type y) noexcept(false) FIXME Member jmmcg::LIBJMMCG_VER_NAMESPACE::heap::memory_buffer< OST, El >::operator<< (tostream &os, memory_buffer const &t) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::info::function::argument::operator<< (tostream &o, const argument &a) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::info::function::operator<< (tostream &o, const function &fi) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::info::revision::operator<< (tostream &o, const revision &ri) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::NTUtils::win_exception::operator<< (tostream &o, const win_exception &e) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::api_threading_traits< API, Mdl >::gen_backtrace () noexcept(true) Reimplement with: Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::basic_statistics< Sz > Add work completed/sec. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::basic_statistics< Sz >::operator<< (tostream &os, basic_statistics const &p) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::basic_statistics< Sz >::process_work_type::operator<< (tostream &os, process_work_type const &p) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::lock::any_order::all< API_, Mdl_, Lk1, Lk2 > JMG: implement a specialisation for Win32 API using "WaitForMultipleObjects()". Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::lock::any_order::try_one< API_, Mdl_, Lk1, Lk2 > JMG: implement a specialisation for Win32 API using "WaitForMultipleObjects()". Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::lock::rw::locker< T >::writer_atomic_t G++ issues: private: Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::no_signalling< Lk > I suppose I could use some kind of enable_if to detect if the container has a size() member-method, and only use this if it doesn't. That's a micro-optimisation to do. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::operator<< (tostream &os, atomic_ctr< V, LkT > const &a) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::pool::private_::thread_types::slave< generic_traits::return_data::joinable, thread_os_traits< generic_traits::api_type::posix_pthreads, sequential_mode >, PTT > JMG: Looks like this needs completing, as some fns are undefined! Maybe not used... Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::pool_aspects< RD, API, Mdl, PM, Comp, GSSkSz, Stats, CFG >::thread_pool_queue_details Colin Egan suggested that one could consider the asynchronous work transferred into this queue as a set of instructions. (The ISA being generated by the program being compiled, composed of the unique closure_base-derived closure types transferred.) One could then analyse these instructions as sets of basic-blocks, and apply analysis to those basic blocks for code-hoisting, consider trace-scheduling, etc, etc. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::pool_traits::private_::thread_pool_queue_details_back_batch_queue< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue, EvSts, CST, Stats, Cont, GSSk >::container_type JMG: if the work-load has a user-supplied estimate of the time it would take to complete, then we could implement a more sophisticated and better algorithm, e.g. in [1]. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::pool_traits::private_::thread_pool_queue_details_back_batch_queue< pool_traits::work_distribution_mode_t::queue_model_t::thread_owns_queue< SM >, EvSts, CST, Stats, Cont, GSSk >::container_type JMG: if the work-load has a user-supplied estimate of the time it would take to complete, then we could implement a more sophisticated and better algorithm, e.g. in [1]. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::pool_traits::private_::thread_pool_queue_details_front_batch_priority_queue< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue, EvSts, Stats, V, Comp, GSSk >::container_type JMG: if the work-load has a user-supplied estimate of the time it would take to complete, then we could implement a more sophisticated and better algorithm, e.g. in [1]. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::alg_wk_wrap::batchers_bitonic_merge_reduce< Conts, Comp >::merge< LHSDir, RHSDir, FinalSort >::process () const JMG: this needs extending to non-even sized collections... Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::alg_wk_wrap::bitonic_sort_reduce< Conts, Comp >::sort< dir >::process () const JMG: this needs extending to non-even sized collections... Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::alg_wk_wrap::find_if_reduce< Conts, CtrPred > It would be nice, if once found, this could cancel any pending tasks. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::alg_wk_wrap::merge_final_sorter< Iter, operation_type, LHSDir, RHSDir, Dummy >::process (Dummy const &, out_iterator const begin, out_iterator const end, operation_type const &fn) noexcept(false) FORCE_INLINE What about std::inplace_merge()? Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::cliques_t< joinable_t< TPB > >::push_back (parallel_algorithm< Alg > &&wk) noexcept(false) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::cliques_t< nonjoinable_t< TPB > >::push_back (parallel_algorithm< Alg > &&wk) noexcept(false) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::closure_base< CFG >::response_time () const noexcept(true) FORCE_INLINE This is only an idea at the moment, and needs to be implemented with test cases. Obviously we'd need to be able to adjust this to ensure that all work gets eventually processed. It might make sense to provide this as a new pool_trait, that would automatically supply the correct operator<(). Have a look at the theories in "Parallel Algorithms" by H.Casanova. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::closure_static< InpWk, Res, NoExcept,, CFG >::operator<< (tostream &os, closure_static const &w) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::closure_static_cfg< InpWk, Res, CFGP, NoExcept,, CFG >::operator<< (tostream &os, closure_static_cfg const &w) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::closure_static_cfg_const< InpWk, Res, CFGP, NoExcept,, CFG >::operator<< (tostream &os, closure_static_cfg_const const &w) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::closure_static_const< InpWk, Res, NoExcept,, CFG >::operator<< (tostream &os, closure_static_const const &w) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::closure_void_static< InpWk, NoExcept,, CFG >::operator<< (tostream &os, closure_void_static const &w) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::closure_void_static< InpWk, NoExcept,, CFG >::process () FORCE_INLINE We really want to compute the noexcept() from the Proc member fn. typedef typename std::remove_pointer<process_ptr_t>::type process_t; - This doesn't seem to remove the pointer. BOOST_MPL_ASSERT((std::is_same<process_t, int>)); Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::closure_void_static_const< InpWk, NoExcept,, CFG >::operator<< (tostream &os, closure_void_static_const const &w) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::thread_wk_async_t< generic_traits::return_data::joinable, OST, Del, AtCtr, CFG > joinable types do not have to be allocated on the heap, because there is an execution_context available to hold these objects. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::closure::thread_wk_base< OST, CFG >::operator<< (tostream &os, thread_wk_base const &wk) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::create_direct< P, InpWk, FnType, FnPtr >::process_fn_traits It would be good to make use of the is_const member to determine if the mutation is pure. If so then all sorts of nice things could be done like memoization of the result of the mutation, i.e. place this object type into a hash_map at compile-time, and place the result into there too, and for later mutations of the same object instance to short-cut needing to do all the using a thread to generate the result malarky, as long as we save the object instance state sufficiently. Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::execution_context_algo_buff_stack_type< pool_traits::work_distribution_mode_t::one_thread_distributes<>, generic_traits::return_data::joinable, AlgCoreWk, GenWk, Wk, Deref, InitCoreWk > Add an extra template parameter to supply modifiable functionality to operator*() & operator->(), with a no-op default. Then accumulate, count & find may use this class. Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::joinable_t< TPB > Clearly the above is undesirable, and it would be better if we could somehow force the compiler to emit an error if the user fails to capture the result. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::joinable_t< TPB >::operator<< (typename thread_pool_type::template priority< Pri >) noexcept(true) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::joinable_t< TPB >::push_back (InpWk &&wk) noexcept(false) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Namespace jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::kernel_priority The input process() had two arguments, including the cfg. This closure has only one argument to process... Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::nonjoinable_buff_t< TPB >::push_back (InpWk &&wk) noexcept(false) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::nonjoinable_t< TPB >::operator<< (typename thread_pool_type::template priority< Pri >) noexcept(true) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::nonjoinable_t< TPB >::push_back (InpWk &&wk) noexcept(false) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::operator<< (tostream &os, thread_base< API, Mdl > const &th) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::priority_t< joinable_t, TPB, Pri >::push_back (InpWk &&wk) noexcept(false) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::priority_t< nonjoinable_t, TPB, Pri >::push_back (InpWk &&wk) noexcept(false) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::sequential_pool< DM, Ps, P >::operator<< (nonjoinable &&nj) noexcept(true) FORCE_INLINE JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::sequential_pool< DM, Ps, P >::operator<< (nonjoinable_buff &&njb) noexcept(true) FORCE_INLINE JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::sequential_pool< DM, Ps, P >::operator<< (joinable_t< sequential_pool > &&j) noexcept(true) FORCE_INLINE JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::sequential_pool< DM, Ps, P >::operator<< (tostream &os, sequential_pool const &t) FORCE_INLINE Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::subdivide_n_gen_wk< Ps, TPB, Alg >::compute_buffer_items (typename thread_pool_type::pool_type::size_type const num_threads_per_clique) noexcept(true) FORCE_INLINE This is an O(n) operation, and we might want a faster algorithm, it doesn't have to be perfect, as long as the result is >= the true value. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_base< DM, Ps, PTT, Pt >::binary_fun (LHSArg &&lhs, RHSArg &&rhs, BinFn const &op=BinFn()) JMG: If there are no side-effects, one might implement compile-time reduction of boolean expressions implemented using logical_and() & logical_or(), see Kennedy & Allen, "Advanced Optimizing Compilers". Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_base< DM, Ps, PTT, Pt >::min_processors (generic_traits::memory_access_modes mode) const noexcept(true)=0 It would be nice if there was some result for returning this with respect to the memory access models of the work within the queue (which may be a mix of CREW & EREW memory models) for the current thread_pool. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_base< DM, Ps, PTT, Pt >::min_time (generic_traits::memory_access_modes mode) const noexcept(true)=0 It would be nice if there was some result for returning this with respect to the memory access models of the work within the queue (which may be a mix of CREW & EREW memory models) for the current thread_pool. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_base< DM, Ps, PTT, Pt >::operator<< (nonjoinable &&nj) noexcept(true) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_base< DM, Ps, PTT, Pt >::operator<< (nonjoinable_buff &&njb) noexcept(true) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_base< DM, Ps, PTT, Pt >::operator<< (joinable_t< thread_pool_base > &&j) noexcept(true) JMG: Hubert Matthews suggested that potentially expression templates could be used here to concatenate the thread_wk_t's that are transferred into the pool; also as an implementation of back_batching, i.e. GSS(k) scheduling. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_base< DM, Ps, PTT, Pt >::operator<< (tostream &os, thread_pool_base< DM1, Ps1, PTT1, Pt1 > const &t) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_base< DM, Ps, PTT, Pt >::unary_fun (ArgT &&a, UniFn const &op=UniFn()) JMG: If there are no side-effects, one might implement compile-time reduction of boolean expressions implemented using logical_and() & logical_or(), see Kennedy & Allen, "Advanced Optimizing Compilers". Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_queue_model< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::thread_owns_queue< SM > >, Ps, PTT, Pt >::min_processors (generic_traits::memory_access_modes mode) const noexcept(true) FORCE_INLINE It would be nice if there was some result for returning this with respect to the memory access models of the work within the queue (which may be a mix of CREW & EREW memory models) for the current thread_pool. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_queue_model< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::thread_owns_queue< SM > >, Ps, PTT, Pt >::min_time (generic_traits::memory_access_modes mode) const noexcept(true) override FORCE_INLINE It would be nice if there was some result for returning this with respect to the memory access models of the work within the queue (which may be a mix of CREW & EREW memory models) for the current thread_pool. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_queue_model< QM< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, Ps, PTT, Pt >::min_processors (generic_traits::memory_access_modes mode) const noexcept(true) override FORCE_INLINE It would be nice if there was some result for returning this with respect to the memory access models of the work within the queue (which may be a mix of CREW & EREW memory models) for the current thread_pool. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::private_::thread_pool_queue_model< QM< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, Ps, PTT, Pt >::min_time (generic_traits::memory_access_modes mode) const noexcept(true) override FORCE_INLINE It would be nice if there was some result for returning this with respect to the memory access models of the work within the queue (which may be a mix of CREW & EREW memory models) for the current thread_pool. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::safe_colln< C, M, WL, Sig, MLk >::resize_noinit_nolk (const size_type sz) noexcept(false) FORCE_INLINE Ideally I want to have an "uninitialized resize()" (reserve() does not set the size), so that I can initialise the elements of the container in the order I wish, using a parallel fill_n() for example. Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::thread_os_traits< API, Mdl >::thread_exception Make use of std::exception_ptr or similar to pass any thrown exception. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::thread_os_traits< API, Mdl >::thread_exception::operator<< (tostream &os, thread_exception const &te) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::thread_params< generic_traits::api_type::posix_pthreads >::thread_params (core_work_fn_type *const sa, const security_type=nullptr, const stack_size_type ss=max_stack_size) noexcept(false) FORCE_INLINE Have a better way of setting the stack size, rather than magically, here. Class jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::thread_pool< pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::tracks_to_max, PTT > JMG: Need to complete this... Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::thread_pool< pool_traits::work_distribution_mode_t::one_thread_distributes<>, pool_traits::size_mode_t::tracks_to_max, PTT >::~thread_pool () noexcept(false) FORCE_INLINE JMG: Need to complete this... What's the thread creation policy???? Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::thread_pool< pool_traits::work_distribution_mode_t::worker_threads_get_work< pool_traits::work_distribution_mode_t::queue_model_t::pool_owns_queue >, pool_traits::size_mode_t::tracks_to_max, PTT >::thread_pool (thread_pool const &)=delete JMG: Need to complete this... What's the thread creation policy???? Member jmmcg::LIBJMMCG_VER_NAMESPACE::ppd::wrapper< API, Mdl, TWC >::exit_requested Consider moving this event into the stack of process() as an automatic variable in there. This may be useful in implementing detached threads. Detached threads may be useful in improving performance of horizontal threading, because the work_complete() lock in them won't have to wait for non-dependent work to complete before it returns. Member jmmcg::LIBJMMCG_VER_NAMESPACE::shared_ptr< V, LkT >::operator<< (tostream &os, shared_ptr const &ptr) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::socket::glibc::basic::wrapper< LkT >::set_options (std::size_t min_message_size, std::size_t max_message_size, unsigned short timeout, socket_priority priority, std::size_t incoming_cpu) noexcept(false) Consider setting MSG_ZEROCOPY. Member jmmcg::LIBJMMCG_VER_NAMESPACE::stack::memory_buffer< El, num_objs >::operator<< (tostream &os, memory_buffer const &t) noexcept(false) Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Member jmmcg::LIBJMMCG_VER_NAMESPACE::tostring (double v, char *const buff, std::size_t sz) noexcept(true) This is pretty slow. Write an optimised version for just decimal conversion. Member jmmcg::LIBJMMCG_VER_NAMESPACE::unique_ptr< V, LkT >::operator<< (tostream &os, unique_ptr const &ptr) noexcept(false) FORCE_INLINE Implement using the advice given in "Standard C++ IOStreams and Locales" by A.Langer & K.Kreft, page 170. Class jmmcg::ppd::pool::thread_types::slave< generic_traits::return_data::joinable, thread_os_traits< generic_traits::MS_Win32, sequential_mode >, WQ > JMG: Looks like this needs completing, as some fns are undefined! Maybe not used... Member JMMCG_SYSCALL_WRAPPER (ErrMsg, RevInfo, Fn,...) This define could be removed in C++20 with the use of std::source_location, does not work with g++ v9.2. Member JMMCG_SYSCALL_WRAPPER_SWITCH (CaseLabels, ErrMsg, RevInfo, Fn,...) This define could be removed in C++20 with the use of std::source_location, does not work with g++ v9.2. Member make_row (std::string line) noexcept(false) Consider using libjmmcg::csv_iterator Consider using libjmmcg::csv_iterator Member schedule_policy This cannot be set unless CAP_SYS_RESOURCE is applied. This cannot be set unless CAP_SYS_RESOURCE is applied.