summaryrefslogtreecommitdiff
path: root/tools/aapt2/util/Maybe.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/aapt2/util/Maybe.h')
-rw-r--r--tools/aapt2/util/Maybe.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/tools/aapt2/util/Maybe.h b/tools/aapt2/util/Maybe.h
index 595db960d5e5..a31bc89fa98b 100644
--- a/tools/aapt2/util/Maybe.h
+++ b/tools/aapt2/util/Maybe.h
@@ -88,6 +88,8 @@ public:
*/
const T& value() const;
+ T valueOrDefault(const T& def) const;
+
private:
template <typename U>
friend class Maybe;
@@ -263,6 +265,14 @@ const T& Maybe<T>::value() const {
}
template <typename T>
+T Maybe<T>::valueOrDefault(const T& def) const {
+ if (mNothing) {
+ return def;
+ }
+ return reinterpret_cast<const T&>(mStorage);
+}
+
+template <typename T>
void Maybe<T>::destroy() {
reinterpret_cast<T&>(mStorage).~T();
}
@@ -306,6 +316,19 @@ typename std::enable_if<
return !(a == b);
}
+template <typename T, typename U>
+typename std::enable_if<
+ has_lt_op<T, U>::value,
+ bool
+>::type operator<(const Maybe<T>& a, const Maybe<U>& b) {
+ if (a && b) {
+ return a.value() < b.value();
+ } else if (!a && !b) {
+ return false;
+ }
+ return !a;
+}
+
} // namespace aapt
#endif // AAPT_MAYBE_H