Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-26 08:22:12

0001 /** TRACCC library, part of the ACTS project (R&D line)
0002  *
0003  * (c) 2022 CERN for the benefit of the ACTS project
0004  *
0005  * Mozilla Public License Version 2.0
0006  */
0007 
0008 #pragma once
0009 
0010 namespace traccc::sycl {
0011 
0012 /// Wrapper class for @c sycl::queue
0013 ///
0014 /// It is necessary for passing around SYCL queue objects in code that should
0015 /// not be directly exposed to the SYCL headers.
0016 ///
0017 /// Note that unlike @c vecmem::sycl::queue_wrapper, this type can not own a
0018 /// queue of its own. It can only view a queue that is owned by "somebody else".
0019 ///
0020 class queue_wrapper {
0021  public:
0022   /// Wrap an existing @c sycl::queue object, without taking ownership
0023   queue_wrapper(void* queue);
0024 
0025   /// Copy constructor
0026   queue_wrapper(const queue_wrapper& parent) = default;
0027   /// Move constructor
0028   queue_wrapper(queue_wrapper&& parent) = default;
0029 
0030   /// Copy assignment
0031   queue_wrapper& operator=(const queue_wrapper& rhs) = default;
0032   /// Move assignment
0033   queue_wrapper& operator=(queue_wrapper&& rhs) = default;
0034 
0035   /// Access a typeless pointer to the managed @c sycl::queue object
0036   void* queue();
0037   /// Access a typeless pointer to the managed @c sycl::queue object
0038   const void* queue() const;
0039 
0040  private:
0041   /// Bare pointer to the wrapped @c sycl::queue object
0042   void* m_queue;
0043 
0044 };  // class queue_wrapper
0045 
0046 }  // namespace traccc::sycl