xref: /aosp_15_r20/external/pytorch/c10/core/OptionalRef.h (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1 #pragma once
2 
3 namespace c10 {
4 
5 template <typename T>
6 class OptionalRef {
7  public:
OptionalRef()8   OptionalRef() : data_(nullptr) {}
OptionalRef(const T * data)9   OptionalRef(const T* data) : data_(data) {
10     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_);
11   }
OptionalRef(const T & data)12   OptionalRef(const T& data) : data_(&data) {}
13 
has_value()14   bool has_value() const {
15     return data_ != nullptr;
16   }
17 
get()18   const T& get() const {
19     TORCH_INTERNAL_ASSERT_DEBUG_ONLY(data_);
20     return *data_;
21   }
22 
23   operator bool() const {
24     return has_value();
25   }
26 
27  private:
28   const T* data_;
29 };
30 
31 } // namespace c10
32