File indexing completed on 2025-12-16 10:12:39
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef DDDIGI_DIGIPARALLELWORKERGROUP_H
0014 #define DDDIGI_DIGIPARALLELWORKERGROUP_H
0015
0016
0017 #include <DDDigi/DigiParallelWorker.h>
0018
0019
0020 #include <cstdint>
0021 #include <vector>
0022
0023
0024 namespace dd4hep {
0025
0026
0027 namespace digi {
0028
0029
0030 template <typename T> class DigiParallelWorkers;
0031 template <typename T> class DigiParallelWorkerGroup;
0032
0033
0034
0035
0036
0037
0038
0039
0040 template <typename T> class DigiParallelWorkerGroup {
0041
0042 const DigiParallelWorkers<T>& workers;
0043
0044 public:
0045
0046 DigiParallelWorkerGroup(const DigiParallelWorkers<T>& workers);
0047
0048 DigiParallelWorkerGroup(DigiParallelWorkerGroup&& copy) = delete;
0049
0050 DigiParallelWorkerGroup(const DigiParallelWorkerGroup& copy) = delete;
0051
0052 DigiParallelWorkerGroup& operator=(DigiParallelWorkerGroup&& copy) = delete;
0053
0054 DigiParallelWorkerGroup& operator=(const DigiParallelWorkerGroup& copy) = delete;
0055
0056 ~DigiParallelWorkerGroup();
0057
0058 operator ParallelWorker*const* ();
0059
0060 std::vector<typename DigiParallelWorkers<T>::worker_t*> actors() {
0061 return workers.actors;
0062 }
0063 };
0064
0065
0066 template <typename T> inline
0067 DigiParallelWorkerGroup<T>::DigiParallelWorkerGroup(const DigiParallelWorkers<T>& w)
0068 : workers(w)
0069 {
0070 workers.semaphore.aquire();
0071 }
0072
0073
0074 template <typename T> inline DigiParallelWorkerGroup<T>::~DigiParallelWorkerGroup() {
0075 workers.semaphore.release();
0076 }
0077
0078
0079 template <typename T> inline DigiParallelWorkerGroup<T>::operator ParallelWorker*const* () {
0080 return (ParallelWorker**)&this->workers.actors.at(0);
0081 }
0082
0083 }
0084 }
0085 #endif