Code Search for Developers
 
 
  

SignatureType.h from Oscill8 at Krugle


Show SignatureType.h syntax highlighted

/**
 * @file SignatureType.h
 * @brief represents a type inside a signature
 * @author SBW Development Group <sysbio-team@caltech.edu>
 *
 * Organization: Caltech ERATO Kitano Systems Biology Project
 *
 * Created: @date 18th June 2001
 * $Id: SignatureType.h,v 1.2 2005/02/09 23:49:51 fbergmann Exp $
 * $Source: /cvsroot/jdesigner/C++Broker/include/SBW/SignatureType.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):
**
*/// SignatureType.h: interface for the SignatureType class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SIGNATURETYPE_H__C85CBF03_84D1_4A65_89E5_DDC44C4DEF24__INCLUDED_)
#define AFX_SIGNATURETYPE_H__C85CBF03_84D1_4A65_89E5_DDC44C4DEF24__INCLUDED_

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

#include "portableOS.h"
#include "DataBlockWriterClass.h"
#include "DataBlockReaderClass.h"
#include "SignatureElement.h"
//#ifndef WIN32
#include <stdarg.h>
//#endif
namespace SystemsBiologyWorkbench
{

/// underlying implementation of SignatureType and base class of signature type representations.
struct sbwSignatureType : public SBWObject
{
public:
	/**
	 * returns the DataBlockType of this type
	 * @return the DataBlockType of this type
	 */
	virtual DataBlockType getType() = 0 ;

	/**
	 * returns the contents of this list type assuming this represents a list type.
	 * This default implementation throws an exception.
	 * The result should be deallocated using the delete[] operator.
     * @throws SBWTypeMismatchException - default behaviour
	 * @returns the contents of this list type assuming this represents a list type
	 */
	virtual std::vector<SignatureElement> *getContents() { throw new SBWTypeMismatchException("this type is not a list");}

	/**
	 * returns the element type assuming this represents an array type.
	 * This default implementation throws an exception.
     * @throws SBWTypeMismatchException - default behaviour
	 * @returns the element type assuming this represents an array type.
	 */
	virtual sbwSignatureType *getArrayInnerType() { throw new SBWTypeMismatchException("this type is not an array"); }

	/**
	 * returns the number of dimensions of the array type assuming this represents an array type.
	 * This default implementation throws an exception.
     * @throws SBWTypeMismatchException - default behaviour
	 * @returns the number of dimensions of the array type assuming this represents an array type.
	 */
	virtual Integer getArrayDimensions() { throw new SBWTypeMismatchException("this type is not an array"); }

	/**
	 * returns whether this type is a list
	 * @returns flase by default.
	 */
	virtual bool isList() { return false; }

	// Note the functions involving va_list below are specific to the C interface
	// the use of these functions in C++ is not recommended

	/**
	 * For C API : store a value from a variable argument list in a given data block.
	 * The type of the value is assumed to correspond to this sbwSignatureType.
	 * @param writer data block in which the value will be stored.
	 * @param ap variable argument list - the next item is assumed to be the value to be stored.
	 */
	virtual void write(DataBlockWriter writer, va_list &ap) = 0 ;

	/**
	 * For C API : read a value from a given data block.
	 * The type of the value is assumed to correspond to this sbwSignatureType.
	 * @param reader data block in which the value is stored.
	 * @param ap variable argument list - the next item is assumed to be a pointer,
	 *           the extracted value is stored in the referenced location.
	 */
	virtual void read(DataBlockReader reader, va_list &ap) = 0 ;

	/**
	 * For C API : store array in data block.
	 * The type of the elements is assumed to correspond to this sbwSignatureType.
	 * @param writer data block in which array to be stored
	 * @param size number of elements in the array
	 * @param ap variable argument list - the next item is assumed to be a pointer to an array.
	 */
	virtual void write1DArray(DataBlockWriter writer , Integer size, va_list &ap) = 0 ;

