00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _SYNAPSES_
00024 #define _SYNAPSES_
00025
00026 #include "object.h"
00027 #include "misc.h"
00031 typedef struct {
00032 double value;
00033 int last_update;
00034 } aspi_trace_t;
00035
00036
00040 typedef struct {
00041 double * weight;
00042 int * delay;
00043 aspi_trace_t * trace;
00044 aspi_object_t * pre;
00045 aspi_object_t * post;
00046 } aspi_synapse_t;
00047
00048
00052 typedef void (* aspi_callback_t) (void * data, aspi_synapse_t * syn);
00053
00083 typedef struct {
00084 aspi_object_t parent;
00085
00086
00087 int number_neurons;
00088
00089 double leak;
00090 } aspi_synapses_t;
00091
00098 typedef struct {
00099 aspi_class_t parent;
00100 aspi_object_t * (* init) (aspi_object_t * self, int n_neurons, double trace_leak);
00101 double (* get_weight) (aspi_object_t * self, int pre, int post);
00102 void (* set_weight) (aspi_object_t * self, int pre, int post, double weight);
00103 int (* get_delay) (aspi_object_t * self, int pre, int post);
00104 void (* set_delay) (aspi_object_t * self, int pre, int post, int delay);
00105 double (* get_trace) (aspi_object_t * self, int pre, int post, int time);
00106 void (* add_to_trace) (aspi_object_t * self, int pre, int post, double value, int time);
00107 void (* apply_callback) (aspi_object_t * self, aspi_object_t * network, aspi_callback_t callback, void * data);
00108 void (* apply_callback_post) (aspi_object_t * self, aspi_object_t * network, int neuron, aspi_callback_t callback, void * data);
00109 void (* apply_callback_pre) (aspi_object_t * self, aspi_object_t * network, int neuron, aspi_callback_t callback, void * data);
00110 } aspi_synapses_class_t;
00111
00112
00113 aspi_class_t * aspi_synapses (void);
00114 aspi_object_t * aspi_synapses_init (aspi_object_t * self, int n_neurons, double trace_leak);
00115 void aspi_synapses_dtor (aspi_object_t * self);
00116 aspi_object_t * aspi_synapses_init_generic (aspi_class_t * klass, aspi_object_t * self, int n_neurons, double trace_leak);
00117
00118 int aspi_synapses_get_size (aspi_object_t * self);
00119 double aspi_synapses_get_trace_leak (aspi_object_t * self);
00120
00121 double aspi_synapses_get_weight (aspi_object_t * self, int pre, int post);
00122 void aspi_synapses_set_weight (aspi_object_t * self, int pre, int post, double value);
00123
00124 int aspi_synapses_get_delay (aspi_object_t * self, int pre, int post);
00125 void aspi_synapses_set_delay (aspi_object_t * self, int pre, int post, int value);
00126
00127 double aspi_synapses_get_trace (aspi_object_t * self, int pre, int post, int time);
00128 void aspi_synapses_add_to_trace (aspi_object_t * self, int pre, int post, double value, int time);
00129
00130 void aspi_synapses_apply_callback_pre (aspi_object_t * self, aspi_object_t * net, int neuron, aspi_callback_t callback, void * data);
00131 void aspi_synapses_apply_callback_post (aspi_object_t * self, aspi_object_t * net, int neuron, aspi_callback_t callback, void * data);
00132 void aspi_synapses_apply_callback (aspi_object_t * self, aspi_object_t * net, aspi_callback_t callback, void * data);
00133
00134
00135
00136 #define ASPI_SYNAPSES(x) (aspi_object_check (x, aspi_synapses ()), ((aspi_synapses_t *) x))
00137 #define ASPI_SYNAPSES_CLASS(x) (aspi_class_check (x, aspi_synapses ()), ((aspi_synapses_class_t *) x))
00138
00139
00142 #endif