non_null_ptr-inl.h 941 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #ifndef NON_NULL_PTR_H_
  3. #error "Direct inclusion of this file is not allowed, include helpers.h"
  4. // For the sake of sane code completion.
  5. #include "non_null_ptr.h"
  6. #endif
  7. #include <library/cpp/yt/assert/assert.h>
  8. namespace NYT {
  9. ////////////////////////////////////////////////////////////////////////////////
  10. template <class T>
  11. TNonNullPtrBase<T>::TNonNullPtrBase(T* ptr) noexcept
  12. : Ptr_(ptr)
  13. {
  14. YT_VERIFY(ptr);
  15. }
  16. template <class T>
  17. T* TNonNullPtrBase<T>::operator->() const noexcept
  18. {
  19. return Ptr_;
  20. }
  21. template <class T>
  22. T& TNonNullPtrBase<T>::operator*() const noexcept
  23. {
  24. return *Ptr_;
  25. }
  26. template <class T>
  27. TNonNullPtrBase<T>::TNonNullPtrBase() noexcept
  28. : Ptr_(nullptr)
  29. { }
  30. template <class T>
  31. TNonNullPtr<T> GetPtr(T& ref) noexcept
  32. {
  33. TNonNullPtr<T> ptr;
  34. ptr.Ptr_ = &ref;
  35. return ptr;
  36. }
  37. ////////////////////////////////////////////////////////////////////////////////
  38. } // namespace NYT