Code Search for Developers
 
 
  

SBWHandle.h from Oscill8 at Krugle


Show SBWHandle.h syntax highlighted

/**
 * @file SBWHandle.h
 * @brief smart pointer - based on MS ATL - base class for immediate API classes
 * @author SBW Development Group <sysbio-team@caltech.edu>
 *
 * Organization: Caltech ERATO Kitano Systems Biology Project
 *
 * Created: @date 18th June 2001
 * $Id: SBWHandle.h,v 1.1 2004/06/17 20:15:20 fbergmann Exp $
 * $Source: /cvsroot/jdesigner/C++Broker/include/SBW/SBWHandle.h,v $
 */

/*
** Copyright 2001 California Institute of Technology and
** Japan Science and Technology Corporation.
** 
** This library is free software; you can redistribute it and/or modify it
** under the terms of the GNU Lesser General Public License as published
** by the Free Software Foundation; either version 2.1 of the License, or
** any later version.
** 
** This library is distributed in the hope that it will be useful, but
** WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF
** MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  The software and
** documentation provided hereunder is on an "as is" basis, and the
** California Institute of Technology and Japan Science and Technology
** Corporation have no obligations to provide maintenance, support,
** updates, enhancements or modifications.  In no event shall the
** California Institute of Technology or the Japan Science and Technology
** Corporation be liable to any party for direct, indirect, special,
** incidental or consequential damages, including lost profits, arising
** out of the use of this software and its documentation, even if the
** California Institute of Technology and/or Japan Science and Technology
** Corporation have been advised of the possibility of such damage.  See
** the GNU Lesser General Public License for more details.
** 
** You should have received a copy of the GNU Lesser General Public License
** along with this library; if not, write to the Free Software Foundation,
** Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
**
** The original code contained here was initially developed by:
**
**     Andrew Finney, Herbert Sauro, Michael Hucka, Hamid Bolouri
**     The Systems Biology Workbench Development Group
**     ERATO Kitano Systems Biology Project
**     Control and Dynamical Systems, MC 107-81
**     California Institute of Technology
**     Pasadena, CA, 91125, USA
**
**     http://www.cds.caltech.edu/erato
**     mailto:sysbio-team@caltech.edu
**
** Contributor(s):
**
*/
// SBWHandle.h: interface for the SBWHandle class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SBWHANDLE_H__3540512C_45D8_448B_9111_619845A580CA__INCLUDED_)
#define AFX_SBWHANDLE_H__3540512C_45D8_448B_9111_619845A580CA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <assert.h>
#include "portableOS.h"

namespace SystemsBiologyWorkbench
{

/// smart pointer for use with classes derived from SBWObject
template <class T>
class SBW_API SBWHandle
{
public:
	typedef T _PtrClass;

	/// create pointer with null reference
	SBWHandle() {p=NULL;}

	/**
	 * create a smart pointer from a pointer.
     * Increment the reference count of the referenced object.
	 * @param lp pointer to SBWObject
	 */
	SBWHandle(T* lp)
	{
        assert(lp!=(LPVOID) 0xdddddddd);
		if ((p = lp) != NULL)
			p->AddReference();
	}

	/**
	 * create a smart pointer from another smart pointer
	 * Increment the reference count of the referenced object.
	 * @param lp smart pointer to SBWObject
	 */
	SBWHandle(const SBWHandle<T>& lp)
	{
        assert(lp.p!=(LPVOID) 0xdddddddd);
		if ((p = lp.p) != NULL)
			p->AddReference();
	}

	/**
	 * decrement the reference count of the referenced object.
	 */
	~SBWHandle() {if (p) p->Release();}

	/**
	 * decrement the reference count of the referenced object.
	 */
	void Release() {if (p) p->Release(); p=NULL;}

	/**
	 * conversion operator from smart pointer to ordinary pointer.
	 * @return equivalent ordinary pointer.
	 */
	operator T*() const {return (T*)p;}

    /**
	 * dereference or * operator.
	 * @returns a reference to the referenced object.
	 */
	T& operator*() {assert(p!=NULL); return *p; }

