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
512decoder::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
7991decoder :: ~decoder () {
0 commit comments