Home | History | Annotate | Download | only in mac
      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