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

Unified Diff: mojo/public/cpp/bindings/struct_ptr.h

Issue 2689513003: Add field-initializing constructors to generated mojo structs. (Closed)
Patch Set: rebase Created 3 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 | « mojo/public/cpp/bindings/lib/native_struct.cc ('k') | mojo/public/cpp/bindings/tests/OWNERS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/cpp/bindings/struct_ptr.h
diff --git a/mojo/public/cpp/bindings/struct_ptr.h b/mojo/public/cpp/bindings/struct_ptr.h
index dbc3256ea782eed9d1950fee35552c77ceb347d4..a01c42f9d05e689ba3e193242b254cdeebed9fe6 100644
--- a/mojo/public/cpp/bindings/struct_ptr.h
+++ b/mojo/public/cpp/bindings/struct_ptr.h
@@ -6,10 +6,12 @@
#define MOJO_PUBLIC_CPP_BINDINGS_STRUCT_PTR_H_
#include <functional>
+#include <memory>
#include <new>
#include "base/logging.h"
#include "base/macros.h"
+#include "base/optional.h"
#include "mojo/public/cpp/bindings/lib/hash_util.h"
#include "mojo/public/cpp/bindings/type_converter.h"
@@ -19,15 +21,6 @@ namespace internal {
constexpr size_t kHashSeed = 31;
template <typename Struct>
-class StructHelper {
- public:
- template <typename Ptr>
- static void Initialize(Ptr* ptr) {
- ptr->Initialize();
- }
-};
-
-template <typename Struct>
class StructPtrWTFHelper;
template <typename Struct>
@@ -41,35 +34,34 @@ class StructPtr {
public:
using Struct = S;
- StructPtr() : ptr_(nullptr) {}
- StructPtr(decltype(nullptr)) : ptr_(nullptr) {}
+ StructPtr() = default;
+ StructPtr(decltype(nullptr)) {}
- ~StructPtr() { delete ptr_; }
+ ~StructPtr() = default;
StructPtr& operator=(decltype(nullptr)) {
reset();
return *this;
}
- StructPtr(StructPtr&& other) : ptr_(nullptr) { Take(&other); }
+ StructPtr(StructPtr&& other) { Take(&other); }
StructPtr& operator=(StructPtr&& other) {
Take(&other);
return *this;
}
+ template <typename... Args>
+ StructPtr(base::in_place_t, Args&&... args)
+ : ptr_(new Struct(std::forward<Args>(args)...)) {}
+
template <typename U>
U To() const {
return TypeConverter<U, StructPtr>::Convert(*this);
}
- void reset() {
- if (ptr_) {
- delete ptr_;
- ptr_ = nullptr;
- }
- }
+ void reset() { ptr_.reset(); }
- bool is_null() const { return ptr_ == nullptr; }
+ bool is_null() const { return !ptr_; }
Struct& operator*() const {
DCHECK(ptr_);
@@ -77,9 +69,9 @@ class StructPtr {
}
Struct* operator->() const {
DCHECK(ptr_);
- return ptr_;
+ return ptr_.get();
}
- Struct* get() const { return ptr_; }
+ Struct* get() const { return ptr_.get(); }
void Swap(StructPtr* other) { std::swap(ptr_, other->ptr_); }
@@ -106,20 +98,13 @@ class StructPtr {
explicit operator bool() const { return !is_null(); }
private:
- friend class internal::StructHelper<Struct>;
friend class internal::StructPtrWTFHelper<Struct>;
-
- void Initialize() {
- DCHECK(!ptr_);
- ptr_ = new Struct();
- }
-
void Take(StructPtr* other) {
reset();
Swap(other);
}
- Struct* ptr_;
+ std::unique_ptr<Struct> ptr_;
DISALLOW_COPY_AND_ASSIGN(StructPtr);
};
@@ -155,6 +140,10 @@ class InlinedStructPtr {
return *this;
}
+ template <typename... Args>
+ InlinedStructPtr(base::in_place_t, Args&&... args)
+ : value_(std::forward<Args>(args)...), state_(VALID) {}
+
template <typename U>
U To() const {
return TypeConverter<U, InlinedStructPtr>::Convert(*this);
@@ -204,11 +193,7 @@ class InlinedStructPtr {
explicit operator bool() const { return !is_null(); }
private:
- friend class internal::StructHelper<Struct>;
friend class internal::InlinedStructPtrWTFHelper<Struct>;
-
- void Initialize() { state_ = VALID; }
-
void Take(InlinedStructPtr* other) {
reset();
Swap(other);
« no previous file with comments | « mojo/public/cpp/bindings/lib/native_struct.cc ('k') | mojo/public/cpp/bindings/tests/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698