//////////////////////////////////////////////////////////////////////////////
//
// File: nn_node.h
//
// Purpose: Interface for NeuNet's Node class.
//
// Authors:
//   txe  Travis Emmitt
//
// Modifications:
//   17-APR-1998  txe  Initial creation
//   18-APR-1998  txe  Added ComputeOutput(), SetError(), AddError()
//   19-APR-1998  txe  Cleaned up, added contrustor, destructor, SetLink()
//   23-APR-1998  txe  Added comments
//
//////////////////////////////////////////////////////////////////////////////

#ifndef NN_NODE_H
#define NN_NODE_H

#include "debug.h"
#include "nn_arch.h"

class Node : public Debug {
  friend class Link;
  friend class NeuNet;

private:
  Arch  *arch;              // NeuNet architecture
  float  delta;             // delta value (derived from errors)
  float  error;             // total error associated w/ this node
  Link **in_links;          // input links (from previous layer)
  float  level;             // current activation level
  int    num_in_links;      // number of input links
  int    num_out_links;     // number of output links
  Link **out_links;         // output links (to next layer)
  
public:
  Node (char *name, Arch *arch, int num_in_links, int num_out_links);
  ~Node ();
  void  AddError     (float error);
  float ComputeLevel ();             // computes output level
  void  Print        ();
  void  SetError     (float error);
  void  SetLevel     (float level);
  void  SetLink      (int in_id, int out_id, Node *dest);
};

#endif

///////////////////////////////////////////////////////////////////////////////

