📄 variablenode.c
字号:
#include <iostream.h>#include <stdio.h>#include "VariableNode.h"#include "Constant.h"//#include "System.h"VariableNode::VariableNode(const char *name, int id, int numNeighbours, int size) : Node(name, id, numNeighbours) { (*this).size = size;}void VariableNode::update(int port) { if (numNeighbours > 1) { // initialization of the output message outMessages[port][0] = 0.0; // update for (int n = 0; n < numNeighbours; n++) { if (n == port) { continue; } outMessages[port][0] += (*neighbours[n]).getOutMessage(portNumbers[n])[0]; } }}void VariableNode::initAsFirstTrellisState(double *outMessageValues){ if (outMessageValues == NULL) { // assume that the zero state is prefered for (int i = 1; i < size; i++) { outMessages[0][i] = EPS; } outMessages[0][0] = 1.0 - (size - 1)*EPS; } else { for (int i = 0; i < size; i++) { outMessages[0][i] = outMessageValues[i]; } }}void VariableNode::reset(void) { for (int n = 0; n < numNeighbours; n++) { for (int i = 0; i < size; i++) { outMessages[n][i] = 0.0; // 1.0/size; } } }int VariableNode::getSize(void) { return (size);}void VariableNode::draw(void) { printf("NODE: %20s, %6d\n", name, id); printf("---------------------------------------------\n"); printf("PORT NEIGHBOUR OUTMESSAGE\n"); for (int n = 0; n < numNeighbours; n++) { printf("%3d %20s%15f\n", n, (*neighbours[n]).getName(), outMessages[n][0]); for (int i = 1; i < size; i++) { printf("%45f\n", outMessages[n][i]); } } printf("\n");}void VariableNode::draw(FILE *file) { fprintf(file, "NODE: %20s, %6d\n", name, id); fprintf(file, "---------------------------------------------\n"); fprintf(file, "PORT NEIGHBOUR OUTMESSAGE\n"); for (int n = 0; n < numNeighbours; n++) { fprintf(file, "%3d %20s%15f\n", n, (*neighbours[n]).getName(), outMessages[n][0]); for (int i = 1; i < size; i++) { fprintf(file, "%45f\n", outMessages[n][i]); } } fprintf(file, "\n");}void VariableNode::test(void) { VariableNode *node1, *node2, *node3, *node4; node1 = new VariableNode("AAA", 1, 2, 2); node2 = new VariableNode("BBB", 2, 2, 2); node3 = new VariableNode("CCC", 3, 1, 2); node4 = new VariableNode("DDD", 4, 3, 2); VariableNode::connect(node1, node4, 0, 0, 2); VariableNode::connect(node2, node4, 0, 1, 2); VariableNode::connect(node3, node4, 0, 2, 2); VariableNode::connect(node1, node2, 1, 1, 2); (*node1).draw(); (*node2).draw(); (*node3).draw(); (*node4).draw(); (*node1).reset(); (*node2).reset(); (*node3).reset(); (*node4).reset(); (*node1).draw(); (*node2).draw(); (*node3).draw(); (*node4).draw(); delete node1; node1 = NULL; delete node2; node2 = NULL; delete node3; node3 = NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -