• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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_AEDESC_H_
6 #define BASE_MAC_SCOPED_AEDESC_H_
7 #pragma once
8 
9 #import <CoreServices/CoreServices.h>
10 
11 #include "base/basictypes.h"
12 
13 namespace base {
14 namespace mac {
15 
16 // The ScopedAEDesc is used to scope AppleEvent descriptors.  On creation,
17 // it will store a NULL descriptor.  On destruction, it will dispose of the
18 // descriptor.
19 //
20 // This class is parameterized for additional type safety checks.  You can use
21 // the generic AEDesc type by not providing a template parameter:
22 //  ScopedAEDesc<> desc;
23 template <typename AEDescType = AEDesc>
24 class ScopedAEDesc {
25  public:
ScopedAEDesc()26   ScopedAEDesc() {
27     AECreateDesc(typeNull, NULL, 0, &desc_);
28   }
29 
~ScopedAEDesc()30   ~ScopedAEDesc() {
31     AEDisposeDesc(&desc_);
32   }
33 
34   // Used for in parameters.
35   operator const AEDescType*() {
36     return &desc_;
37   }
38 
39   // Used for out parameters.
OutPointer()40   AEDescType* OutPointer() {
41     return &desc_;
42   }
43 
44  private:
45   AEDescType desc_;
46 
47   DISALLOW_COPY_AND_ASSIGN(ScopedAEDesc);
48 };
49 
50 }  // namespace mac
51 }  // namespace base
52 
53 #endif  // BASE_MAC_SCOPED_AEDESC_H_
54