dawncpp.h: Add nullptr ObjectBase constructor and assignment
BUG=dawn:3
Change-Id: I9f7ec0ae1c7885809888a603ed056c6565751bec
Reviewed-on: https://dawn-review.googlesource.com/c/2840
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Stephen White <senorblanco@chromium.org>
Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/generator/templates/apicpp.h b/generator/templates/apicpp.h
index af142b0..87bd71b 100644
--- a/generator/templates/apicpp.h
+++ b/generator/templates/apicpp.h
@@ -97,6 +97,15 @@
return static_cast<Derived&>(*this);
}
+ ObjectBase(nullptr_t) {}
+ Derived& operator=(nullptr_t) {
+ if (mHandle != nullptr) {
+ Derived::DawnRelease(mHandle);
+ mHandle = nullptr;
+ }
+ return static_cast<Derived&>(*this);
+ }
+
explicit operator bool() const {
return mHandle != nullptr;
}
diff --git a/src/tests/unittests/ObjectBaseTests.cpp b/src/tests/unittests/ObjectBaseTests.cpp
index 2c9dccb..b42920f 100644
--- a/src/tests/unittests/ObjectBaseTests.cpp
+++ b/src/tests/unittests/ObjectBaseTests.cpp
@@ -177,3 +177,21 @@
ASSERT_EQ(obj.Get(), &refcount);
ASSERT_EQ(refcount, 2);
}
+
+// Test the constructor using nullptr
+TEST(ObjectBase, NullptrConstructor) {
+ Object obj(nullptr);
+ ASSERT_EQ(obj.Get(), nullptr);
+}
+
+// Test assigning nullptr to the object
+TEST(ObjectBase, AssignNullptr) {
+ int refcount = 1;
+
+ Object obj(&refcount);
+ ASSERT_EQ(refcount, 2);
+
+ obj = nullptr;
+ ASSERT_EQ(refcount, 1);
+}
+