ThreadSchedule 3.0.0
Modern C++ thread management library
Loading...
Searching...
No Matches
threadschedule::detail::thread_registry_backend::query_view Class Reference

Lazy, functional-style query/filter view over a snapshot of registered threads. More...

#include <thread_registry_backend.hpp>

Public Member Functions

 query_view (std::vector< registered_thread_info_backend > entries)
 
template<typename Predicate >
auto filter (Predicate &&pred) const -> query_view
 
template<typename Fn >
void for_each (Fn &&fn) const
 
auto count () const -> size_t
 
auto empty () const -> bool
 
auto entries () const -> std::vector< registered_thread_info_backend > const &
 
template<typename Fn >
auto map (Fn &&fn) const -> std::vector< std::invoke_result_t< Fn, registered_thread_info_backend const & > >
 
template<typename Predicate >
auto find_if (Predicate &&pred) const -> std::optional< registered_thread_info_backend >
 
template<typename Predicate >
auto any (Predicate &&pred) const -> bool
 
template<typename Predicate >
auto all (Predicate &&pred) const -> bool
 
template<typename Predicate >
auto none (Predicate &&pred) const -> bool
 
auto take (size_t n) const -> query_view
 
auto skip (size_t n) const -> query_view
 

Detailed Description

Lazy, functional-style query/filter view over a snapshot of registered threads.

A query_view is produced by thread_registry_backend::query() (or by chaining operations on an existing query_view). It holds an internal std::vector<registered_thread_info_backend> that is a snapshot - mutations to the originating thread_registry_backend after the query_view was created are not visible.

Value semantics
query_view is a regular value type (copyable and movable). All transformation methods (filter, take, skip) return a new query_view, leaving the original unchanged.
Thread safety
A single query_view instance is not safe to use concurrently from multiple threads. However, it is safe to create multiple QueryViews concurrently from the same thread_registry_backend, since creation acquires a shared lock on the registry.
API
Provides a functional-style interface:
  • filter(pred) - returns a new query_view containing only entries that satisfy pred.
  • map(fn) - transforms each entry and returns a std::vector<R>.
  • for_each(fn) - applies fn to every entry.
  • find_if(pred) - returns the first matching entry, or std::nullopt.
  • any / all / none(pred) - boolean aggregation predicates.
  • take(n) / skip(n) - positional slicing, returning new QueryViews.
  • count() / empty() - size queries.
  • entries() - direct access to the underlying vector.

Definition at line 220 of file thread_registry_backend.hpp.

Constructor & Destructor Documentation

◆ query_view()

threadschedule::detail::thread_registry_backend::query_view::query_view ( std::vector< registered_thread_info_backend entries)
inlineexplicit

Definition at line 223 of file thread_registry_backend.hpp.

Member Function Documentation

◆ all()

template<typename Predicate >
auto threadschedule::detail::thread_registry_backend::query_view::all ( Predicate &&  pred) const -> bool
inline

Definition at line 308 of file thread_registry_backend.hpp.

References map().

◆ any()

template<typename Predicate >
auto threadschedule::detail::thread_registry_backend::query_view::any ( Predicate &&  pred) const -> bool
inline

Definition at line 296 of file thread_registry_backend.hpp.

References map().

Referenced by none().

◆ count()

auto threadschedule::detail::thread_registry_backend::query_view::count ( ) const -> size_t
inline

Definition at line 250 of file thread_registry_backend.hpp.

◆ empty()

auto threadschedule::detail::thread_registry_backend::query_view::empty ( ) const -> bool
inline

Definition at line 256 of file thread_registry_backend.hpp.

◆ entries()

auto threadschedule::detail::thread_registry_backend::query_view::entries ( ) const -> std::vector<registered_thread_info_backend> const&
inline

Definition at line 262 of file thread_registry_backend.hpp.

◆ filter()

template<typename Predicate >
auto threadschedule::detail::thread_registry_backend::query_view::filter ( Predicate &&  pred) const -> query_view
inline

Definition at line 227 of file thread_registry_backend.hpp.

References map().

◆ find_if()

template<typename Predicate >
auto threadschedule::detail::thread_registry_backend::query_view::find_if ( Predicate &&  pred) const -> std::optional<registered_thread_info_backend>
inline

Definition at line 284 of file thread_registry_backend.hpp.

References map().

◆ for_each()

template<typename Fn >
void threadschedule::detail::thread_registry_backend::query_view::for_each ( Fn &&  fn) const
inline

Definition at line 241 of file thread_registry_backend.hpp.

References map().

◆ map()

template<typename Fn >
auto threadschedule::detail::thread_registry_backend::query_view::map ( Fn &&  fn) const -> std::vector<std::invoke_result_t<Fn, registered_thread_info_backend const&>>
inline

Definition at line 270 of file thread_registry_backend.hpp.

References map().

Referenced by all(), any(), filter(), find_if(), for_each(), map(), none(), skip(), and take().

◆ none()

template<typename Predicate >
auto threadschedule::detail::thread_registry_backend::query_view::none ( Predicate &&  pred) const -> bool
inline

Definition at line 320 of file thread_registry_backend.hpp.

References any(), and map().

◆ skip()

auto threadschedule::detail::thread_registry_backend::query_view::skip ( size_t  n) const -> query_view
inline

Definition at line 335 of file thread_registry_backend.hpp.

References map().

◆ take()

auto threadschedule::detail::thread_registry_backend::query_view::take ( size_t  n) const -> query_view
inline

Definition at line 326 of file thread_registry_backend.hpp.

References map().


The documentation for this class was generated from the following file: