Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-10-28 08:39:18

0001 //------------------------------- -*- C++ -*- -------------------------------//
0002 // Copyright Celeritas contributors: see top-level COPYRIGHT file for details
0003 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0004 //---------------------------------------------------------------------------//
0005 //! \file corecel/data/ObserverPtr.device.hh
0006 //! \brief Interoperability with Thrust
0007 //---------------------------------------------------------------------------//
0008 #pragma once
0009 
0010 #include <thrust/device_ptr.h>
0011 
0012 #include "ObserverPtr.hh"
0013 
0014 namespace celeritas
0015 {
0016 //---------------------------------------------------------------------------//
0017 //! Create an observer pointer from a Thrust device pointer
0018 template<class T>
0019 ObserverPtr<T, MemSpace::device> make_observer(thrust::device_ptr<T> ptr)
0020 {
0021     return ObserverPtr<T, MemSpace::device>{ptr.get()};
0022 }
0023 
0024 //---------------------------------------------------------------------------//
0025 //! Create a Thrust device pointer from an Observer pointer
0026 template<class T>
0027 thrust::device_ptr<T> device_pointer_cast(ObserverPtr<T, MemSpace::device> ptr)
0028 {
0029     return thrust::device_ptr<T>{static_cast<T*>(ptr)};
0030 }
0031 
0032 //---------------------------------------------------------------------------//
0033 }  // namespace celeritas