#ifndef _COUCHE_H
#define _COUCHE_H
#include <iostream>
#include "neurone.h"
#include "synapseMatrix.h"
#include "Utils.h"

using namespace std;
class Couche{
    private:
        Neurone* listNeurone;
        Couche* nextCouche;
        unsigned int nbrNeurone;
        void deleteN(Neurone* n);
        void deleteList();
        Neurone* copy(Neurone* n);
    protected:
        Utils util;
        SynapseMatrix synSortantes;
    public:
        Couche();
        ~Couche();
        Couche(const unsigned int nbr,const Couche* next=NULL);
        const unsigned int getNumber() const;
        Neurone& operator [](const unsigned int i) const throw(const unsigned int);
        bool operator ==(const Couche c);
        Couche& operator=(const Couche& c);
        void setNextCouche(const Couche* c) throw(std::string);
        Couche* getNextCouche() const;
        void randomizeSynapseMatrix();
        Synapse& getSynapse(const unsigned int neurThisCouche,const unsigned int neurNextCouche) const throw(const unsigned int,std::string);
        friend ostream& operator<<(ostream& os,const Couche &c);
	void printSynapseMatrix();
};
#endif
