- add sources.
[platform/framework/web/crosswalk.git] / src / base / mac / scoped_ioobject.h
1 // Copyright (c) 2012 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.
4
5 #ifndef BASE_MAC_SCOPED_IOOBJECT_H_
6 #define BASE_MAC_SCOPED_IOOBJECT_H_
7
8 #include <IOKit/IOKitLib.h>
9
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12
13 namespace base {
14 namespace mac {
15
16 // Just like ScopedCFTypeRef but for io_object_t and subclasses.
17 template<typename IOT>
18 class ScopedIOObject {
19  public:
20   typedef IOT element_type;
21
22   explicit ScopedIOObject(IOT object = IO_OBJECT_NULL)
23       : object_(object) {
24   }
25
26   ~ScopedIOObject() {
27     if (object_)
28       IOObjectRelease(object_);
29   }
30
31   void reset(IOT object = IO_OBJECT_NULL) {
32     if (object_)
33       IOObjectRelease(object_);
34     object_ = object;
35   }
36
37   bool operator==(IOT that) const {
38     return object_ == that;
39   }
40
41   bool operator!=(IOT that) const {
42     return object_ != that;
43   }
44
45   operator IOT() const {
46     return object_;
47   }
48
49   IOT get() const {
50     return object_;
51   }
52
53   void swap(ScopedIOObject& that) {
54     IOT temp = that.object_;
55     that.object_ = object_;
56     object_ = temp;
57   }
58
59   IOT release() WARN_UNUSED_RESULT {
60     IOT temp = object_;
61     object_ = IO_OBJECT_NULL;
62     return temp;
63   }
64
65  private:
66   IOT object_;
67
68   DISALLOW_COPY_AND_ASSIGN(ScopedIOObject);
69 };
70
71 }  // namespace mac
72 }  // namespace base
73
74 #endif  // BASE_MAC_SCOPED_IOOBJECT_H_