📄 node.c
字号:
#include <stdio.h>#include <fstream.h>#include <string.h>#include <iostream.h>#include <stdlib.h>#include "Node.h"Node::Node(void) { strcpy(name, ""); id = -1; numNeighbours = -1; outMessages = NULL; portNumbers = NULL; neighbours = NULL;}Node::Node(const char *name, int id, int numNeighbours) { strcpy((*this).name, name); (*this).id = id; (*this).numNeighbours = numNeighbours; neighbours = new Node*[numNeighbours]; portNumbers = new int[numNeighbours]; // instantiate AND initialize the array for (int i = 0; i < numNeighbours; i++) { portNumbers[i] = -1; } outMessages = new double*[numNeighbours];}Node::~Node(void) { delete []outMessages; outMessages = NULL; delete []portNumbers; portNumbers = NULL; delete []neighbours; neighbours = NULL;}void Node::connect(Node *node1, Node *node2, int port1, int port2, int alphabetSize) { // set the pointers (*node1).neighbours[port1] = node2; (*node2).neighbours[port2] = node1; // set the neighbour port numbers (*node1).portNumbers[port1] = port2; (*node2).portNumbers[port2] = port1; // instantiate arrays for the messages according to the alphabet size (*node1).outMessages[port1] = new double[alphabetSize]; // instantiate AND initialize the array for (int i = 0; i < alphabetSize; i++) { (*node1).outMessages[port1][i] = 0.0; //1.0/alphabetSize; } (*node2).outMessages[port2] = new double[alphabetSize]; for (i = 0; i < alphabetSize; i++) { (*node2).outMessages[port2][i] = 0.0; //1.0/alphabetSize; }}int Node::disconnect(Node *node1, Node *node2) { int index1 = -1; int index2 = -1; for (int i = 0; i < (*node1).numNeighbours; i++) { if ((*node1).neighbours[i] == node2) { index1 = i; break; } } for (i = 0; i < (*node2).numNeighbours; i++) { if ((*node2).neighbours[i] == node1) { index2 = i; break; } } if ((index1 != -1) && (index2 != -1) && ((*node1).portNumbers[index1] != -1) && ((*node2).portNumbers[index2] != -1)) { (*node1).portNumbers[index1] = -1; (*node2).portNumbers[index2] = -1; delete [](*node1).outMessages[index1]; delete [](*node2).outMessages[index2]; return (0); } else { return (-1); }}int Node::disconnect(int port) { return (disconnect(this, neighbours[port]));}double *Node::getOutMessage(int port) { return (outMessages[port]);}void Node::updateAll(void) { for (int i = 0; i < numNeighbours; i++) { update(i); }}const char *Node::getName(void) { return (name);}int Node::getID(void) { return (id);}int Node::getNumNeighbours(void) { return (numNeighbours);}int Node::getPortNumber(int neighbour) { return (portNumbers[neighbour]);}void Node::draw(void) { printf("NODE: %s, %d\n", name, id); printf("-------------------------------\n"); printf("PORT NEIGHBOUR\n"); for (int i = 0; i < numNeighbours; i++) { printf("%d %s\n", i, (*neighbours[i]).name); } printf("\n");}void Node::test(void) {// Node *node1, *node2, *node3;// node1 = new Node("A", 1, 1);// node2 = new Node("B", 2, 1);// node3 = new Node("C", 3, 2);// Node::connect(node1, node3, 0, 0, 2);// Node::connect(node2, node3, 0, 1, 2);// (*node1).drawNode();// (*node2).drawNode();// (*node3).drawNode();// delete node1;// node1 = NULL;// delete node2;// node2 = NULL;// delete node3;// node3 = NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -