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 15namespace base { 16namespace mac { 17 18// Just like scoped_ptr<> but for launch_data_t. 19class 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