aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/Nullable.h
diff options
context:
space:
mode:
authorJack Moffitt <jack@metajack.im>2014-08-28 09:34:23 -0600
committerJack Moffitt <jack@metajack.im>2014-09-08 20:21:42 -0600
commitc6ab60dbfc6da7b4f800c9e40893c8b58413960c (patch)
treed1d74076cf7fa20e4f77ec7cb82cae98b67362cb /components/script/dom/bindings/codegen/Nullable.h
parentdb2f642c32fc5bed445bb6f2e45b0f6f0b4342cf (diff)
downloadservo-c6ab60dbfc6da7b4f800c9e40893c8b58413960c.tar.gz
servo-c6ab60dbfc6da7b4f800c9e40893c8b58413960c.zip
Cargoify servo
Diffstat (limited to 'components/script/dom/bindings/codegen/Nullable.h')
-rw-r--r--components/script/dom/bindings/codegen/Nullable.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/components/script/dom/bindings/codegen/Nullable.h b/components/script/dom/bindings/codegen/Nullable.h
new file mode 100644
index 00000000000..8b2cc08642b
--- /dev/null
+++ b/components/script/dom/bindings/codegen/Nullable.h
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/
+/* vim: set ts=2 sw=2 et tw=79: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef mozilla_dom_Nullable_h
+#define mozilla_dom_Nullable_h
+
+#include "mozilla/Assertions.h"
+
+namespace mozilla {
+namespace dom {
+
+// Support for nullable types
+template <typename T>
+struct Nullable
+{
+private:
+ T mValue;
+ bool mIsNull;
+
+public:
+ Nullable()
+ : mIsNull(true)
+ {}
+
+ Nullable(T aValue)
+ : mValue(aValue)
+ , mIsNull(false)
+ {}
+
+ void SetValue(T aValue) {
+ mValue = aValue;
+ mIsNull = false;
+ }
+
+ // For cases when |T| is some type with nontrivial copy behavior, we may want
+ // to get a reference to our internal copy of T and work with it directly
+ // instead of relying on the copying version of SetValue().
+ T& SetValue() {
+ mIsNull = false;
+ return mValue;
+ }
+
+ void SetNull() {
+ mIsNull = true;
+ }
+
+ const T& Value() const {
+ MOZ_ASSERT(!mIsNull);
+ return mValue;
+ }
+
+ T& Value() {
+ MOZ_ASSERT(!mIsNull);
+ return mValue;
+ }
+
+ bool IsNull() const {
+ return mIsNull;
+ }
+};
+
+} // namespace dom
+} // namespace mozilla
+
+#endif /* mozilla_dom_Nullable_h */