#ifndef NEURAL_ROW_H #define NEURAL_ROW_H #include "neural/container.h" namespace Neural { template class Row : public Container { public: //typedef Bu::List *> NodeList; Row() : iInputs( 0 ), iOutputs( 0 ), iWeights( 0 ), iBiases( 0 ) { } virtual ~Row() { } virtual void finalize( int iNumInputs ) { iInputs = iNumInputs; iOutputs = 0; iWeights = 0; iBiases = 0; for( typename Container::NodeList::iterator i = Container::getNodeList().begin(); i; i++ ) { (*i)->finalize( iInputs ); iOutputs += (*i)->getNumOutputs(); iWeights += (*i)->getNumWeights(); iBiases += (*i)->getNumBiases(); } } virtual void process( sigtype *aInput, sigtype *aOutput ) { int iOutputOffset = 0; for( typename Container::NodeList::iterator i = Container::getNodeList().begin(); i; i++ ) { (*i)->process( aInput, aOutput+iOutputOffset ); iOutputOffset += (*i)->getNumOutputs(); } } virtual int getNumInputs() const { return iInputs; } virtual int getNumOutputs() const { return iOutputs; } virtual int getNumWeights() const { return iWeights; } virtual int getNumBiases() const { return iBiases; } private: int iInputs; int iOutputs; int iWeights; int iBiases; }; }; #endif