00001 #ifndef COMPOSITESYNAPSE_H_
00002 #define COMPOSITESYNAPSE_H_
00003
00004 #include "Synapse.h"
00005
00006 class CompositeSynapse : public SynapseFactory {
00007
00008 public:
00009 CompositeSynapse(const Synapse &synapse,
00010 const SpikeResponse &post_syn_response, const SpikeResponse &backprop_ap_response,
00011 bool post_syn_resp_is_shared = true, bool bap_response_is_shared = true,
00012 Time delay = 0, Time bap_delay = 0)
00013 :
00014 delay(delay),
00015 bap_delay(bap_delay),
00016 synapse(dynamic_cast<Synapse *>(synapse.copy())),
00017 post_syn_response(dynamic_cast<SpikeResponse *>(post_syn_response.copy())),
00018 backprop_ap_response(dynamic_cast<SpikeResponse *>(backprop_ap_response.copy())),
00019 psr_is_shared(post_syn_resp_is_shared),
00020 bap_response_is_shared(bap_response_is_shared)
00021
00022 {}
00023
00024 CompositeSynapse(const Synapse &synapse, const SpikeResponse &post_syn_response,
00025 bool post_syn_resp_is_shared = true, Time delay = 0)
00026 :
00027 delay(delay),
00028 bap_delay(-1),
00029 synapse(dynamic_cast<Synapse *>(synapse.copy())),
00030 post_syn_response(dynamic_cast<SpikeResponse *>(post_syn_response.copy())),
00031 backprop_ap_response(0),
00032 psr_is_shared(post_syn_resp_is_shared)
00033 {
00034
00035 }
00036
00037
00038 virtual ~CompositeSynapse() {
00039 delete synapse;
00040 delete post_syn_response;
00041 delete backprop_ap_response;
00042 }
00043
00044 virtual EvSimObject* create( void ) const {
00045 return synapse->copy(); };
00046
00047 virtual EvSimObject* create( RandomEngine *rng ) const {
00048 return synapse->copy();
00049 };
00050
00051 virtual SpikeResponse *createSpikeResponseObject() const {
00052 if (post_syn_response)
00053 return dynamic_cast<SpikeResponse *>(post_syn_response->copy());
00054 else
00055 return 0;
00056 };
00057 virtual SpikeResponse *createBackpropAPResponseObject() const {
00058 if (backprop_ap_response)
00059 return dynamic_cast<SpikeResponse *>(backprop_ap_response->copy());
00060 else
00061 return 0;
00062 };
00063
00064 virtual void setSharedPSResponse(bool shared_psr) {
00065 psr_is_shared = shared_psr;
00066 }
00067
00068 virtual void setSharedBackpropAPResponse(bool shared_bap_response) {
00069 bap_response_is_shared = shared_bap_response;
00070 }
00071
00072
00073 virtual bool usesSharedPSResponse() const {return psr_is_shared;};
00074
00075 virtual bool usesSharedBackpropAPResponse() const {return bap_response_is_shared;};
00076
00077
00078 bool managesDelay() const {
00079 return true;
00080 }
00081
00082 Time getManagedDelay() const {
00083 return delay;
00084 }
00085
00086 Time getBackpropAPDelay() const {
00087 return bap_delay;
00088 }
00089
00090 protected:
00091 Time delay;
00092 Time bap_delay;
00093 Synapse *synapse;
00094 SpikeResponse *post_syn_response;
00095 SpikeResponse *backprop_ap_response;
00096 bool psr_is_shared;
00097 bool bap_response_is_shared;
00098 };
00099
00100
00101
00102
00103 #endif