	/**
	 * For C API : read an array from a data block.
	 * The type of the elements is assumed to correspond to this sbwSignatureType.
	 * @param reader data block in which array is stored
	 * @param size number of elements in the array
	 * @param ap variable argument list - the next item is assumed to be a pointer to a pointer to an array.
	 *           This pointer is changed to point to an array allocated on the C Heap.
	 *           Use SBWFree to deallocate this array. (unless its a string array in which case use SBWFree2DArray)
	 */
	virtual void read1DArray(DataBlockReader reader, Integer &size, va_list &ap) = 0 ;

	/**
	 * For C API : store 2D array in data block.
	 * @param writer data block in which array to be stored
	 * @param xSize number of elements in the first dimension in the array
	 * @param ySize number of elements in the 2nd dimension in the array
	 * @param ap variable argument list - the next item is assumed to be a pointer to a
	 *           pointer array where each element points to an array.
	 */
	virtual void write2DArray(DataBlockWriter, Integer xsize, Integer ysize, va_list &) = 0 ;

	/**
	 * For C API : read a 2D array from a data block.
	 * @param reader data block in which array is stored
	 * @param xSize set to the number of elements on the first dimension of the array
	 * @param ySize set to the number of elements on the first dimension of the array
	 * @param ap variable argument list - the next item is assumed to be a pointer to a pointer to a pointer array.
	 *           This pointer is changed to point to a pointer array allocated on the C Heap.
	 *           Use SBWFree2DArray to deallocate this array. (doesn't work for string 2D string arrays)
	 */
	virtual void read2DArray(DataBlockReader, Integer &xsize, Integer &ysize, va_list &) = 0 ;

	/**
	 * returns whether this type is equal to another type.
	 * @param other other type.
	 * @return whether this type is equal to another type.
	 */
	virtual bool match(sbwSignatureType *other) { return getType() == other->getType(); }
};

/// represents a type inside an SBW method signature
class SignatureType : public SBWHandle<sbwSignatureType>
{
public:
	/// creates an empty type
	SignatureType() {} ;

	/**
	 * creates a type object given an underlying implementation.
	 * @param x underlying implementation.
	 */
	SignatureType(sbwSignatureType *x) : SBWHandle<sbwSignatureType>(x) {}

	/**
	 * returns the DataBlockType of this type
	 * @return the DataBlockType of this type
	 */
	DataBlockType getType() { return p->getType() ; }

	/**
	 * returns the contents of this list type assuming this represents a list type.
	 * This default implementation throws an exception.
	 * The result should be deallocated using the delete[] operator.
     * @throws SBWTypeMismatchException - default behaviour
	 * @returns the contents of this list type assuming this represents a list type
	 */	
	std::vector<SignatureElement> *getListContents() { return p->getContents(); }

	/**
	 * returns the element type assuming this represents an array type.
	 * This default implementation throws an exception.
     * @throws SBWTypeMismatchException - default behaviour
	 * @returns the element type assuming this represents an array type.
	 */
	SignatureType getArrayInnerType() { return p->getArrayInnerType(); }

	/**
	 * returns the underlying implementation.
	 * @return the underlying implementation.
	 */
	sbwSignatureType *getImpl() { return p ; }

	/**
	 * returns the number of dimensions of the array type assuming this represents an array type.
	 * This default implementation throws an exception.
     * @throws SBWTypeMismatchException - default behaviour
	 * @returns the number of dimensions of the array type assuming this represents an array type.
	 */
	Integer getArrayDimensions() { return p->getArrayDimensions(); }

	/**
	 * returns whether this type is equal to another type.
	 * @param x other type.
	 * @return whether this type is equal to another type.
	 */
	bool match(SignatureType x) { return p->match(x.p); }
};

} // SystemsBiologyWorkbench

#endif // !defined(AFX_SIGNATURETYPE_H__C85CBF03_84D1_4A65_89E5_DDC44C4DEF24__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