28 #ifndef SRC_XRDEC_XRDECTHREADPOOL_HH_
29 #define SRC_XRDEC_XRDECTHREADPOOL_HH_
47 template <
int I,
int ... Ns>
61 template <
typename FUNC,
typename TUPL,
int ... INDICES>
64 return func( std::move( std::get<INDICES>( args ) )... );
68 template <
typename FUNC,
typename ... ARGs>
71 return tuple_call_impl( func, tup,
typename seq_gen<
sizeof...(ARGs)>::type{} );
78 template<
typename FUNC,
typename RET,
typename ... ARGs>
94 template<
typename RETURN>
108 args( std::tuple<ARGs...>( std::move(
args )... ) )
126 return prms.get_future();
159 template<
typename FUNC,
typename ... ARGs>
160 inline std::future<
typename std::result_of<FUNC(ARGs...)>::type>
163 using RET =
typename std::result_of<FUNC(ARGs...)>::type;
164 AnyJob<FUNC, RET, ARGs...> *job =
new AnyJob<FUNC, RET, ARGs...>( func, std::move( args )... );
167 return std::move( ftr );
AnyJob(FUNC func, ARGs...args)
Definition: XrdEcThreadPool.hh:107
bool Finalize()
Finalize the job manager, clear the queues.
A synchronized queue.
Definition: XrdClJobManager.hh:50
static auto tuple_call(FUNC &func, std::tuple< ARGs...> &tup) -> decltype(tuple_call_impl(func, tup, typename seq_gen< sizeof...(ARGs)>::type
Definition: XrdEcThreadPool.hh:69
static void RunImpl(FUNC func, std::tuple< ARGs...> &args, std::promise< RETURN > &prms)
Definition: XrdEcThreadPool.hh:95
static void RunImpl(FUNC func, std::tuple< ARGs...> &args, std::promise< void > &prms)
Definition: XrdEcThreadPool.hh:84
bool Stop()
Stop the workers.
Definition: XrdEcThreadPool.hh:44
ThreadPool()
Constructor.
Definition: XrdEcThreadPool.hh:175
bool Initialize()
Initialize the job manager.
std::future< RET > GetFuture()
Get the future result of the job.
Definition: XrdEcThreadPool.hh:124
FUNC func
Definition: XrdEcThreadPool.hh:131
static ThreadPool & Instance()
Singleton access.
Definition: XrdEcThreadPool.hh:150
void Run(void *arg)
Run the job.
Definition: XrdEcThreadPool.hh:115
void QueueJob(Job *job, void *arg=0)
Add a job to be run.
Definition: XrdClJobManager.hh:92
std::promise< RET > prms
Definition: XrdEcThreadPool.hh:133
std::tuple< ARGs...> args
Definition: XrdEcThreadPool.hh:132
Definition: XrdEcThreadPool.hh:36
bool Start()
Start the workers.
Definition: XrdEcThreadPool.hh:79
Definition: XrdEcThreadPool.hh:41
XrdCl::JobManager threadpool
Definition: XrdEcThreadPool.hh:181
~ThreadPool()
Destructor.
Definition: XrdEcThreadPool.hh:141
typename seq_gen< I-1, I-1, Ns...>::type type
Definition: XrdEcThreadPool.hh:50
std::future< typename std::result_of< FUNC(ARGs...)>::type > Execute(FUNC func, ARGs...args)
Schedule a functional (together with its arguments) for execution.
Definition: XrdEcThreadPool.hh:161
Interface for a job to be run by the job manager.
Definition: XrdClJobManager.hh:33
static auto tuple_call_impl(FUNC &func, TUPL &args, sequence< INDICES...>) -> decltype(func(std::move(std::get< INDICES >(args))...))
Definition: XrdEcThreadPool.hh:62