//*******************************************************************************
// CSC 143 Computer Programming II Spring 1999 Instructor: Keith Hughes
//
// Homework 3
// File : \\Venus\katy\CIS143\Homework3\AdalineNetwork\layer.h
//
// Purpose : Declaration for NeuronLayer and LinkLayer classes.
//
// Author : Hsin-yi F. Berg
// Date : 5/9/1999 Sun.
// Last Update: 5/28/1999 Fri.
// Update Note: Modification of the documentation
//                 NeuralNet has been moved to NeuralNet.h
//*******************************************************************************
#ifndef    LAYER_H
#define LAYER_H
#include "base.h"
#include <iostream.h>
#include <fstream.h>
typedef int ID;
// WEIGHT is the weight of the link, already declared in base.h
extern const double WEIGHT;
class Neuron;
class Link;
class NeuronLayer
{
public:
    /*
        NeuronLayer::NeuronLayer()
        Default constructor for a NeuronLayer. NeuronLayer is created empty.
    */
    NeuronLayer();
    /*
        NeuronLayer::~NeuronLayer()
        Default destructor for a NeuronLayer.
    */
    ~NeuronLayer();
    /*
        void NeuronLayer::SetHowManyNeurons(int n)
        Set how many Neurons are there in the layer (default is 0).
        This function can only be called once.
    */
    void SetHowManyNeurons(int n);
    /*
        void NeuronLayer::SetNeuronValue(int whichNeuron, double Value)
        Set the value of a specified Neuron
    */
    void SetNeuronValue(int whichNeuron, double Value);
    /*
        double NeuronLayer::GetNeuronValue(int whichNeuron) const
        Return the value of a specified Neuron
    */
    double GetNeuronValue(int whichNeuron) const;
    /*
        void NeuronLayer::SetError(int whichNeuron, double newError)
        Set the error of a specific Neuron
    */
    void NeuronLayer::SetError(int whichNeuron, double newError);
    /*
        double NeuronLayer::GetError(int whichNeuron) const
        Get the error of a specific Neuron.
    */
    double NeuronLayer::GetError(int whichNeuron) const;
    /*
        int NeuronLayer::GetNumNeuron(void) const
        Return how many Neurons are already in the Neuron
    */
    int GetNumNeuron(void) const;
    /*
        Neuron *&NeuronLayer::GetNeurons(void)
        Return the reference of Neurons
    */
    Neuron *&GetNeurons(void);
    /*
        void NeuronLayer::Print(ostream& out) const
        print out the internal state of all the Neurons
        in the NeuronLayer to client supplied ostream
    */
    void Print(ostream& out) const;
    /*
        void Neuron::Fire(void)
        fire the entire NeuronLayer
    */
    void Fire(void);
    /*
        void NeuronLayer::ReadFromFile(istream &in)
        Read data into this NeuronLayer instance from file specified by "in"
    */
    void NeuronLayer::ReadFromFile(istream &in);
    
    /*
        void NeuronLayer::WriteToFile(ostream &out)
        Write data of this NeuronLayer instance to file specified by "out"
    */
    void NeuronLayer::WriteToFile(ostream &out);
private:
    // id_count keeps track of how many NeuronLayers that have been created
    static int id_count;        
    // each NeuronLayer automatically gets an unique id when it's created
    ID id;
    // number of Neurons in the layer
    int numNeuron;                         
    // neurons stores the collection of Neurons
    Neuron *neurons;
};
class LinkLayer
{
public:
    /*
        LinkLayer::LinkLayer()
        Default constructor for a LinkLayer. LinkLayer is created empty.
    */
    LinkLayer();
    /*
        LinkLayer::~LinkLayer()
        Destructor for a LinkLayer.
    */
    ~LinkLayer();
    /*
        void LinkLayer::SetHowManyLinks(int n)
        set how many links there are in the layer.
    */
    void SetHowManyLinks(int n);
    /*
        void LinkLayer::SetLinkWeight(double Weight)
        Set how many links there are in the layer.
        Set the weight of all links in the layer (all get the same value)
    */    
    void SetLinkWeight(double Weight);
    /*
        int LinkLayer::GetNumLink(void) const
        Get how many links there are in the layer.
    */
    int GetNumLink(void) const;
    /*
        Link *&LinkLayer::GetLinks(void)
        Get how many links there are in the layer.
    */
    Link *&GetLinks(void);
    /*
        void LinkLayer::Print(ostream &out) const
        Print out the internal state of all the Links in the LinkLayer to
        the client supplied ostream.
    */
    void Print(ostream &out) const;
    /*
        void LinkLayer::ReadFromFile(istream &in)
        Read data into this LinkLayer instance from file specified by "in"
    */
    void LinkLayer::ReadFromFile(istream &in);
    
    /*
        void LinkLayer::WriteToFile(ostream &out)
        Write data of this linkLayer instance to file specified by "out"
    */
    void LinkLayer::WriteToFile(ostream &out);
private:
    // id_count keeps track of how many LinkLayers that have been created
    static int id_count;             
    // each LinkLayer automatically gets an unique id when it's created
    ID id;
    // number of Links in the layer
    int numLink;
    // links stores the collection of Links
    Link *links;
};
#endif
 
Back    Top