41 #if !defined(__CATokenMap_h__)
42 #define __CATokenMap_h__
49 #if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
50 #include <CoreAudio/CoreAudioTypes.h>
52 #include <CoreAudioTypes.h>
72 typedef std::map<UInt32, T*> TokenMap;
76 CATokenMap() : mTokenMap(), mNextToken(256), mTokenMapMutex(
"CATokenMap Mutex") {}
83 return mTokenMapMutex.Lock();
88 mTokenMapMutex.Unlock();
91 UInt32 GetToken(T* inObject)
const
93 CAMutex::Locker theLocker(const_cast<CAMutex&>(mTokenMapMutex));
95 typename TokenMap::const_iterator i = mTokenMap.begin();
96 while((theAnswer == 0) && (i != mTokenMap.end()))
98 if(i->second == inObject)
100 theAnswer = i->first;
107 T* GetObject(UInt32 inToken)
const
109 CAMutex::Locker theLocker(const_cast<CAMutex&>(mTokenMapMutex));
110 typename TokenMap::const_iterator i = mTokenMap.find(inToken);
111 return i != mTokenMap.end() ? i->second : NULL;
114 T* GetObject(
const void* inToken)
const
117 return GetObject((UInt32)((UInt64)inToken));
119 return GetObject((UInt32)inToken);
123 UInt32 GetNumberObjects()
const
125 CAMutex::Locker theLocker(const_cast<CAMutex&>(mTokenMapMutex));
126 return mTokenMap.size();
129 T* GetObjectByIndex(UInt32 inIndex)
const
132 CAMutex::Locker theLocker(const_cast<CAMutex&>(mTokenMapMutex));
133 if(inIndex < mTokenMap.size())
135 typename TokenMap::const_iterator i = mTokenMap.begin();
136 std::advance(i, inIndex);
137 theAnswer = (i != mTokenMap.end()) ? i->second : NULL;
142 void AddMapping(UInt32 inToken, T* inObject)
144 CAMutex::Locker theLocker(mTokenMapMutex);
145 typename TokenMap::iterator i = mTokenMap.find(inToken);
146 if(i != mTokenMap.end())
148 i->second = inObject;
152 mTokenMap.insert(
typename TokenMap::value_type(inToken, inObject));
156 void RemoveMapping(UInt32 inToken, T* )
158 CAMutex::Locker theLocker(mTokenMapMutex);
159 typename TokenMap::iterator i = mTokenMap.find(inToken);
160 if(i != mTokenMap.end())
166 UInt32 GetNextToken()
171 UInt32 MapObject(T* inObject)
173 CAMutex::Locker theLocker(mTokenMapMutex);
174 UInt32 theToken = GetNextToken();
175 mTokenMap.insert(
typename TokenMap::value_type(theToken, inObject));
179 void UnmapObject(T* inObject)
181 CAMutex::Locker theLocker(mTokenMapMutex);
183 typename TokenMap::iterator i = mTokenMap.begin();
184 while(!isDone && (i != mTokenMap.end()))
186 if(i->second == inObject)
202 CAMutex mTokenMapMutex;