⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 node.c

📁 根据LDPC码中码子的构造方法中的PEG算法
💻 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 + -