libfly  6.2.2
C++20 utility library for Linux, macOS, and Windows
coder.hpp
1 #pragma once
2 
3 #include <filesystem>
4 #include <istream>
5 #include <ostream>
6 #include <string>
7 
8 namespace fly {
9 class BitStreamReader;
10 class BitStreamWriter;
11 } // namespace fly
12 
13 namespace fly::coders {
14 
22 class Encoder
23 {
24 public:
28  virtual ~Encoder() = default;
29 
38  virtual bool encode_string(const std::string &decoded, std::string &encoded);
39 
48  virtual bool
49  encode_file(const std::filesystem::path &decoded, const std::filesystem::path &encoded);
50 
51 protected:
60  virtual bool encode_internal(std::istream &decoded, std::ostream &encoded) = 0;
61 };
62 
70 class BinaryEncoder : public Encoder
71 {
72 protected:
73  bool encode_internal(std::istream &decoded, std::ostream &encoded) final;
74 
83  virtual bool encode_binary(std::istream &decoded, fly::BitStreamWriter &encoded) = 0;
84 };
85 
93 class Decoder
94 {
95 public:
99  virtual ~Decoder() = default;
100 
109  bool decode_string(const std::string &encoded, std::string &decoded);
110 
119  bool decode_file(const std::filesystem::path &encoded, const std::filesystem::path &decoded);
120 
121 protected:
130  virtual bool decode_internal(std::istream &encoded, std::ostream &decoded) = 0;
131 };
132 
140 class BinaryDecoder : public Decoder
141 {
142 protected:
143  bool decode_internal(std::istream &encoded, std::ostream &decoded) final;
144 
153  virtual bool decode_binary(fly::BitStreamReader &encoded, std::ostream &decoded) = 0;
154 };
155 
156 } // namespace fly::coders
Definition: bit_stream_reader.hpp:27
Definition: bit_stream_writer.hpp:24
Definition: coder.hpp:141
bool decode_internal(std::istream &encoded, std::ostream &decoded) final
Definition: coder.cpp:164
virtual bool decode_binary(fly::BitStreamReader &encoded, std::ostream &decoded)=0
Definition: coder.hpp:71
virtual bool encode_binary(std::istream &decoded, fly::BitStreamWriter &encoded)=0
bool encode_internal(std::istream &decoded, std::ostream &encoded) final
Definition: coder.cpp:106
Definition: coder.hpp:94
virtual bool decode_internal(std::istream &encoded, std::ostream &decoded)=0
virtual ~Decoder()=default
bool decode_file(const std::filesystem::path &encoded, const std::filesystem::path &decoded)
Definition: coder.cpp:136
bool decode_string(const std::string &encoded, std::string &decoded)
Definition: coder.cpp:113
Definition: coder.hpp:23
virtual bool encode_string(const std::string &decoded, std::string &encoded)
Definition: coder.cpp:55
virtual ~Encoder()=default
virtual bool encode_internal(std::istream &decoded, std::ostream &encoded)=0
virtual bool encode_file(const std::filesystem::path &decoded, const std::filesystem::path &encoded)
Definition: coder.cpp:78