Skip to content

Commit bf7a930

Browse files
committed
graph Tracer function
1 parent 053318f commit bf7a930

1 file changed

Lines changed: 57 additions & 45 deletions

File tree

decoder.cpp

Lines changed: 57 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
#include "decoder.h"
22
#include <iostream>
33
#include <bitset>
4+
/*
5+
// No. of state check
6+
We have used unsigned __int8 data type value in this simulation,
7+
it is obvious that it cannot be checked more than 4 times
8+
(with 8 bits, 4 bits can be decoded).
9+
*/
10+
#define MAX_STATE_CEHCK 4
411

512
decoder::decoder() {
613
/* create new object and initial values */
@@ -9,55 +16,67 @@ decoder::decoder() {
916
<< std::endl;
1017
}
1118

12-
__int8 decoder::decode(__int8 recv) {
13-
int a[4][2] = { {0,2},{0,2},{1,3},{1,3} };
14-
15-
//this->distanceCal(0, 0, recv);
16-
//for (int i = 0; i < 4; i++) {
17-
// // rows = 00 , 10, 01, 11
18-
// __int8 bit = (recv & 0xE0) >> 6;
19-
// for (int j = 0; j < rout[i].size(); j++) {
20-
// for (int k = 0; k < 2; k++) {
21-
// std::cout << static_cast<int>(this->hammingDistance(a[j][k],bit)) << std::endl;
22-
// }
23-
// }
24-
// std::cout << "new colml" << std::endl;
25-
// recv = (recv << 2);
26-
//}
19+
unsigned __int8 decoder::decode(unsigned __int8 recv) {
20+
std::cout << "decoder : " << std::bitset<8>(recv) << std::endl;
21+
node * n = graphTracer(0,recv,1);
22+
for (int i = 1; n->getNextFirstStateNode() != nullptr; i++) {
23+
std::cout << "i : " << i << " | " << std::bitset<8>(n->getNextFirstStateNodeDistance()&0x03) << std::endl;
24+
std::cout << "i : " << i << " | " << std::bitset<8>(n->getNextScondStateNodeDistance() & 0x03) << std::endl;
25+
n = n->getNextFirstStateNode();
26+
}
2727
return 0;
2828
}
2929

30-
__int8 decoder::distanceCal(int level, __int8 state, __int8 bit) {
31-
/*
32-
if (level == 5) {
33-
return 0;
30+
node* decoder::graphTracer(unsigned __int8 state, unsigned __int8 data, unsigned __int8 level){
31+
// return point | break point of recursive loop
32+
if (level == MAX_STATE_CEHCK + 2) {
33+
return nullptr;
3434
}
35-
switch(state){
35+
36+
// set next states value
37+
// -1 == null value | initial value
38+
unsigned __int8 nextFirstState = -1,
39+
nextFirstStateIO = -1,
40+
nextScondState = -1,
41+
nextScondStateIO = -1;
42+
43+
switch (state){
3644
case 0:
37-
std::cout << this->distanceCal(level + 1, 0, (bit << 2) & 0xE0) + this->hammingDistance(state, (bit & 0xE0) >> 6) << std::endl;
38-
std::cout << this->distanceCal(level + 1, 2, (bit << 2) & 0xE0) + this->hammingDistance(state, (bit & 0xE0) >> 6) << std::endl;
39-
break;
40-
case 1:
41-
std::cout << this->distanceCal(level + 1, 0, (bit << 2) & 0xE0) + this->hammingDistance(state, (bit & 0xE0) >> 6) << std::endl;
42-
std::cout << this->distanceCal(level + 1, 2, (bit << 2) & 0xE0) + this->hammingDistance(state, (bit & 0xE0) >> 6) << std::endl;
45+
nextFirstState = 0;
46+
nextFirstStateIO = 0,
47+
nextScondState = 2,
48+
nextScondStateIO = 3;
4349
break;
4450
case 2:
45-
std::cout << this->distanceCal(level + 1, 1, (bit << 2) & 0xE0) + this->hammingDistance(state, (bit & 0xE0) >> 6) << std::endl;
46-
std::cout << this->distanceCal(level + 1, 3, (bit << 2) & 0xE0) + this->hammingDistance(state, (bit & 0xE0) >> 6) << std::endl;
51+
nextFirstState = 1;
52+
nextFirstStateIO = 1,
53+
nextScondState = 3,
54+
nextScondStateIO = 2;
55+
break;
56+
case 1:
57+
nextFirstState = 0;
58+
nextFirstStateIO = 3,
59+
nextScondState = 2,
60+
nextScondStateIO = 0;
4761
break;
4862
case 3:
49-
std::cout << this->distanceCal(level + 1, 1, (bit << 2) & 0xE0) + this->hammingDistance(state, (bit & 0xE0) >> 6) << std::endl;
50-
std::cout << this->distanceCal(level + 1, 3, (bit << 2) & 0xE0) + this->hammingDistance(state, (bit & 0xE0) >> 6) << std::endl;
63+
nextFirstState = 1;
64+
nextFirstStateIO = 2,
65+
nextScondState = 3,
66+
nextScondStateIO = 1;
5167
break;
52-
default:
53-
break;
5468
}
55-
*/
56-
return 0;
69+
node* stateNode = new node(state & 0x03);
70+
stateNode->setNextFirstStateNode(*this->graphTracer(nextFirstState, data, level + 1));
71+
stateNode->setNextScondStateNode(*this->graphTracer(nextScondState, data, level + 1));
72+
stateNode->setNextFirstStateNodeDistance(this->hammingDistance(data,nextFirstStateIO));
73+
stateNode->setNextScondStateNodeDistance(this->hammingDistance(data,nextScondStateIO));
74+
return stateNode;
5775
}
58-
__int8 decoder::hammingDistance(__int8 x, __int8 y) {
59-
int distance = 0;
60-
int xorResult = x ^ y; // XOR of the two integers
76+
77+
unsigned __int8 decoder::hammingDistance(unsigned __int8 x, unsigned __int8 y) {
78+
__int8 distance = 0;
79+
unsigned __int8 xorResult = x ^ y; // XOR of the two unsigned __int8
6180
// Count the number of set bits in the XOR result
6281
while (xorResult) {
6382
distance += xorResult & 1;
@@ -66,14 +85,7 @@ __int8 decoder::hammingDistance(__int8 x, __int8 y) {
6685
return distance;
6786
}
6887

69-
void decoder::logLevel(__int8 state, __int8 recv, __int8 decoded, __int8 nextState) {
70-
std::cout << std::endl <<
71-
"[---- bit log ----]" << std::endl <<
72-
" state : " << std::bitset<2>(state) << std::endl <<
73-
" nextState : " << std::bitset<2>(nextState) << std::endl <<
74-
" recv : " << std::bitset<1>(recv) << std::endl <<
75-
" encoded : " << std::bitset<2>(decoded) << std::endl <<
76-
"[---- ----]" << std::endl;
88+
void decoder::logLevel() {
7789
}
7890

7991
decoder :: ~decoder() {

0 commit comments

Comments
 (0)