diff options
author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-11-22 15:10:49 +0100 |
---|---|---|
committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-11-22 15:10:49 +0100 |
commit | d038f192c7dcb453c9fc19082cd1b642c8f70fc8 (patch) | |
tree | bcb539657cd8b35ed742f19e5673c777ab39610c /src/crepe/util/OptionalRef.hpp | |
parent | c3c3476f1d82aa83d8f8dc706488475dc2cf1e55 (diff) | |
parent | 4117d1d287f1d87efd0577d56819520e981a7f1c (diff) |
merge with `master`
Diffstat (limited to 'src/crepe/util/OptionalRef.hpp')
-rw-r--r-- | src/crepe/util/OptionalRef.hpp | 44 |
1 files changed, 7 insertions, 37 deletions
diff --git a/src/crepe/util/OptionalRef.hpp b/src/crepe/util/OptionalRef.hpp index 7b201b0..4608c9e 100644 --- a/src/crepe/util/OptionalRef.hpp +++ b/src/crepe/util/OptionalRef.hpp @@ -8,53 +8,19 @@ namespace crepe { template <typename T> OptionalRef<T>::OptionalRef(T & ref) { - this->set(ref); -} - -template <typename T> -OptionalRef<T>::OptionalRef(const OptionalRef<T> & other) { - this->ref = other.ref; -} - -template <typename T> -OptionalRef<T>::OptionalRef(OptionalRef<T> && other) { - this->ref = other.ref; - other.clear(); -} - -template <typename T> -OptionalRef<T> & OptionalRef<T>::operator=(const OptionalRef<T> & other) { - this->ref = other.ref; - return *this; -} - -template <typename T> -OptionalRef<T> & OptionalRef<T>::operator=(OptionalRef<T> && other) { - this->ref = other.ref; - other.clear(); - return *this; + this->ref = &ref; } template <typename T> -T & OptionalRef<T>::get() const { +OptionalRef<T>::operator T &() const { if (this->ref == nullptr) throw std::runtime_error("OptionalRef: attempt to dereference nullptr"); return *this->ref; } template <typename T> -void OptionalRef<T>::set(T & ref) noexcept { - this->ref = &ref; -} - -template <typename T> -void OptionalRef<T>::clear() noexcept { - this->ref = nullptr; -} - -template <typename T> OptionalRef<T> & OptionalRef<T>::operator=(T & ref) { - this->set(ref); + this->ref = &ref; return *this; } @@ -63,5 +29,9 @@ OptionalRef<T>::operator bool() const noexcept { return this->ref != nullptr; } +template <typename T> +void OptionalRef<T>::clear() noexcept { + this->ref = nullptr; } +} // namespace crepe |