libfly  6.2.2
C++20 utility library for Linux, macOS, and Windows
types.hpp
1 #pragma once
2 
3 #include <cstdint>
4 #include <queue>
5 #include <vector>
6 
7 namespace fly::coders {
8 
9 using symbol_type = std::uint8_t;
10 using frequency_type = std::uint64_t;
11 
12 using code_type = std::uint16_t;
13 using length_type = std::uint8_t;
14 
15 struct HuffmanNode;
16 struct HuffmanNodeComparator;
17 
18 using HuffmanNodeQueue =
19  std::priority_queue<HuffmanNode *, std::vector<HuffmanNode *>, HuffmanNodeComparator>;
20 
30 {
34  HuffmanNode() noexcept;
35 
42  HuffmanNode &operator=(HuffmanNode &&node) noexcept;
43 
50  void become_symbol(symbol_type symbol, frequency_type frequency);
51 
59  void become_intermediate(HuffmanNode *left, HuffmanNode *right);
60 
61  symbol_type m_symbol;
62  frequency_type m_frequency;
63 
64  HuffmanNode *m_left;
65  HuffmanNode *m_right;
66 
67 private:
68  HuffmanNode(const HuffmanNode &) = delete;
69  HuffmanNode &operator=(const HuffmanNode &) = delete;
70 };
71 
80 {
81  bool operator()(const HuffmanNode *left, const HuffmanNode *right);
82 };
83 
91 {
95  HuffmanCode() noexcept;
96 
104  HuffmanCode(symbol_type symbol, code_type code, length_type length) noexcept;
105 
112  HuffmanCode(HuffmanCode &&code) noexcept;
113 
120  HuffmanCode &operator=(HuffmanCode &&code) noexcept;
121 
130  friend bool operator<(const HuffmanCode &left, const HuffmanCode &right);
131 
132  symbol_type m_symbol;
133  code_type m_code;
134  length_type m_length;
135 
136 private:
137  HuffmanCode(const HuffmanCode &) = delete;
138  HuffmanCode &operator=(const HuffmanCode &) = delete;
139 };
140 
141 } // namespace fly::coders
Definition: types.hpp:91
friend bool operator<(const HuffmanCode &left, const HuffmanCode &right)
Definition: types.cpp:80
HuffmanCode & operator=(HuffmanCode &&code) noexcept
Definition: types.cpp:70
HuffmanCode() noexcept
Definition: types.cpp:49
Definition: types.hpp:80
Definition: types.hpp:30
void become_symbol(symbol_type symbol, frequency_type frequency)
Definition: types.cpp:25
HuffmanNode & operator=(HuffmanNode &&node) noexcept
Definition: types.cpp:11
HuffmanNode() noexcept
Definition: types.cpp:6
void become_intermediate(HuffmanNode *left, HuffmanNode *right)
Definition: types.cpp:34