1#ifndef LIBFILEZILLA_OPTIONAL_HEADER
2#define LIBFILEZILLA_OPTIONAL_HEADER
19class sparse_optional final
22 sparse_optional()
noexcept =
default;
23 explicit sparse_optional(T
const& v);
26 explicit sparse_optional(T * v)
noexcept;
28 sparse_optional(sparse_optional<T>
const& v);
29 sparse_optional(sparse_optional<T> && v)
noexcept;
34 explicit operator bool()
const {
return v_ !=
nullptr; };
36 T& operator*() {
return *v_; }
37 T
const& operator*()
const {
return *v_; }
39 T* operator->() {
return v_; }
40 T
const* operator->()
const {
return v_; }
42 bool operator==(sparse_optional<T>
const& cmp)
const;
43 inline bool operator!=(sparse_optional<T>
const& cmp)
const {
return !(*
this == cmp); }
44 bool operator<(sparse_optional<T>
const& cmp)
const;
46 sparse_optional<T>& operator=(sparse_optional<T>
const& v);
47 sparse_optional<T>& operator=(sparse_optional<T> && v)
noexcept;
53sparse_optional<T>::sparse_optional(T
const& v)
59sparse_optional<T>::sparse_optional(T * v) noexcept
83sparse_optional<T>::~sparse_optional()
89void sparse_optional<T>::clear()
101 value =
new T(*v.v_);
125 if (!v_ && !cmp.v_) {
129 if (!v_ || !cmp.v_) {
133 return *v_ == *cmp.v_;
139 if (!v_ || !cmp.v_) {
140 return cmp.v_ !=
nullptr;
143 return *v_ < *cmp.v_;
Similar to C++17's std::optional, but stores the data in dynamic memory.
Definition optional.hpp:20
The namespace used by libfilezilla.
Definition apply.hpp:17
@ value
Definition xml.hpp:36