/**************************************************************************

	Cmprtmnt.h												JJS 8/26/95
	
		part of CONICAL, the Computational Neuroscience Class Library
	
	A Compartment is an isopotential volume, to which other compartments
	may be attached through Links.  A Compartment may also have a number
	of Channels.  The current flow from these objects is balanced against
	the current flow through the Compartment membrane, to produce a new
	Compartment potential (voltage) in the Step method.

	Requires:
		VSource		-- base class
		VSink		-- base class
		Stepper		-- base class
		Link.h		-- header file for the Link class

**************************************************************************/

#ifndef COMPARTMENT_H
#define COMPARTMENT_H

#include "VSource.h"
#include "VSink.h"
#include "Stepper.h"

// declare the Compartment class

class Compartment : public VSource, public VSink, public Stepper
{
  public:
	
	Compartment( void );			// constructor
	
	virtual void Step( const real dt );		// update V[]
	virtual real GetV( void )				// get current voltage
	{ return V[itsMaster->GetCurIdx()]; }
	
	// public variables: feel free to read or set these between steps!
	
	real Gm;		// membrane conductance (siemens)
	real EGm;		// reversal potential times Gm (volt seimens, or amps)
	real negC;		// negative of the membrane capacitance (farads)
	real Gi;		// internal (axial) conductance (siemens)
};

#endif