Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

physicalmodel.h

Go to the documentation of this file.
00001 
00005 #ifndef _PHYSICALMODEL_H_
00006 #define _PHYSICALMODEL_H_
00007 
00008 #include <map>
00009 #include <string>
00010 #include "csimerror.h"
00011 #include "csimclass.h"
00012 #include "advanceable.h"
00013 #include "modelinput.h"
00014 #include "analogsynapse.h"
00015 #include "readout.h"
00016 
00017 using namespace std;
00018 
00020 class PhysicalModel : public Advancable {
00021 
00022  public:
00026   PhysicalModel(int input_channels = 0, int output_channels = 0);
00027 
00028   virtual ~PhysicalModel(void);
00029 
00031   virtual int advance(void);
00032 
00034   virtual int addIncoming(Advancable *Incoming) {
00035     return 0;
00036   }
00037 
00040   virtual int addInput(Advancable *Incoming, char *inputname);
00041 
00043   virtual int addOutgoing(Advancable *Outgoing) {
00044     return 0;
00045   }
00046 
00049   virtual int addOutput(Advancable *Outgoing, char *outputname);
00050 
00051 
00056   virtual int transform(double** I, double* O) = 0;
00057 
00059   virtual void reset() {};
00060 
00062   virtual int updateInternal();
00063 
00064   inline uint32 nInChannels(void)  { return nIncoming; }
00065   inline uint32 nOutChannels(void) { return nOutputChannels; }
00066   inline uint32 nOutputs(int i) { return nOutgoing[i]; }
00067   uint32* getInputs(int index);
00068   uint32* getOutputs(int index);
00069 
00071   const char* getInputChannelName(int index);
00072   const char* getOutputChannelName(int index);
00073 
00074  protected:
00075 
00079   int register_input_channel(const char *name);
00080 
00084   int register_output_channel(const char *name);
00085 
00087   Advancable **incoming;
00088 
00090   int nIncoming;
00091 
00093   int nIncomingAlloc;
00094 
00096   AnalogSynapse ***outgoing;
00097 
00099   int *nOutgoing;
00100 
00102   int *nOutgoingAlloc;
00103 
00105   int nOutputChannels;
00106 
00108   map<string, int> input_channel_names;
00109 
00111   map<string, int> output_channel_names;
00112 
00113  private:
00115   double **inputs;
00116   
00118   double *outputs;
00119 
00121   int last_input_index;
00123   int last_output_index;
00124 };
00125 
00126 #endif