69 #ifndef __InterfacePtr__ 70 #define __InterfacePtr__ 72 #include "IPMUnknown.h" 75 #include "IDataBase.h" 125 template <
class IFace>
150 #ifdef ID_ENABLE_DEBUGGING
151 , fDebugLastIIDQueried(kInvalidInterfaceID), fDebugLastBossQueried(kInvalidClass)
155 static_cast<const IPMUnknown*>(p);
165 : fFace(QueryInterface_(p, iid))
167 #ifdef ID_ENABLE_DEBUGGING 169 SaveOffDebugInfo(p,iid);
179 : fFace(QueryInterface_(p, IFace::kDefaultIID))
181 #ifdef ID_ENABLE_DEBUGGING 183 SaveOffDebugInfo(p,IFace::kDefaultIID);
191 #ifdef ID_ENABLE_DEBUGGING
192 , fDebugLastIIDQueried(kInvalidInterfaceID), fDebugLastBossQueried(kInvalidClass)
201 template <
class OtherType>
216 template <
class OtherType>
218 :fFace(AddRef_(p.
get()))
219 #ifdef ID_ENABLE_DEBUGGING
220 , fDebugLastIIDQueried(p.fDebugLastIIDQueried), fDebugLastBossQueried(p.fDebugLastBossQueried)
231 :fFace(AddRef_(p.
get()))
232 #ifdef ID_ENABLE_DEBUGGING
233 , fDebugLastIIDQueried(p.fDebugLastIIDQueried),fDebugLastBossQueried(p.fDebugLastBossQueried)
239 #ifdef ID_ENABLE_DEBUGGING 240 , fDebugLastIIDQueried(p.fDebugLastIIDQueried), fDebugLastBossQueried(p.fDebugLastBossQueried)
250 template <
class OtherType>
255 #ifdef ID_ENABLE_DEBUGGING 256 fDebugLastIIDQueried = p.fDebugLastIIDQueried;
257 fDebugLastBossQueried = p.fDebugLastBossQueried;
272 #ifdef ID_ENABLE_DEBUGGING 273 fDebugLastIIDQueried = p.fDebugLastIIDQueried;
274 fDebugLastBossQueried = p.fDebugLastBossQueried;
297 : fFace(Instantiate_(db, uid, iid))
299 #ifdef ID_ENABLE_DEBUGGING 302 fDebugLastIIDQueried = iid;
304 fDebugLastBossQueried = db->
GetClass(uid);
306 fDebugLastBossQueried = kInvalidClass;
317 : fFace(Instantiate_(db, uid, IFace::kDefaultIID))
319 #ifdef ID_ENABLE_DEBUGGING 322 fDebugLastIIDQueried = IFace::kDefaultIID;
324 fDebugLastBossQueried = db->
GetClass(uid);
326 fDebugLastBossQueried = kInvalidClass;
336 : fFace(Instantiate_(ref, iid))
338 #ifdef ID_ENABLE_DEBUGGING 341 fDebugLastIIDQueried = iid;
345 fDebugLastBossQueried = kInvalidClass;
356 : fFace(Instantiate_(ref, IFace::kDefaultIID))
358 #ifdef ID_ENABLE_DEBUGGING 361 fDebugLastIIDQueried = IFace::kDefaultIID;
365 fDebugLastBossQueried = kInvalidClass;
381 operator IFace*()
const {
return fFace; }
392 #ifdef ID_ENABLE_DEBUGGING 394 AssertAboutUsingNilPtr();
411 IFace* result = fFace;
413 #ifdef ID_ENABLE_DEBUGGING 414 fDebugLastIIDQueried = kInvalidInterfaceID;
415 fDebugLastBossQueried = kInvalidClass;
423 IFace*
get()
const {
return fFace; }
431 IFace* oldFace = fFace;
433 #ifdef ID_ENABLE_DEBUGGING 434 fDebugLastIIDQueried = kInvalidInterfaceID;
435 fDebugLastBossQueried = kInvalidClass;
443 swap(fFace, other.fFace);
444 #ifdef ID_ENABLE_DEBUGGING 445 swap(fDebugLastBossQueried, other.fDebugLastBossQueried);
446 swap(fDebugLastIIDQueried, other.fDebugLastIIDQueried);
453 static IFace* AddRef_(
const T* p) {
if(p) p->AddRef();
return static_cast<IFace*
>(
const_cast<T*
>(p));}
455 static void Release_(IFace* p)
456 {
if(p) p->Release(); }
462 {
return db ?
static_cast<IFace*
>(db->
Instantiate(uid, iid)) : nil; }
464 static IFace* Instantiate_(
const UIDRef& ref,
PMIID iid)
467 #ifdef ID_ENABLE_DEBUGGING 468 void AssertAboutUsingNilPtr()
const;
472 #ifdef ID_ENABLE_DEBUGGING 475 PMIID fDebugLastIIDQueried;
487 #ifdef ID_ENABLE_DEBUGGING 488 #include "IControllingUnknown.h" 492 fDebugLastIIDQueried = iid;
493 fDebugLastBossQueried = kInvalidClass;
499 fDebugLastBossQueried = boss->
GetClass();
506 #include "DebugClassUtils.h" 509 DebugClassUtilsBuffer idBuf1,idBuf2;
510 ASSERT_FAIL(FORMAT_ARGS(
"About to use nil interface ptr! Queried IID was %s, on Boss %s",DebugClassUtils::GetIDName(&idBuf1,fDebugLastIIDQueried),DebugClassUtils::GetIDName(&idBuf2,fDebugLastBossQueried)));
517 void DestroyInterfacePtr();
523 b DestroyInterfacePtr
537 #endif // __InterfacePtr__