[email protected] | fd1c931 | 2012-03-29 16:57:53 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 8b5ad7f | 2011-06-30 17:58:15 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
3 | // found in the LICENSE file. | ||||
4 | |||||
[email protected] | fd1c931 | 2012-03-29 16:57:53 | [diff] [blame] | 5 | #ifndef BASE_MAC_SCOPED_LAUNCH_DATA_H_ |
6 | #define BASE_MAC_SCOPED_LAUNCH_DATA_H_ | ||||
[email protected] | 8b5ad7f | 2011-06-30 17:58:15 | [diff] [blame] | 7 | |
8 | #include <launch.h> | ||||
9 | |||||
10 | #include <algorithm> | ||||
11 | |||||
12 | #include "base/basictypes.h" | ||||
13 | #include "base/compiler_specific.h" | ||||
14 | |||||
[email protected] | fd1c931 | 2012-03-29 16:57:53 | [diff] [blame] | 15 | namespace base { |
16 | namespace mac { | ||||
[email protected] | 8b5ad7f | 2011-06-30 17:58:15 | [diff] [blame] | 17 | |
18 | // Just like scoped_ptr<> but for launch_data_t. | ||||
19 | class ScopedLaunchData { | ||||
20 | public: | ||||
21 | typedef launch_data_t element_type; | ||||
22 | |||||
23 | explicit ScopedLaunchData(launch_data_t object = NULL) | ||||
24 | : object_(object) { | ||||
25 | } | ||||
26 | |||||
27 | ~ScopedLaunchData() { | ||||
28 | if (object_) | ||||
29 | launch_data_free(object_); | ||||
30 | } | ||||
31 | |||||
32 | void reset(launch_data_t object = NULL) { | ||||
33 | if (object != object_) { | ||||
34 | if (object_) | ||||
35 | launch_data_free(object_); | ||||
36 | object_ = object; | ||||
37 | } | ||||
38 | } | ||||
39 | |||||
40 | bool operator==(launch_data_t that) const { | ||||
41 | return object_ == that; | ||||
42 | } | ||||
43 | |||||
44 | bool operator!=(launch_data_t that) const { | ||||
45 | return object_ != that; | ||||
46 | } | ||||
47 | |||||
48 | operator launch_data_t() const { | ||||
49 | return object_; | ||||
50 | } | ||||
51 | |||||
52 | launch_data_t get() const { | ||||
53 | return object_; | ||||
54 | } | ||||
55 | |||||
56 | void swap(ScopedLaunchData& that) { | ||||
57 | std::swap(object_, that.object_); | ||||
58 | } | ||||
59 | |||||
60 | launch_data_t release() WARN_UNUSED_RESULT { | ||||
61 | launch_data_t temp = object_; | ||||
62 | object_ = NULL; | ||||
63 | return temp; | ||||
64 | } | ||||
65 | |||||
66 | private: | ||||
67 | launch_data_t object_; | ||||
68 | |||||
69 | DISALLOW_COPY_AND_ASSIGN(ScopedLaunchData); | ||||
70 | }; | ||||
71 | |||||
[email protected] | fd1c931 | 2012-03-29 16:57:53 | [diff] [blame] | 72 | } // namespace mac |
73 | } // namespace base | ||||
[email protected] | 8b5ad7f | 2011-06-30 17:58:15 | [diff] [blame] | 74 | |
[email protected] | fd1c931 | 2012-03-29 16:57:53 | [diff] [blame] | 75 | #endif // BASE_MAC_SCOPED_LAUNCH_DATA_H_ |