1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MOJO_EMBEDDER_SCOPED_PLATFORM_HANDLE_H_
6 #define MOJO_EMBEDDER_SCOPED_PLATFORM_HANDLE_H_
8 #include "base/compiler_specific.h"
10 #include "mojo/embedder/platform_handle.h"
11 #include "mojo/system/system_impl_export.h"
16 class MOJO_SYSTEM_IMPL_EXPORT ScopedPlatformHandle
{
17 MOVE_ONLY_TYPE_FOR_CPP_03(ScopedPlatformHandle
, RValue
)
20 ScopedPlatformHandle() {}
21 explicit ScopedPlatformHandle(PlatformHandle handle
) : handle_(handle
) {}
22 ~ScopedPlatformHandle() { handle_
.CloseIfNecessary(); }
24 // Move-only constructor and operator=.
25 ScopedPlatformHandle(RValue other
) : handle_(other
.object
->release()) {}
26 ScopedPlatformHandle
& operator=(RValue other
) {
27 handle_
= other
.object
->release();
31 const PlatformHandle
& get() const { return handle_
; }
33 void swap(ScopedPlatformHandle
& other
) {
34 PlatformHandle temp
= handle_
;
35 handle_
= other
.handle_
;
39 PlatformHandle
release() WARN_UNUSED_RESULT
{
40 PlatformHandle rv
= handle_
;
41 handle_
= PlatformHandle();
45 void reset(PlatformHandle handle
= PlatformHandle()) {
46 handle_
.CloseIfNecessary();
50 bool is_valid() const {
51 return handle_
.is_valid();
55 PlatformHandle handle_
;
58 } // namespace embedder
61 #endif // MOJO_EMBEDDER_SCOPED_PLATFORM_HANDLE_H_