]>
git.saurik.com Git - apple/security.git/blob - AppleX509CL/LockedMap.h
8388c40d29040b294f293ede4c30c8e3a8321710
2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
20 * LockedMap.h - STL-style map with attached Mutex
22 * Created 9/1/2000 by Doug Mitchell.
23 * Copyright (c) 2000 by Apple Computer.
26 #ifndef _LOCKED_MAP_H_
27 #define _LOCKED_MAP_H_
30 #include <Security/threading.h>
32 template <class KeyType
, class ValueType
>
36 typedef std::map
<KeyType
, ValueType
*> MapType
;
40 /* low-level lookup, cacheMapLock held on entry and exit */
42 *lookupEntryLocked(KeyType key
)
44 // don't create new entry if desired entry isn't there
45 typename
MapType::iterator it
= mMap
.find(key
);
46 if(it
== mMap
.end()) {
53 /* high level maintenance */
55 addEntry(ValueType
&value
, KeyType key
)
57 StLock
<Mutex
> _(mMapLock
);
62 *lookupEntry(KeyType key
)
64 StLock
<Mutex
> _(mMapLock
);
65 return lookupEntryLocked(key
);
69 removeEntry(KeyType key
)
71 StLock
<Mutex
> _(mMapLock
);
73 ValueType
*value
= lookupEntryLocked(key
);
82 StLock
<Mutex
> _(mMapLock
);
83 typename
MapType::iterator it
= mMap
.begin();
84 if(it
== mMap
.end()) {
87 ValueType
*rtn
= it
->second
;
88 mMap
.erase(it
->first
);
93 #endif /* _LOCKED_MAP_H_ */