DPC++ Runtime
Runtime libraries for oneAPI DPC++
weak_object_base.hpp
Go to the documentation of this file.
1 //==------- weak_object_base.hpp --- SYCL weak objects base class ----------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #pragma once
10 
12 
13 namespace sycl {
15 namespace ext::oneapi::detail {
16 template <typename SYCLObjT> class weak_object_base;
17 
18 // Helper function for getting the underlying weak_ptr from a weak_object.
19 template <typename SYCLObjT>
21 getSyclWeakObjImpl(const weak_object_base<SYCLObjT> &WeakObj) {
22  return WeakObj.MObjWeakPtr;
23 }
24 
25 // Common base class for weak_object.
26 template <typename SYCLObjT> class weak_object_base {
27 public:
28  using object_type = SYCLObjT;
29 
30  constexpr weak_object_base() noexcept : MObjWeakPtr() {}
31  weak_object_base(const SYCLObjT &SYCLObj) noexcept
32  : MObjWeakPtr(sycl::detail::getSyclObjImpl(SYCLObj)) {}
33  weak_object_base(const weak_object_base &Other) noexcept = default;
34  weak_object_base(weak_object_base &&Other) noexcept = default;
35 
36  weak_object_base &operator=(const weak_object_base &Other) noexcept = default;
37  weak_object_base &operator=(weak_object_base &&Other) noexcept = default;
38 
39  void reset() noexcept { MObjWeakPtr.reset(); }
40  void swap(weak_object_base &Other) noexcept {
41  MObjWeakPtr.swap(Other.MObjWeakPtr);
42  }
43 
44  bool expired() const noexcept { return MObjWeakPtr.expired(); }
45 
46  bool owner_before(const SYCLObjT &Other) const noexcept {
47  return MObjWeakPtr.owner_before(sycl::detail::getSyclObjImpl(Other));
48  }
49  bool owner_before(const weak_object_base &Other) const noexcept {
50  return MObjWeakPtr.owner_before(Other.MObjWeakPtr);
51  }
52 
53 protected:
54  // Store a weak variant of the impl in the SYCLObjT.
55  typename std::invoke_result_t<
56  decltype(sycl::detail::getSyclObjImpl<SYCLObjT>), SYCLObjT>::weak_type
58 
59  template <class Obj>
60  friend decltype(weak_object_base<Obj>::MObjWeakPtr)
62 };
63 } // namespace ext::oneapi::detail
64 } // __SYCL_INLINE_VER_NAMESPACE(_V1)
65 } // namespace sycl
sycl::_V1::ext::oneapi::detail::weak_object_base::MObjWeakPtr
std::invoke_result_t< decltype(sycl::detail::getSyclObjImpl< SYCLObjT >), SYCLObjT >::weak_type MObjWeakPtr
Definition: weak_object_base.hpp:57
__SYCL_INLINE_VER_NAMESPACE
#define __SYCL_INLINE_VER_NAMESPACE(X)
Definition: defines_elementary.hpp:11
sycl::_V1::buffer
Defines a shared array that can be used by kernels in queues.
Definition: buffer.hpp:37
sycl::_V1::ext::oneapi::detail::weak_object_base::reset
void reset() noexcept
Definition: weak_object_base.hpp:39
sycl::_V1::ext::oneapi::detail::weak_object_base::owner_before
bool owner_before(const weak_object_base &Other) const noexcept
Definition: weak_object_base.hpp:49
sycl
---— Error handling, matching OpenCL plugin semantics.
Definition: access.hpp:14
sycl::_V1::ext::oneapi::detail::weak_object_base::weak_object_base
weak_object_base(const SYCLObjT &SYCLObj) noexcept
Definition: weak_object_base.hpp:31
defines_elementary.hpp
sycl::_V1::ext::oneapi::detail::getSyclWeakObjImpl
decltype(weak_object_base< SYCLObjT >::MObjWeakPtr) getSyclWeakObjImpl(const weak_object_base< SYCLObjT > &WeakObj)
Definition: weak_object_base.hpp:21
sycl::_V1::ext::oneapi::experimental::operator=
annotated_arg & operator=(annotated_arg &)=default
sycl::_V1::ext::oneapi::detail::weak_object_base
Definition: weak_object_base.hpp:16
sycl::_V1::ext::oneapi::detail::weak_object_base::expired
bool expired() const noexcept
Definition: weak_object_base.hpp:44
sycl::_V1::ext::oneapi::detail::weak_object_base::weak_object_base
constexpr weak_object_base() noexcept
Definition: weak_object_base.hpp:30
sycl::_V1::ext::oneapi::detail::weak_object_base::owner_before
bool owner_before(const SYCLObjT &Other) const noexcept
Definition: weak_object_base.hpp:46
sycl::_V1::detail::getSyclObjImpl
decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject)
Definition: common.hpp:300
sycl::_V1::ext::oneapi::detail::weak_object_base::swap
void swap(weak_object_base &Other) noexcept
Definition: weak_object_base.hpp:40