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_LAUNCH_DATA_H_ 6 #define BASE_MAC_SCOPED_LAUNCH_DATA_H_ 7 8 #include <launch.h> 9 10 #include <algorithm> 11 12 #include "base/basictypes.h" 13 #include "base/compiler_specific.h" 14 15 namespace base { 16 namespace mac { 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 72 } // namespace mac 73 } // namespace base 74 75 #endif // BASE_MAC_SCOPED_LAUNCH_DATA_H_ 76