/* * 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) }