SPH
PropagateConst.h
Go to the documentation of this file.
1 #pragma once
2 
7 
9 
11 
15 template <typename TPtr>
17 private:
18  TPtr ptr;
19 
20  using TRef = decltype(*std::declval<TPtr>());
21  static_assert(std::is_reference<TRef>::value, "Must be a reference");
22 
23  using TValue = std::decay_t<TRef>;
24  using TConstRef = std::add_const_t<TValue>&;
25 
26 public:
27  PropagateConst() = default;
28 
29  PropagateConst(TPtr&& ptr)
30  : ptr(std::move(ptr)) {}
31 
33  : ptr(std::move(other.ptr)) {}
34 
35  PropagateConst& operator=(TPtr&& newPtr) {
36  ptr = std::move(newPtr);
37  return *this;
38  }
39 
40  TRef operator*() {
41  return *ptr;
42  }
43 
44  TConstRef operator*() const {
45  return *ptr;
46  }
47 
49  return ptr.get();
50  }
51 
53  return ptr.get();
54  }
55 };
56 
NAMESPACE_SPH_BEGIN
Definition: BarnesHut.cpp:13
#define NAMESPACE_SPH_END
Definition: Object.h:12
Simple non-owning wrapper of pointer.
Const-propagating wrapper for object with point semantics.
PropagateConst()=default
TConstRef operator*() const
RawPtr< TValue > operator->()
PropagateConst(PropagateConst &&other)
PropagateConst(TPtr &&ptr)
RawPtr< const TValue > operator->() const
PropagateConst & operator=(TPtr &&newPtr)
Non-owning wrapper of pointer.
Definition: RawPtr.h:19
Overload of std::swap for Sph::Array.
Definition: Array.h:578