summaryrefslogtreecommitdiffstats
path: root/include/clang/Analysis/Support/Optional.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/clang/Analysis/Support/Optional.h')
-rw-r--r--include/clang/Analysis/Support/Optional.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/include/clang/Analysis/Support/Optional.h b/include/clang/Analysis/Support/Optional.h
index 40f38be..a4e6d51 100644
--- a/include/clang/Analysis/Support/Optional.h
+++ b/include/clang/Analysis/Support/Optional.h
@@ -20,19 +20,27 @@ namespace clang {
template<typename T>
class Optional {
- const T x;
+ T x;
unsigned hasVal : 1;
public:
- explicit Optional() : hasVal(false) {}
+ explicit Optional() : x(), hasVal(false) {}
Optional(const T &y) : x(y), hasVal(true) {}
static inline Optional create(const T* y) {
return y ? Optional(*y) : Optional();
}
+ Optional &operator=(const T &y) {
+ x = y;
+ hasVal = true;
+ return *this;
+ }
+
const T* getPointer() const { assert(hasVal); return &x; }
+ const T& getValue() const { assert(hasVal); return x; }
operator bool() const { return hasVal; }
+ bool hasValue() const { return hasVal; }
const T* operator->() const { return getPointer(); }
const T& operator*() const { assert(hasVal); return x; }
};
OpenPOWER on IntegriCloud