File:  [mozdev] / chimera / Attic / nsCOMPtr.cpp
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Thu Jan 31 20:18:48 2002 UTC (17 years, 11 months ago) by hyatt
Branches: MAIN
CVS tags: HEAD
more project changes. Removed completely the dependency on another project.  We now have our own Chimera control and can tweak it as we see fit.

    1: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
    2: /* ***** BEGIN LICENSE BLOCK *****
    3:  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
    4:  *
    5:  * The contents of this file are subject to the Netscape Public License
    6:  * Version 1.1 (the "License"); you may not use this file except in
    7:  * compliance with the License. You may obtain a copy of the License at
    8:  * http://www.mozilla.org/NPL/
    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 the GNU General Public License Version 2 or later (the "GPL"), or 
   27:  * 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 NPL, 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 NPL, the GPL or the LGPL.
   36:  *
   37:  * ***** END LICENSE BLOCK ***** */
   38: 
   39: #include "nsCOMPtr.h"
   40: 
   41: nsresult
   42: nsQueryInterface::operator()( const nsIID& aIID, void** answer ) const
   43: 	{
   44: 		nsresult status;
   45: 		if ( mRawPtr )
   46: 			{
   47: 				status = mRawPtr->QueryInterface(aIID, answer);
   48: #ifdef NSCAP_FEATURE_TEST_NONNULL_QUERY_SUCCEEDS
   49: 				NS_WARN_IF_FALSE(NS_SUCCEEDED(status), "interface not found---were you expecting that?");
   50: #endif
   51: 			}
   52: 		else
   53: 			status = NS_ERROR_NULL_POINTER;
   54: 		
   55: 		if ( mErrorPtr )
   56: 			*mErrorPtr = status;
   57: 		return status;
   58: 	}
   59: 
   60: #ifdef NSCAP_FEATURE_FACTOR_DESTRUCTOR
   61: nsCOMPtr_base::~nsCOMPtr_base()
   62: 	{
   63: 		if ( mRawPtr )
   64: 			NSCAP_RELEASE(this, mRawPtr);
   65: 	}
   66: #endif
   67: 
   68: void
   69: nsCOMPtr_base::assign_with_AddRef( nsISupports* rawPtr )
   70: 	{
   71:     if ( rawPtr )
   72:     	NSCAP_ADDREF(this, rawPtr);
   73:     assign_assuming_AddRef(rawPtr);
   74: 	}
   75: 
   76: void
   77: nsCOMPtr_base::assign_from_helper( const nsCOMPtr_helper& helper, const nsIID& iid )
   78: 	{
   79: 		nsISupports* newRawPtr;
   80: 		if ( NS_FAILED( helper(iid, NS_REINTERPRET_CAST(void**, &newRawPtr)) ) )
   81: 			newRawPtr = 0;
   82:     assign_assuming_AddRef(newRawPtr);
   83: 	}
   84: 
   85: void**
   86: nsCOMPtr_base::begin_assignment()
   87:   {
   88:     assign_assuming_AddRef(0);
   89:     return NS_REINTERPRET_CAST(void**, &mRawPtr);
   90:   }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>