Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(125)

Unified Diff: sky/engine/bindings2/nullable.h

Issue 918333002: Add the c++ code part of bindings2/ (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Updated per earlier reviews Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/engine/bindings2/mojo_natives.cc ('k') | sky/engine/bindings2/scheduled_action.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/engine/bindings2/nullable.h
diff --git a/sky/engine/bindings2/nullable.h b/sky/engine/bindings2/nullable.h
new file mode 100644
index 0000000000000000000000000000000000000000..4bca0bae3f5fcedf0ef9b8f8fe987e7ab77c9357
--- /dev/null
+++ b/sky/engine/bindings2/nullable.h
@@ -0,0 +1,54 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SKY_ENGINE_BINDINGS2_NULLABLE_H_
+#define SKY_ENGINE_BINDINGS2_NULLABLE_H_
+
+#include "base/logging.h"
+
+namespace blink {
+
+template <typename T>
+class Nullable {
+ public:
+ Nullable() : value_(), is_null_(true) {}
+ Nullable(const T& value) : value_(value), is_null_(false) {}
+ Nullable(const Nullable& other)
+ : value_(other.value_), is_null_(other.is_null_) {}
+
+ Nullable& operator=(const Nullable& other) = default;
+
+ void set(const T& value) {
+ value_ = value;
+ is_null_ = false;
+ }
+
+ const T& get() const {
+ DCHECK(!is_null_);
+ return value_;
+ }
+ T& get() {
+ DCHECK(!is_null_);
+ return value_;
+ }
+
+ bool is_null() const { return is_null_; }
+
+ // See comment in RefPtr.h about what UnspecifiedBoolType is.
+ typedef const T* UnspecifiedBoolType;
+ operator UnspecifiedBoolType() const { return is_null_ ? 0 : &value_; }
+
+ bool operator==(const Nullable& other) const {
+ return (is_null_ && other.is_null_) ||
+ (!is_null_ && !other.is_null_ && value_ == other.value_);
+ }
+
+ private:
+ T value_;
+ bool is_null_;
+};
+
+} // namespace blink
+
+#endif // SKY_ENGINE_BINDINGS2_NULLABLE_H_
« no previous file with comments | « sky/engine/bindings2/mojo_natives.cc ('k') | sky/engine/bindings2/scheduled_action.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698