b67cafe716
This decomposes the crdtp library into multiple files. Since it wasn't previously rolled it's a bit more than just that. Upstream review: https://chromium-review.googlesource.com/c/deps/inspector_protocol/+/1907115 New Revision: d020a9e614d4a5116a7c71f288c0340e282e1a6e Change-Id: I5c588469654bec3e933804ac706fa967c6fe57bc Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1907973 Auto-Submit: Johannes Henkel <johannes@chromium.org> Reviewed-by: Yang Guo <yangguo@chromium.org> Commit-Queue: Yang Guo <yangguo@chromium.org> Cr-Commit-Position: refs/heads/master@{#64902}
81 lines
2.2 KiB
C++
81 lines
2.2 KiB
C++
// Copyright 2019 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 V8_CRDTP_GLUE_H_
|
|
#define V8_CRDTP_GLUE_H_
|
|
|
|
#include <cassert>
|
|
#include <memory>
|
|
|
|
namespace v8_crdtp {
|
|
namespace glue {
|
|
// =============================================================================
|
|
// glue::detail::PtrMaybe, glue::detail::ValueMaybe, templates for optional
|
|
// pointers / values which are used in ../lib/Forward_h.template.
|
|
// =============================================================================
|
|
namespace detail {
|
|
template <typename T>
|
|
class PtrMaybe {
|
|
public:
|
|
PtrMaybe() = default;
|
|
PtrMaybe(std::unique_ptr<T> value) : value_(std::move(value)) {}
|
|
PtrMaybe(PtrMaybe&& other) noexcept : value_(std::move(other.value_)) {}
|
|
void operator=(std::unique_ptr<T> value) { value_ = std::move(value); }
|
|
T* fromJust() const {
|
|
assert(value_);
|
|
return value_.get();
|
|
}
|
|
T* fromMaybe(T* default_value) const {
|
|
return value_ ? value_.get() : default_value;
|
|
}
|
|
bool isJust() const { return value_ != nullptr; }
|
|
std::unique_ptr<T> takeJust() {
|
|
assert(value_);
|
|
return std::move(value_);
|
|
}
|
|
|
|
private:
|
|
std::unique_ptr<T> value_;
|
|
};
|
|
|
|
template <typename T>
|
|
class ValueMaybe {
|
|
public:
|
|
ValueMaybe() : is_just_(false), value_() {}
|
|
ValueMaybe(T value) : is_just_(true), value_(std::move(value)) {}
|
|
ValueMaybe(ValueMaybe&& other) noexcept
|
|
: is_just_(other.is_just_), value_(std::move(other.value_)) {}
|
|
void operator=(T value) {
|
|
value_ = value;
|
|
is_just_ = true;
|
|
}
|
|
const T& fromJust() const {
|
|
assert(is_just_);
|
|
return value_;
|
|
}
|
|
const T& fromMaybe(const T& default_value) const {
|
|
return is_just_ ? value_ : default_value;
|
|
}
|
|
bool isJust() const { return is_just_; }
|
|
T takeJust() {
|
|
assert(is_just_);
|
|
is_just_ = false;
|
|
return std::move(value_);
|
|
}
|
|
|
|
private:
|
|
bool is_just_;
|
|
T value_;
|
|
};
|
|
} // namespace detail
|
|
} // namespace glue
|
|
} // namespace v8_crdtp
|
|
|
|
#define PROTOCOL_DISALLOW_COPY(ClassName) \
|
|
private: \
|
|
ClassName(const ClassName&) = delete; \
|
|
ClassName& operator=(const ClassName&) = delete
|
|
|
|
#endif // V8_CRDTP_GLUE_H_
|