1 #ifndef LIBFILEZILLA_SHARED_HEADER 2 #define LIBFILEZILLA_SHARED_HEADER 42 const T& operator*()
const;
43 const T* operator->()
const;
54 bool operator==(T
const& cmp)
const;
55 bool operator<(shared_optional<T, Init>
const& cmp)
const;
56 bool operator<(T
const& cmp)
const;
62 inline bool operator!=(T
const& cmp)
const {
return !(*
this == cmp); }
68 explicit operator bool()
const {
return static_cast<bool>(data_); }
70 bool empty()
const {
return !data_; }
72 std::shared_ptr<T> data_;
87 : data_(Init ? std::make_shared<T>() : nullptr)
91 template<
typename T,
bool Init> shared_optional<T, Init>::shared_optional(
const T& v)
92 : data_(std::make_shared<T>(v))
96 template<
typename T,
bool Init>
bool shared_optional<T, Init>::operator==(shared_optional<T, Init>
const& cmp)
const 98 if (data_ == cmp.data_) {
101 else if (!Init && (!data_ || !cmp.data_)) {
105 return *data_ == *cmp.data_;
108 template<
typename T,
bool Init>
bool shared_optional<T, Init>::operator==(T
const& cmp)
const 110 if (!Init && !data_) {
113 return *data_ == cmp;
118 return data_ == cmp.data_;
123 if (!Init && !data_) {
124 data_ = std::make_shared<T>();
126 if (!data_.unique()) {
127 data_ = std::make_shared<T>(*data_);
135 if (data_ == cmp.data_)
137 else if (!Init && !data_) {
138 return static_cast<bool>(cmp.data_);
140 else if (!Init && !cmp.data_) {
143 return *data_ < *cmp.data_;
146 template<
typename T,
bool Init>
bool shared_optional<T, Init>::operator<(T
const& cmp)
const 148 if (!Init && !data_) {
154 template<
typename T,
bool Init>
void shared_optional<T, Init>::clear()
159 else if (data_.unique()) {
163 data_ = std::make_shared<T>();
167 template<
typename T,
bool Init>
const T& shared_optional<T, Init>::operator*()
const 172 template<
typename T,
bool Init>
const T* shared_optional<T, Init>::operator->()
const shared_optional is like std::shared_ptr but with relational operators acting like C++17's std::option...
Definition: shared.hpp:24
bool is_same(shared_optional< T, Init > const &cmp) const
Only compares the pointers.
Definition: shared.hpp:116
The namespace used by libfilezilla.
Definition: apply.hpp:16