[ return ]

connection.c




/*
 * file : net.c
 *
 *  Name                Date        Description
 *  --------------      --------    -------------------------------------
 *  Andrew H. Fagg      09/05/94    Original
 *
 * [DEFINE DESCRIPTION = High-level connection routines]
 *
 */

#include "nsl_include.h"
#include "alib.h"
#include "gen.h"

#include "connection.h"

/*
  * void connect_sensory_to_column(sensor_class* sensor, int s_index,
  *
  *  Connect <sensor> to the specified sensor unit of <layer>.
  *
  */

void connect_sensory_to_column(sensor_class* sensor, int s_index,
			  layer_class* layer, int l_index,
			  float weight)

{
				/* Get sensor element info. */
  name_class* name = sensor->get_name(s_index);        //OVERLOAD CALL: get_name: column.c(column_class), connector.c(connector_class), gate.c(gate_class), layer.c(layer_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class), sensor.c(sensor_class)
  if(!name)
    {
      cout nl "connect_sensory_to_column() : error creating connection" nl;
      exit(1);
    }

  nsl_data* elem = sensor->get_element(s_index);
  if(!elem)
    {
      cout nl "connect_sensory_to_column() : error creating connection" nl;
      exit(1);
    }

				/* Get a pointer to the connector */
  connector_class* connector = layer->get_column_connector(l_index);

  if(!connector)		/* Bogus connector */
    {
      cout nl << "connect_sensory_to_column() : " << 
	"Error creating connection" nl <<
	  "Source layer: " << layer->get_name() nl <<        //OVERLOAD CALL: get_name: column.c(column_class), connector.c(connector_class), gate.c(gate_class), layer.c(layer_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class), sensor.c(sensor_class)
	    "index: " << l_index nl nl;
      cout << "Destination: " << name nl <<
	"index: " << s_index nl nl;
      exit(1);
    }
				/* Create the connection. */
  connector->add_connection(elem, name, weight);        //OVERLOAD CALL: add_connection: connector.c(connector_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class)
}

/*
  * void connect_sensory_to_gate(sensor_class* sensor, int s_index,
  *
  *  Connect <sensor> to the specified gating <unit> of <layer>.
  *
  */

void connect_sensory_to_gate(sensor_class* sensor, int s_index,
			     layer_class* layer, int l_index,
			     int gate, int unit,
			     float weight)

{
				/* Get sensor element info. */
  name_class* name = sensor->get_name(s_index);        //OVERLOAD CALL: get_name: column.c(column_class), connector.c(connector_class), gate.c(gate_class), layer.c(layer_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class), sensor.c(sensor_class)
  if(!name)
    {
      cout nl "connect_sensory_to_gate() : error creating connection" nl;
      exit(1);
    }

  nsl_data* elem = sensor->get_element(s_index);
  if(!elem)
    {
      cout nl "connect_sensory_to_gate() : error creating connection" nl;
      exit(1);
    }


				/* Get a pointer to the connector */
  connector_class* connector = layer->get_gate_connector(l_index, gate, unit);        //OVERLOAD CALL: get_gate_connector: column.c(column_class), layer.c(layer_class)

  if(!connector)		/* Bogus connector */
    {
      cout nl << "connect_sensory_to_gate() : " << 
	"Error creating connection" nl <<
	  "Destination layer: " << layer->get_name() nl <<        //OVERLOAD CALL: get_name: column.c(column_class), connector.c(connector_class), gate.c(gate_class), layer.c(layer_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class), sensor.c(sensor_class)
	    "index: " << l_index nl <<
	      "gate: " << gate nl <<
		"unit: " << unit nl;
      cout << "Source layer: " << name nl <<
	"index: " << s_index nl nl;
      exit(1);
    }

				/* Create the connection. */
  connector->add_connection(elem, name, weight);        //OVERLOAD CALL: add_connection: connector.c(connector_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class)
}


/*
  * void connect_column_to_gate(layer_class* source, int s_index,
  *
  *  Connect output unit of <source> to support unit of <dest>.
  *
  */

