-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHuffmanNode.cpp
108 lines (90 loc) · 2.24 KB
/
HuffmanNode.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "HuffmanNode.h"
namespace CHNJAR003
{
HuffmanNode::HuffmanNode()
{
frequency = 0;
character = 0;
leftChild = nullptr;
rightChild = nullptr;
}
HuffmanNode::~HuffmanNode()
{
frequency = -1;
leftChild = nullptr;
rightChild = nullptr;
}
HuffmanNode::HuffmanNode(const HuffmanNode &rhs) : frequency(rhs.frequency),
character(rhs.character), rightChild(rhs.rightChild), leftChild(rhs.leftChild)
{
}
HuffmanNode::HuffmanNode(HuffmanNode &&rhs) : frequency(rhs.frequency), character(rhs.character), rightChild(rhs.rightChild), leftChild(rhs.leftChild)
{
rhs.rightChild = nullptr;
rhs.leftChild = nullptr;
rhs.frequency = -1;
rhs.character = 0;
}
HuffmanNode &HuffmanNode::operator=(const HuffmanNode &rhs)
{
if (this != &rhs)
{
frequency = rhs.frequency;
character = rhs.character;
rightChild = rhs.rightChild;
leftChild = rhs.leftChild;
}
return *this; //return a reference to the current object
}
HuffmanNode &HuffmanNode::operator=(HuffmanNode &&rhs)
{
if (this != &rhs)
{
character = std::move(rhs.character);
frequency = rhs.frequency;
rhs.frequency = -1;
leftChild = rhs.leftChild;
rightChild = rhs.rightChild;
rhs.leftChild = nullptr;
rhs.rightChild = nullptr;
rhs.character = 0;
}
return *this; //return a reference to the current object
}
void HuffmanNode::setCharacter(char c)
{
character = c;
}
void HuffmanNode::setFrequency(int f)
{
frequency = f;
}
void HuffmanNode::setLeftChild(const HuffmanNode &left)
{
leftChild = std::shared_ptr<HuffmanNode>(new HuffmanNode(left));
}
void HuffmanNode::setRightChild(const HuffmanNode &right)
{
rightChild = std::shared_ptr<HuffmanNode>(new HuffmanNode(right));
}
char HuffmanNode::getCharacter(void) const
{
return character;
}
int HuffmanNode::getFrequency(void) const
{
return frequency;
}
HuffmanNode *HuffmanNode::getLeftChild() const
{
return leftChild.get();
}
HuffmanNode *HuffmanNode::getRightChild() const
{
return rightChild.get();
}
bool operator<(const HuffmanNode &a, const HuffmanNode &b)
{
return a.frequency > b.frequency;
}
} // namespace CHNJAR003