mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
50 lines
1.3 KiB
C
50 lines
1.3 KiB
C
|
// Copyright 2018 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 BASE_WIN_REFERENCE_H_
|
||
|
#define BASE_WIN_REFERENCE_H_
|
||
|
|
||
|
#include <windows.foundation.collections.h>
|
||
|
#include <wrl/implements.h>
|
||
|
|
||
|
#include <type_traits>
|
||
|
#include <utility>
|
||
|
|
||
|
#include "base/macros.h"
|
||
|
|
||
|
namespace base {
|
||
|
namespace win {
|
||
|
|
||
|
// Implementation of the UWP's IReference interface.
|
||
|
template <typename T>
|
||
|
class Reference
|
||
|
: public Microsoft::WRL::RuntimeClass<
|
||
|
Microsoft::WRL::RuntimeClassFlags<
|
||
|
Microsoft::WRL::WinRt | Microsoft::WRL::InhibitRoOriginateError>,
|
||
|
ABI::Windows::Foundation::IReference<T>> {
|
||
|
public:
|
||
|
using AbiT = typename ABI::Windows::Foundation::Internal::GetAbiType<
|
||
|
typename ABI::Windows::Foundation::IReference<T>::T_complex>::type;
|
||
|
|
||
|
explicit Reference(const AbiT& value) : value_(value) {}
|
||
|
explicit Reference(AbiT&& value) : value_(std::move(value)) {}
|
||
|
|
||
|
// ABI::Windows::Foundation::IReference:
|
||
|
IFACEMETHODIMP get_Value(AbiT* value) override {
|
||
|
*value = value_;
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
~Reference() = default;
|
||
|
AbiT value_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(Reference);
|
||
|
};
|
||
|
|
||
|
} // namespace win
|
||
|
} // namespace base
|
||
|
|
||
|
#endif // BASE_WIN_REFERENCE_H_
|