aboutsummaryrefslogtreecommitdiff
path: root/butl/optional
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2015-06-11 18:36:04 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2015-06-11 18:36:04 +0200
commitfaf53e5fdda42a40959dda689532af6f030d9fa2 (patch)
tree029268e46d6bc607292e53c8d04b09fabd92266f /butl/optional
parent4224a2fc7a046d26a94faf8b848595bdc8f0cee3 (diff)
Add optional implementation
Diffstat (limited to 'butl/optional')
-rw-r--r--butl/optional39
1 files changed, 39 insertions, 0 deletions
diff --git a/butl/optional b/butl/optional
new file mode 100644
index 0000000..fc34b33
--- /dev/null
+++ b/butl/optional
@@ -0,0 +1,39 @@
+// file : butl/optional -*- C++ -*-
+// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd
+// license : MIT; see accompanying LICENSE file
+
+#ifndef BUTL_OPTIONAL
+#define BUTL_OPTIONAL
+
+namespace butl
+{
+ // Simple optional class template while waiting for std::optional.
+ //
+ template <typename T>
+ class optional
+ {
+ public:
+ typedef T value_type;
+
+ optional (): null_ (true) {}
+ optional (const T& v): value_ (v), null_ (false) {}
+ optional& operator= (const T& v) {value_ = v; null_ = false; return *this;}
+
+ T& value () {return value_;}
+ const T& value () const {return value_;}
+
+ T* operator-> () {return &value_;}
+ const T* operator-> () const {return &value_;}
+
+ T& operator* () {return value_;}
+ const T& operator* () const {return value_;}
+
+ explicit operator bool () const {return !null_;}
+
+ private:
+ T value_;
+ bool null_;
+ };
+}
+
+#endif // BUTL_OPTIONAL