| Index: third_party/inspector_protocol/lib/Maybe_h.template
|
| diff --git a/third_party/inspector_protocol/lib/Maybe_h.template b/third_party/inspector_protocol/lib/Maybe_h.template
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2096572ba7ba60a803638aa8aceb2a0e72d88fc6
|
| --- /dev/null
|
| +++ b/third_party/inspector_protocol/lib/Maybe_h.template
|
| @@ -0,0 +1,80 @@
|
| +// Copyright 2016 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 {{"_".join(config.protocol.namespace)}}_Maybe_h
|
| +#define {{"_".join(config.protocol.namespace)}}_Maybe_h
|
| +
|
| +//#include "Forward.h"
|
| +
|
| +{% for namespace in config.protocol.namespace %}
|
| +namespace {{namespace}} {
|
| +{% endfor %}
|
| +
|
| +template<typename T>
|
| +class Maybe {
|
| +public:
|
| + Maybe() : m_value() { }
|
| + Maybe(std::unique_ptr<T> value) : m_value(std::move(value)) { }
|
| + void operator=(std::unique_ptr<T> value) { m_value = std::move(value); }
|
| + T* fromJust() const { DCHECK(m_value); return m_value.get(); }
|
| + T* fromMaybe(T* defaultValue) const { return m_value ? m_value.get() : defaultValue; }
|
| + bool isJust() const { return !!m_value; }
|
| + std::unique_ptr<T> takeJust() { DCHECK(m_value); return m_value.release(); }
|
| +private:
|
| + std::unique_ptr<T> m_value;
|
| +};
|
| +
|
| +template<typename T>
|
| +class MaybeBase {
|
| +public:
|
| + MaybeBase() : m_isJust(false) { }
|
| + MaybeBase(T value) : m_isJust(true), m_value(value) { }
|
| + void operator=(T value) { m_value = value; m_isJust = true; }
|
| + T fromJust() const { DCHECK(m_isJust); return m_value; }
|
| + T fromMaybe(const T& defaultValue) const { return m_isJust ? m_value : defaultValue; }
|
| + bool isJust() const { return m_isJust; }
|
| + T takeJust() { DCHECK(m_isJust); return m_value; }
|
| +
|
| +protected:
|
| + bool m_isJust;
|
| + T m_value;
|
| +};
|
| +
|
| +template<>
|
| +class Maybe<bool> : public MaybeBase<bool> {
|
| +public:
|
| + Maybe() { }
|
| + Maybe(bool value) : MaybeBase(value) { }
|
| + using MaybeBase::operator=;
|
| +};
|
| +
|
| +template<>
|
| +class Maybe<int> : public MaybeBase<int> {
|
| +public:
|
| + Maybe() { }
|
| + Maybe(int value) : MaybeBase(value) { }
|
| + using MaybeBase::operator=;
|
| +};
|
| +
|
| +template<>
|
| +class Maybe<double> : public MaybeBase<double> {
|
| +public:
|
| + Maybe() { }
|
| + Maybe(double value) : MaybeBase(value) { }
|
| + using MaybeBase::operator=;
|
| +};
|
| +
|
| +template<>
|
| +class Maybe<String> : public MaybeBase<String> {
|
| +public:
|
| + Maybe() { }
|
| + Maybe(const String& value) : MaybeBase(value) { }
|
| + using MaybeBase::operator=;
|
| +};
|
| +
|
| +{% for namespace in config.protocol.namespace %}
|
| +} // namespace {{namespace}}
|
| +{% endfor %}
|
| +
|
| +#endif // !defined({{"_".join(config.protocol.namespace)}}_Maybe_h)
|
|
|