| // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef BASE_MAC_SCOPED_AEDESC_H_ | 
 | #define BASE_MAC_SCOPED_AEDESC_H_ | 
 |  | 
 | #import <CoreServices/CoreServices.h> | 
 |  | 
 | #include "base/macros.h" | 
 |  | 
 | namespace base { | 
 | namespace mac { | 
 |  | 
 | // The ScopedAEDesc is used to scope AppleEvent descriptors.  On creation, | 
 | // it will store a NULL descriptor.  On destruction, it will dispose of the | 
 | // descriptor. | 
 | // | 
 | // This class is parameterized for additional type safety checks.  You can use | 
 | // the generic AEDesc type by not providing a template parameter: | 
 | //  ScopedAEDesc<> desc; | 
 | template <typename AEDescType = AEDesc> | 
 | class ScopedAEDesc { | 
 |  public: | 
 |   ScopedAEDesc() { | 
 |     AECreateDesc(typeNull, NULL, 0, &desc_); | 
 |   } | 
 |  | 
 |   ~ScopedAEDesc() { | 
 |     AEDisposeDesc(&desc_); | 
 |   } | 
 |  | 
 |   // Used for in parameters. | 
 |   operator const AEDescType*() { | 
 |     return &desc_; | 
 |   } | 
 |  | 
 |   // Used for out parameters. | 
 |   AEDescType* OutPointer() { | 
 |     return &desc_; | 
 |   } | 
 |  | 
 |  private: | 
 |   AEDescType desc_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(ScopedAEDesc); | 
 | }; | 
 |  | 
 | }  // namespace mac | 
 | }  // namespace base | 
 |  | 
 | #endif  // BASE_MAC_SCOPED_AEDESC_H_ |