	/**
	 * dereference field operator or -> operator.
	 * @returns pointer to the referenced object.
	 */
	T* operator->() { assert(p!=NULL); return p; }

	// T* operator=(T* lp){return (T*)AtlComPtrAssign((IUnknown**)&p, lp);}

    /**
	 * assignment operator.
	 * Decrements reference count of previously referenced object.
	 * Increments reference count of object of newly assigned reference. 
	 * @param lp smart pointer val;ue assigned tom this smart pointer.
	 * @returns new value in ordinary pointer form. 
	 */
	T* operator=(const SBWHandle<T>& lp)
	{
		assert(lp.p!=(LPVOID) 0xdddddddd);
        // in ATL it's
		//return (T*)AtlComPtrAssign((IUnknown**)&p, lp.p);

		if (lp.p)
			lp.p->AddReference();

		if (p)
			p->Release();

		p = lp.p ;

		return (T *)p ;
	}
#if _MSC_VER>1020 || defined(LINUX)
	bool operator!(){return (p == NULL);}
#else
	BOOL operator!(){return (p == NULL) ? TRUE : FALSE;}
#endif
protected:
	/// underlying smart pointer.
	T* p;
};
} // SystemsBiologyWorkbench
#endif // !defined(AFX_SBWHANDLE_H__3540512C_45D8_448B_9111_619845A580CA__INCLUDED_)




See more files for this project here

Oscill8

Oscill8 is a suite of tools for analyzing dynamical systems which concentrates on understanding how the dynamical behavior depends on the parameters using bifurcation theory and reaction network theory.

Project homepage: http://sourceforge.net/projects/oscill8
Programming language(s): C,C#,C++
License: other

  .sconsign
  DataBlockReader.h
  DataBlockReaderClass.h
  DataBlockType.h
  DataBlockWriter.h
  DataBlockWriterClass.h
  DoNothingReceiver.h
  Handler.h
  HandlerForC.h
  ImplDataBlockReader.h
  ImplDataBlockReaderClass.h
  ImplDataBlockWriter.h
  ImplDataBlockWriterClass.h
  ImplModuleDescriptor.h
  Method.h
  MethodImpl.h
  MethodInline.h
  MethodTable.h
  Module.h
  ModuleDescriptor.h
  ModuleImpl.h
  ModuleInline.h
  RPCInCall.h
  RPCOutCall.h
  Receiver.h
  RuntimeProperties.h
  SBW.h
  SBWApplicationException.h
  SBWBrokerStartException.h
  SBWC.h
  SBWCommunicationException.h
  SBWConfig.h
  SBWException.h
  SBWHandle.h
  SBWHighLevel.h
  SBWIncompatibleMethodSignatureException.h
  SBWIncorrectCategorySyntaxException.h
  SBWListener.h
  SBWListenerConsolidator.h
  SBWListenerForC.h
  SBWLowLevel.h
  SBWMethodAmbiguousException.h
  SBWMethodNotFoundException.h
  SBWMethodTypeNotBlockTypeException.h
  SBWModuleDefinitionException.h
  SBWModuleIdSyntaxException.h
  SBWModuleNotFoundException.h
  SBWModuleRPC.h
  SBWModuleStartException.h
  SBWOSSocket.h
  SBWObject.h
  SBWRPC.h
  SBWRPCListener.h
  SBWRawException.h
  SBWServiceNotFoundException.h
  SBWSignatureSyntaxException.h
  SBWTypeMismatchException.h
  SBWUnsupportedObjectTypeException.h
  Service.h
  ServiceDescriptor.h
  ServiceImpl.h
  ServiceInline.h
  SessionKey.h
  Signature.h
  SignatureArray.h
  SignatureBoolean.h
  SignatureElement.h
  SignatureList.h
  SignatureListContents.h
  SignatureScalar.h
  SignatureType.h
  config.h
  portableOS.h
  sbwSignatureByte.h
  sbwSignatureVoid.h
  sbwbasictypes.h
  sbwdefs.h
  sbwenums.h
  sbwplusbasictypes.h
  stdafx.h