• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)
object_(object)23       : object_(object) {
24   }
25 
~ScopedIOObject()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 
IOT()45   operator IOT() const {
46     return object_;
47   }
48 
get()49   IOT get() const {
50     return object_;
51   }
52 
swap(ScopedIOObject & that)53   void swap(ScopedIOObject& that) {
54     IOT temp = that.object_;
55     that.object_ = object_;
56     object_ = temp;
57   }
58 
release()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_
75