void connect_column_to_gate(layer_class* source, int s_index,
			 layer_class* dest, int d_index, int gate, 
			 int unit, float weight)

{
				/* Get sensor element info. */
  name_class* name = source->get_column_name(s_index);
  if(!name)
    {
      cout nl "connect_column_to_gate() : error creating connection" nl;
      exit(1);
    }
  
  nsl_data* elem = source->get_column_output(s_index);
  if(!elem)
    {
      cout nl "connect_column_to_gate() : error creating connection" nl;
      exit(1);
    }


				/* Get a pointer to the connector */
  connector_class* connector = dest->get_gate_connector(d_index, gate, unit);        //OVERLOAD CALL: get_gate_connector: column.c(column_class), layer.c(layer_class)

  if(!connector)		/* Bogus connector */
    {
      cout nl << "connect_column_to_gate() : " << 
	"Error creating connection" nl <<
	  "Destination layer: " << dest->get_name() nl <<        //OVERLOAD CALL: get_name: column.c(column_class), connector.c(connector_class), gate.c(gate_class), layer.c(layer_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class), sensor.c(sensor_class)
	    "index: " << d_index nl <<
	      "gate: " << gate nl <<
		"unit: " << unit nl;
      cout << "Source: "  << name nl <<
	"index: " <<s_index nl nl; 
      exit(1);
    }

				/* Create the connection. */
  connector->add_connection(elem, name, weight);        //OVERLOAD CALL: add_connection: connector.c(connector_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class)

}


/*
  * void connect_column_to_column(layer_class* source, int s_index,
  *
  *  Connect output unit of <source> to sensory unit of <dest>
  *
  */

void connect_column_to_column(layer_class* source, int s_index,
			 layer_class* dest, int d_index,
			 float weight)

{
				/* Get sensor element info. */
  name_class* name = source->get_column_name(s_index);
  if(!name)
    {
      cout nl "connect_column_to_column() : error creating connection" nl;
      exit(1);
    }
  nsl_data* elem = source->get_column_output(s_index);

  if(!elem)
    {
      cout nl "connect_column_to_column() : error creating connection" nl;
      exit(1);
    }

				/* Get a pointer to the connector */
  connector_class* connector = dest->get_column_connector(d_index);

  if(!connector)		/* Bogus connector */
    {
      cout nl << "connect_column_to_column() : " << 
	"Error creating connection" nl <<
	  "Destination layer: " << connector->get_name(d_index) nl <<        //OVERLOAD CALL: get_name: column.c(column_class), connector.c(connector_class), gate.c(gate_class), layer.c(layer_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class), sensor.c(sensor_class)
	    "index: " << d_index nl;
      cout << "Source: " << name nl <<
	"index: " << s_index nl nl;
      exit(1);
    }
				/* Create the connection. */
  connector->add_connection(elem, name, weight);        //OVERLOAD CALL: add_connection: connector.c(connector_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class)

}


/*
  * void connect_column_to_column(layer_class* source, int s_index,
  *
  *  Connect output unit of <source> to sensory unit of <dest>
  *
  */

void connect_column_to_connector(layer_class* source, int s_index,
			 connector_class* con, float weight)

{
				/* Get sensor element info. */
  name_class* name = source->get_column_name(s_index);
  if(!name)
    {
      cout nl "connect_column_to_connector() : error creating connection" nl;
      exit(1);
    }

  nsl_data* elem = source->get_column_output(s_index);
  if(!elem)
    {
      cout nl "connect_column_to_connector() : error creating connection" nl;
      exit(1);
    }

  if(!name || !elem)		/* Bogus column spec? */
    {
      cout nl << "connect_column_to_connector() : " << 
	"Error creating connection" nl <<
	  "Source: " << name nl <<
	    "index: " << s_index nl nl;
      exit(1);
    }
				/* Create the connection. */
  con->add_connection(elem, name, weight);        //OVERLOAD CALL: add_connection: connector.c(connector_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class)
}


[ return ]