📄 nconnector.h
字号:
/*************************************************************************** nconnector.h - description ------------------- copyright : (C) 2004 by Matt Grover email : mgrover@amygdala.org ***************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/#ifndef NCONNECTOR_H#define NCONNECTOR_H#include <amygdala/amygdalaclass.h>#include <amygdala/axon.h>#include <amygdala/spikingneuron.h>#include <stdexcept>#include <map>namespace Amygdala {class Trainer;class Neuron;class SpikingNeuron;class SynapseProperties;class NConnector: public AmygdalaClass {public: /** Connect preSynNrn to postSynNrn */ virtual void Connect(Neuron* preSynNrn, SpikingNeuron* postSynNrn, SynapseProperties & sp) = 0; /** @return Ptr to the default SynapseProperties */ virtual SynapseProperties* GetDefaultProperties() const = 0; virtual void SetDefaultProperties(SynapseProperties* sp) = 0;};class ConnectorRegistry : public AmygdalaClass { std::map <std::string, NConnector* > connectorMap; ConnectorRegistry(); static ConnectorRegistry registry;public: static ConnectorRegistry & GetRegistry() { return registry;} NConnector * GetConnector(const std::string & name); void Register(std::string name, NConnector * connector);};/** @class NeuronConnector nconnector.h amygdala/nconnector.h * @brief A class for connecting neurons together * * NeuronConnector connects neurons by constructing the correct type * of Synapse and adding the Synapse to a neuron's Axon. * @see Neuron, Synapse, Axon * @author Matt Grover <mgrover@amygdala.org> */template<class synapse, class synapseProperty>class NeuronConnector: public NConnector {public: NeuronConnector(); /** Build the NeuronConnector with a default SynapseProperties object */ NeuronConnector(synapseProperty& sp); ~NeuronConnector(); void operator()(Neuron* preSynNrn, SpikingNeuron* postSynNrn, SynapseProperties & sp) { return Connect(preSynNrn, postSynNrn, sp); } /** Connect preSynNrn to postSynNrn */ void Connect(Neuron* preSynNrn, SpikingNeuron* postSynNrn, SynapseProperties & sp); /** @return Ptr to the default SynapseProperties */ SynapseProperties* GetDefaultProperties() const { return defaultProps; } void SetDefaultProperties(SynapseProperties* sp);protected: synapseProperty* defaultProps;};template<class synapse, class synapseProperty>void NeuronConnector<synapse, synapseProperty>::SetDefaultProperties(SynapseProperties* sp){ synapseProperty * props = dynamic_cast <synapseProperty * > (sp); if(props == NULL){ throw std::runtime_error ("cannot cast to specific SynapseProperties type"); } else { if(props != defaultProps) { delete defaultProps; defaultProps = new synapseProperty(*props); } }}template<class synapse, class synapseProperty>NeuronConnector<synapse, synapseProperty>::NeuronConnector(){ defaultProps = new synapseProperty(1000);}template<class synapse, class synapseProperty>NeuronConnector<synapse, synapseProperty>::NeuronConnector(synapseProperty& sp){}template<class synapse, class synapseProperty>NeuronConnector<synapse, synapseProperty>::~NeuronConnector(){}template<class synapse, class synapseProperty>void NeuronConnector<synapse, synapseProperty>::Connect(Neuron* preSynNrn, SpikingNeuron* postSynNrn, SynapseProperties & sProps){ synapseProperty * sp = dynamic_cast <synapseProperty *> (&sProps); if (sp == NULL) throw std::runtime_error("Wrong type of SynapseProperties"); synapse* syn = new synapse(*sp); preSynNrn->GetAxon()->AddSynapse(syn, sizeof(synapse), sp->GetDelay()); Dendrite* dend = postSynNrn->GetDendrite(); syn->dendrite = dend;}} // namespace Amygdala#endif // NCONNECTOR_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -