⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nscomptr.h

📁 linux下的一款播放器
💻 H
📖 第 1 页 / 共 3 页
字号:
      operator nsDerivedSafe<nsISupports>*() const          /*            ...makes an |nsCOMPtr| act like its underlying raw pointer type (except against |AddRef()|, |Release()|,              and |delete|) whenever it is used in a context where a raw pointer is expected.  It is this operator              that makes an |nsCOMPtr| substitutable for a raw pointer.            Prefer the implicit use of this operator to calling |get()|, except where necessary to resolve ambiguity.          */        {          return get();        }      nsDerivedSafe<nsISupports>*      operator->() const        {          NS_PRECONDITION(mRawPtr != 0, "You can't dereference a NULL nsCOMPtr with operator->().");          return get();        }#ifdef CANT_RESOLVE_CPP_CONST_AMBIGUITY  // broken version for IRIX      nsCOMPtr<nsISupports>*      get_address() const          // This is not intended to be used by clients.  See |address_of|          // below.        {          return NS_CONST_CAST(nsCOMPtr<nsISupports>*, this);        }#else // CANT_RESOLVE_CPP_CONST_AMBIGUITY      nsCOMPtr<nsISupports>*      get_address()          // This is not intended to be used by clients.  See |address_of|          // below.        {          return this;        }      const nsCOMPtr<nsISupports>*      get_address() const          // This is not intended to be used by clients.  See |address_of|          // below.        {          return this;        }#endif // CANT_RESOLVE_CPP_CONST_AMBIGUITY    public:      nsDerivedSafe<nsISupports>&      operator*() const        {          NS_PRECONDITION(mRawPtr != 0, "You can't dereference a NULL nsCOMPtr with operator*().");          return *get();        }#if 0    private:      friend class nsGetterAddRefs<nsISupports>;#endif      nsISupports**      StartAssignment()        {#ifndef NSCAP_FEATURE_INLINE_STARTASSIGNMENT          return NS_REINTERPRET_CAST(nsISupports**, begin_assignment());#else          assign_assuming_AddRef(0);          return NS_REINTERPRET_CAST(nsISupports**, &mRawPtr);#endif        }  };#ifdef NSCAP_FEATURE_DEBUG_PTR_TYPEStemplate <class T>voidnsCOMPtr<T>::assign_with_AddRef( nsISupports* rawPtr )  {    if ( rawPtr )      NSCAP_ADDREF(this, rawPtr);    assign_assuming_AddRef(NS_REINTERPRET_CAST(T*, rawPtr));  }template <class T>voidnsCOMPtr<T>::assign_from_helper( const nsCOMPtr_helper& helper, const nsIID& aIID )  {    T* newRawPtr;    if ( NS_FAILED( helper(aIID, NS_REINTERPRET_CAST(void**, &newRawPtr)) ) )      newRawPtr = 0;    assign_assuming_AddRef(newRawPtr);  }template <class T>void**nsCOMPtr<T>::begin_assignment()  {    assign_assuming_AddRef(0);    return NS_REINTERPRET_CAST(void**, &mRawPtr);  }#endif#ifdef CANT_RESOLVE_CPP_CONST_AMBIGUITY// This is the broken version for IRIX, which can't handle the version below.template <class T>inlinensCOMPtr<T>*address_of( const nsCOMPtr<T>& aPtr )  {    return aPtr.get_address();  }#else // CANT_RESOLVE_CPP_CONST_AMBIGUITYtemplate <class T>inlinensCOMPtr<T>*address_of( nsCOMPtr<T>& aPtr )  {    return aPtr.get_address();  }template <class T>inlineconst nsCOMPtr<T>*address_of( const nsCOMPtr<T>& aPtr )  {    return aPtr.get_address();  }#endif // CANT_RESOLVE_CPP_CONST_AMBIGUITYtemplate <class T>class nsGetterAddRefs    /*      ...      This class is designed to be used for anonymous temporary objects in the      argument list of calls that return COM interface pointers, e.g.,        nsCOMPtr<IFoo> fooP;        ...->QueryInterface(iid, getter_AddRefs(fooP))      DO NOT USE THIS TYPE DIRECTLY IN YOUR CODE.  Use |getter_AddRefs()| instead.      When initialized with a |nsCOMPtr|, as in the example above, it returns      a |void**|, a |T**|, or an |nsISupports**| as needed, that the outer call (|QueryInterface| in this      case) can fill in.      This type should be a nested class inside |nsCOMPtr<T>|.    */  {    public:      explicit      nsGetterAddRefs( nsCOMPtr<T>& aSmartPtr )          : mTargetSmartPtr(aSmartPtr)        {          // nothing else to do        }#if defined(NSCAP_FEATURE_TEST_DONTQUERY_CASES) || defined(NSCAP_LOG_EXTERNAL_ASSIGNMENT)     ~nsGetterAddRefs()        {#ifdef NSCAP_LOG_EXTERNAL_ASSIGNMENT          NSCAP_LOG_ASSIGNMENT(NS_REINTERPRET_CAST(void *, address_of(mTargetSmartPtr)), mTargetSmartPtr.get());#endif#ifdef NSCAP_FEATURE_TEST_DONTQUERY_CASES          mTargetSmartPtr.Assert_NoQueryNeeded();#endif        }#endif      operator void**()        {          return NS_REINTERPRET_CAST(void**, mTargetSmartPtr.StartAssignment());        }      operator nsISupports**()        {          return NS_REINTERPRET_CAST(nsISupports**, mTargetSmartPtr.StartAssignment());        }      operator T**()        {          return mTargetSmartPtr.StartAssignment();        }      T*&      operator*()        {          return *(mTargetSmartPtr.StartAssignment());        }    private:      nsCOMPtr<T>& mTargetSmartPtr;  };NS_SPECIALIZE_TEMPLATEclass nsGetterAddRefs<nsISupports>  {    public:      explicit      nsGetterAddRefs( nsCOMPtr<nsISupports>& aSmartPtr )          : mTargetSmartPtr(aSmartPtr)        {          // nothing else to do        }#ifdef NSCAP_LOG_EXTERNAL_ASSIGNMENT     ~nsGetterAddRefs()        {          NSCAP_LOG_ASSIGNMENT(NS_REINTERPRET_CAST(void *, address_of(mTargetSmartPtr)), mTargetSmartPtr.get());        }#endif      operator void**()        {          return NS_REINTERPRET_CAST(void**, mTargetSmartPtr.StartAssignment());        }      operator nsISupports**()        {          return mTargetSmartPtr.StartAssignment();        }      nsISupports*&      operator*()        {          return *(mTargetSmartPtr.StartAssignment());        }    private:      nsCOMPtr<nsISupports>& mTargetSmartPtr;  };template <class T>inlinensGetterAddRefs<T>getter_AddRefs( nsCOMPtr<T>& aSmartPtr )    /*      Used around a |nsCOMPtr| when       ...makes the class |nsGetterAddRefs<T>| invisible.    */  {    return nsGetterAddRefs<T>(aSmartPtr);  }  // Comparing two |nsCOMPtr|stemplate <class T, class U>inlineNSCAP_BOOLoperator==( const nsCOMPtr<T>& lhs, const nsCOMPtr<U>& rhs )  {    return NS_STATIC_CAST(const void*, lhs.get()) == NS_STATIC_CAST(const void*, rhs.get());  }template <class T, class U>inlineNSCAP_BOOLoperator!=( const nsCOMPtr<T>& lhs, const nsCOMPtr<U>& rhs )  {    return NS_STATIC_CAST(const void*, lhs.get()) != NS_STATIC_CAST(const void*, rhs.get());  }  // Comparing an |nsCOMPtr| to a raw pointertemplate <class T, class U>inlineNSCAP_BOOLoperator==( const nsCOMPtr<T>& lhs, const U* rhs )  {    return NS_STATIC_CAST(const void*, lhs.get()) == NS_STATIC_CAST(const void*, rhs);  }template <class T, class U>inlineNSCAP_BOOLoperator==( const U* lhs, const nsCOMPtr<T>& rhs )  {    return NS_STATIC_CAST(const void*, lhs) == NS_STATIC_CAST(const void*, rhs.get());  }template <class T, class U>inlineNSCAP_BOOLoperator!=( const nsCOMPtr<T>& lhs, const U* rhs )  {    return NS_STATIC_CAST(const void*, lhs.get()) != NS_STATIC_CAST(const void*, rhs);  }template <class T, class U>inlineNSCAP_BOOLoperator!=( const U* lhs, const nsCOMPtr<T>& rhs )  {    return NS_STATIC_CAST(const void*, lhs) != NS_STATIC_CAST(const void*, rhs.get());  }  // To avoid ambiguities caused by the presence of builtin |operator==|s  // creating a situation where one of the |operator==| defined above  // has a better conversion for one argument and the builtin has a  // better conversion for the other argument, define additional  // |operator==| without the |const| on the raw pointer.  // See bug 65664 for details.// This is defined by an autoconf test, but VC++ also has a bug that// prevents us from using these.  (It also, fortunately, has the bug// that we don't need them either.)#ifdef _MSC_VER#define NSCAP_DONT_PROVIDE_NONCONST_OPEQ#endif#ifndef NSCAP_DONT_PROVIDE_NONCONST_OPEQtemplate <class T, class U>inlineNSCAP_BOOLoperator==( const nsCOMPtr<T>& lhs, U* rhs )  {    return NS_STATIC_CAST(const void*, lhs.get()) == NS_STATIC_CAST(void*, rhs);  }template <class T, class U>inlineNSCAP_BOOLoperator==( U* lhs, const nsCOMPtr<T>& rhs )  {    return NS_STATIC_CAST(void*, lhs) == NS_STATIC_CAST(const void*, rhs.get());  }template <class T, class U>inlineNSCAP_BOOLoperator!=( const nsCOMPtr<T>& lhs, U* rhs )  {    return NS_STATIC_CAST(const void*, lhs.get()) != NS_STATIC_CAST(void*, rhs);  }template <class T, class U>inlineNSCAP_BOOLoperator!=( U* lhs, const nsCOMPtr<T>& rhs )  {    return NS_STATIC_CAST(void*, lhs) != NS_STATIC_CAST(const void*, rhs.get());  }#endif  // Comparing an |nsCOMPtr| to |0|class NSCAP_Zero;template <class T>inlineNSCAP_BOOLoperator==( const nsCOMPtr<T>& lhs, NSCAP_Zero* rhs )    // specifically to allow |smartPtr == 0|  {    return NS_STATIC_CAST(const void*, lhs.get()) == NS_REINTERPRET_CAST(const void*, rhs);  }template <class T>inlineNSCAP_BOOLoperator==( NSCAP_Zero* lhs, const nsCOMPtr<T>& rhs )    // specifically to allow |0 == smartPtr|  {    return NS_REINTERPRET_CAST(const void*, lhs) == NS_STATIC_CAST(const void*, rhs.get());  }template <class T>inlineNSCAP_BOOLoperator!=( const nsCOMPtr<T>& lhs, NSCAP_Zero* rhs )    // specifically to allow |smartPtr != 0|  {    return NS_STATIC_CAST(const void*, lhs.get()) != NS_REINTERPRET_CAST(const void*, rhs);  }template <class T>inlineNSCAP_BOOLoperator!=( NSCAP_Zero* lhs, const nsCOMPtr<T>& rhs )    // specifically to allow |0 != smartPtr|  {    return NS_REINTERPRET_CAST(const void*, lhs) != NS_STATIC_CAST(const void*, rhs.get());  }#ifdef HAVE_CPP_TROUBLE_COMPARING_TO_ZERO  // We need to explicitly define comparison operators for `int'  // because the compiler is lame.template <class T>inlineNSCAP_BOOLoperator==( const nsCOMPtr<T>& lhs, int rhs )    // specifically to allow |smartPtr == 0|  {    return NS_STATIC_CAST(const void*, lhs.get()) == NS_REINTERPRET_CAST(const void*, rhs);  }template <class T>inlineNSCAP_BOOLoperator==( int lhs, const nsCOMPtr<T>& rhs )    // specifically to allow |0 == smartPtr|  {    return NS_REINTERPRET_CAST(const void*, lhs) == NS_STATIC_CAST(const void*, rhs.get());  }#endif // !defined(HAVE_CPP_TROUBLE_COMPARING_TO_ZERO)  // Comparing any two [XP]COM objects for identityinlineNSCAP_BOOLSameCOMIdentity( nsISupports* lhs, nsISupports* rhs )  {    return nsCOMPtr<nsISupports>( do_QueryInterface(lhs) ) == nsCOMPtr<nsISupports>( do_QueryInterface(rhs) );  }template <class SourceType, class DestinationType>inlinensresultCallQueryInterface( nsCOMPtr<SourceType>& aSourcePtr, DestinationType** aDestPtr )  {    return CallQueryInterface(aSourcePtr.get(), aDestPtr);  }#endif // !defined(nsCOMPtr_h___)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -