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.
5 #ifndef CRYPTO_SCOPED_NSS_TYPES_H_
6 #define CRYPTO_SCOPED_NSS_TYPES_H_
13 #include "base/memory/scoped_ptr.h"
17 template <typename Type
, void (*Destroyer
)(Type
*)>
19 void operator()(Type
* ptr
) const {
24 template <typename Type
, void (*Destroyer
)(Type
*, PRBool
), PRBool freeit
>
25 struct NSSDestroyer1
{
26 void operator()(Type
* ptr
) const {
27 Destroyer(ptr
, freeit
);
31 // Define some convenient scopers around NSS pointers.
32 typedef scoped_ptr
<PK11Context
,
33 NSSDestroyer1
<PK11Context
, PK11_DestroyContext
, PR_TRUE
> >
35 typedef scoped_ptr
<PK11SlotInfo
, NSSDestroyer
<PK11SlotInfo
, PK11_FreeSlot
> >
37 typedef scoped_ptr
<PK11SlotList
, NSSDestroyer
<PK11SlotList
, PK11_FreeSlotList
> >
39 typedef scoped_ptr
<PK11SymKey
, NSSDestroyer
<PK11SymKey
, PK11_FreeSymKey
> >
41 typedef scoped_ptr
<SECKEYPublicKey
,
42 NSSDestroyer
<SECKEYPublicKey
, SECKEY_DestroyPublicKey
> >
43 ScopedSECKEYPublicKey
;
44 typedef scoped_ptr
<SECKEYPrivateKey
,
45 NSSDestroyer
<SECKEYPrivateKey
, SECKEY_DestroyPrivateKey
> >
46 ScopedSECKEYPrivateKey
;
47 typedef scoped_ptr
<SECAlgorithmID
,
48 NSSDestroyer1
<SECAlgorithmID
, SECOID_DestroyAlgorithmID
,
51 typedef scoped_ptr
<SECItem
, NSSDestroyer1
<SECItem
, SECITEM_FreeItem
, PR_TRUE
> >
53 typedef scoped_ptr
<PLArenaPool
,
54 NSSDestroyer1
<PLArenaPool
, PORT_FreeArena
, PR_FALSE
> >
59 #endif // CRYPTO_SCOPED_NSS_TYPES_H_