1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* ***** BEGIN LICENSE BLOCK *****
3 : * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 : *
5 : * The contents of this file are subject to the Mozilla Public License Version
6 : * 1.1 (the "License"); you may not use this file except in compliance with
7 : * the License. You may obtain a copy of the License at
8 : * http://www.mozilla.org/MPL/
9 : *
10 : * Software distributed under the License is distributed on an "AS IS" basis,
11 : * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 : * for the specific language governing rights and limitations under the
13 : * License.
14 : *
15 : * The Original Code is mozilla.org code.
16 : *
17 : * The Initial Developer of the Original Code is
18 : * Netscape Communications Corporation.
19 : * Portions created by the Initial Developer are Copyright (C) 1998
20 : * the Initial Developer. All Rights Reserved.
21 : *
22 : * Contributor(s):
23 : * Scott Collins <scc@netscape.com>
24 : *
25 : * Alternatively, the contents of this file may be used under the terms of
26 : * either of the GNU General Public License Version 2 or later (the "GPL"),
27 : * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28 : * in which case the provisions of the GPL or the LGPL are applicable instead
29 : * of those above. If you wish to allow use of your version of this file only
30 : * under the terms of either the GPL or the LGPL, and not to allow others to
31 : * use your version of this file under the terms of the MPL, indicate your
32 : * decision by deleting the provisions above and replace them with the notice
33 : * and other provisions required by the GPL or the LGPL. If you do not delete
34 : * the provisions above, a recipient may use your version of this file under
35 : * the terms of any one of the MPL, the GPL or the LGPL.
36 : *
37 : * ***** END LICENSE BLOCK ***** */
38 :
39 : #include "nsCOMPtr.h"
40 :
41 : nsresult
42 32613949 : nsQueryInterface::operator()( const nsIID& aIID, void** answer ) const
43 : {
44 : nsresult status;
45 32613949 : if ( mRawPtr )
46 : {
47 32539198 : status = mRawPtr->QueryInterface(aIID, answer);
48 : #ifdef NSCAP_FEATURE_TEST_NONNULL_QUERY_SUCCEEDS
49 : NS_ASSERTION(NS_SUCCEEDED(status), "interface not found---were you expecting that?");
50 : #endif
51 : }
52 : else
53 74751 : status = NS_ERROR_NULL_POINTER;
54 :
55 32614064 : return status;
56 : }
57 :
58 : nsresult
59 395311 : nsQueryInterfaceWithError::operator()( const nsIID& aIID, void** answer ) const
60 : {
61 : nsresult status;
62 395311 : if ( mRawPtr )
63 : {
64 395311 : status = mRawPtr->QueryInterface(aIID, answer);
65 : #ifdef NSCAP_FEATURE_TEST_NONNULL_QUERY_SUCCEEDS
66 : NS_ASSERTION(NS_SUCCEEDED(status), "interface not found---were you expecting that?");
67 : #endif
68 : }
69 : else
70 0 : status = NS_ERROR_NULL_POINTER;
71 :
72 395311 : if ( mErrorPtr )
73 395311 : *mErrorPtr = status;
74 395311 : return status;
75 : }
76 :
77 4403826 : nsCOMPtr_base::~nsCOMPtr_base()
78 : {
79 4403826 : NSCAP_LOG_RELEASE(this, mRawPtr);
80 4403829 : if ( mRawPtr )
81 2536583 : NSCAP_RELEASE(this, mRawPtr);
82 4403829 : }
83 :
84 : void
85 1333468 : nsCOMPtr_base::assign_with_AddRef( nsISupports* rawPtr )
86 : {
87 1333468 : if ( rawPtr )
88 95659 : NSCAP_ADDREF(this, rawPtr);
89 1333468 : assign_assuming_AddRef(rawPtr);
90 1333468 : }
91 :
92 : void
93 2252338 : nsCOMPtr_base::assign_from_qi( const nsQueryInterface qi, const nsIID& iid )
94 : {
95 : void* newRawPtr;
96 2252338 : if ( NS_FAILED( qi(iid, &newRawPtr) ) )
97 476 : newRawPtr = 0;
98 2252338 : assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
99 2252338 : }
100 :
101 : void
102 5518 : nsCOMPtr_base::assign_from_qi_with_error( const nsQueryInterfaceWithError& qi, const nsIID& iid )
103 : {
104 : void* newRawPtr;
105 5518 : if ( NS_FAILED( qi(iid, &newRawPtr) ) )
106 0 : newRawPtr = 0;
107 5518 : assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
108 5518 : }
109 :
110 : void
111 0 : nsCOMPtr_base::assign_from_gs_cid( const nsGetServiceByCID gs, const nsIID& iid )
112 : {
113 : void* newRawPtr;
114 0 : if ( NS_FAILED( gs(iid, &newRawPtr) ) )
115 0 : newRawPtr = 0;
116 0 : assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
117 0 : }
118 :
119 : void
120 0 : nsCOMPtr_base::assign_from_gs_cid_with_error( const nsGetServiceByCIDWithError& gs, const nsIID& iid )
121 : {
122 : void* newRawPtr;
123 0 : if ( NS_FAILED( gs(iid, &newRawPtr) ) )
124 0 : newRawPtr = 0;
125 0 : assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
126 0 : }
127 :
128 : void
129 0 : nsCOMPtr_base::assign_from_gs_contractid( const nsGetServiceByContractID gs, const nsIID& iid )
130 : {
131 : void* newRawPtr;
132 0 : if ( NS_FAILED( gs(iid, &newRawPtr) ) )
133 0 : newRawPtr = 0;
134 0 : assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
135 0 : }
136 :
137 : void
138 0 : nsCOMPtr_base::assign_from_gs_contractid_with_error( const nsGetServiceByContractIDWithError& gs, const nsIID& iid )
139 : {
140 : void* newRawPtr;
141 0 : if ( NS_FAILED( gs(iid, &newRawPtr) ) )
142 0 : newRawPtr = 0;
143 0 : assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
144 0 : }
145 :
146 : void
147 707 : nsCOMPtr_base::assign_from_helper( const nsCOMPtr_helper& helper, const nsIID& iid )
148 : {
149 : void* newRawPtr;
150 707 : if ( NS_FAILED( helper(iid, &newRawPtr) ) )
151 0 : newRawPtr = 0;
152 707 : assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
153 707 : }
154 :
155 : void**
156 763455 : nsCOMPtr_base::begin_assignment()
157 : {
158 763455 : assign_assuming_AddRef(0);
159 763455 : return reinterpret_cast<void**>(&mRawPtr);
160 : }
|