mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
Add Optional::map.
This commit is contained in:
parent
0104e43c85
commit
77a4abe86e
@ -267,6 +267,14 @@ public:
|
|||||||
return hasValue() ? getValue() : std::forward<U>(value);
|
return hasValue() ? getValue() : std::forward<U>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Apply a function to the value if present; otherwise return None.
|
||||||
|
template <class Function>
|
||||||
|
auto map(const Function &F) const
|
||||||
|
-> Optional<decltype(F(getValue()))> {
|
||||||
|
if (*this) return F(getValue());
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
#if LLVM_HAS_RVALUE_REFERENCE_THIS
|
#if LLVM_HAS_RVALUE_REFERENCE_THIS
|
||||||
T &&getValue() && { return std::move(Storage.getValue()); }
|
T &&getValue() && { return std::move(Storage.getValue()); }
|
||||||
T &&operator*() && { return std::move(Storage.getValue()); }
|
T &&operator*() && { return std::move(Storage.getValue()); }
|
||||||
@ -275,6 +283,14 @@ public:
|
|||||||
T getValueOr(U &&value) && {
|
T getValueOr(U &&value) && {
|
||||||
return hasValue() ? std::move(getValue()) : std::forward<U>(value);
|
return hasValue() ? std::move(getValue()) : std::forward<U>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Apply a function to the value if present; otherwise return None.
|
||||||
|
template <class Function>
|
||||||
|
auto map(const Function &F) &&
|
||||||
|
-> Optional<decltype(F(std::move(*this).getValue()))> {
|
||||||
|
if (*this) return F(std::move(*this).getValue());
|
||||||
|
return None;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user