10Duke Scale C++ Client
Loading...
Searching...
No Matches
PCTEncoder.h
1#ifndef TENDUKE_UTL_PCTENCODER_H
2#define TENDUKE_UTL_PCTENCODER_H
3
4#include <iomanip>
5#include <sstream>
6
7namespace tenduke { namespace utl {
8
11class PCTEncoder
12{
13public:
14 virtual ~PCTEncoder() = default;
15
16 explicit PCTEncoder()
17 : result(), cleanStreamState(nullptr)
18 {
19 cleanStreamState.copyfmt(result);
20 }
21
22 virtual std::string encode(const std::string &value)
23 {
24 for (const auto c : value) {
25 if (shouldEncode(c)) {
26 pctEncode(c);
27 }
28 else {
29 result << c;
30 }
31 }
32 return result.str();
33 }
34protected:
35 virtual bool shouldEncode(char c)
36 {
37 return true;
38 }
39
40 virtual void pctEncode(char c)
41 {
42 result << '%'
43 << std::hex
44 << std::uppercase
45 << std::setw(2)
46 << std::setfill('0')
47 << static_cast<int>(static_cast<unsigned char>(c));
48
49 result.copyfmt(cleanStreamState);
50 }
51
52 std::ostringstream result;
53private:
54 std::ios cleanStreamState;
55};
56
57}}
58
59#endif //TENDUKE_UTL_PCTENCODER_H
Utilities.
Definition Base64Decoder.h:10
Root for classes, functions and globals of 10Duke C++ Client.
Definition AbstractClientFactory.h:16