1// :mode=c++:
2/*
3encode.h - c++ wrapper for a base64 encoding algorithm
4
5This is part of the libb64 project, and has been placed in the public domain.
6For details, see http://sourceforge.net/projects/libb64
7*/
8#ifndef BASE64_ENCODE_H
9#define BASE64_ENCODE_H
10
11#include <iostream>
12
13namespace base64
14{
15 extern "C"
16 {
17 #include "cencode.h"
18 }
19
20 struct encoder
21 {
22 base64_encodestate _state;
23 int _buffersize;
24
25 encoder(int buffersize_in = BUFFERSIZE)
26 : _buffersize(buffersize_in)
27 {
28 base64_init_encodestate(state_in: &_state);
29 }
30
31 int encode(char value_in)
32 {
33 return base64_encode_value(value_in);
34 }
35
36 int encode(const char* code_in, const int length_in, char* plaintext_out)
37 {
38 return base64_encode_block(plaintext_in: code_in, length_in, code_out: plaintext_out, state_in: &_state);
39 }
40
41 int encode_end(char* plaintext_out)
42 {
43 return base64_encode_blockend(code_out: plaintext_out, state_in: &_state);
44 }
45
46 void encode(std::istream& istream_in, std::ostream& ostream_in)
47 {
48 base64_init_encodestate(state_in: &_state);
49 //
50 const int N = _buffersize;
51 char* plaintext = new char[N];
52 char* code = new char[2*N];
53 int plainlength;
54 int codelength;
55
56 do
57 {
58 istream_in.read(s: plaintext, n: N);
59 plainlength = static_cast<int>(istream_in.gcount());
60 //
61 codelength = encode(code_in: plaintext, length_in: plainlength, plaintext_out: code);
62 ostream_in.write(s: code, n: codelength);
63 }
64 while (istream_in.good() && plainlength > 0);
65
66 codelength = encode_end(plaintext_out: code);
67 ostream_in.write(s: code, n: codelength);
68 //
69 base64_init_encodestate(state_in: &_state);
70
71 delete [] code;
72 delete [] plaintext;
73 }
74 };
75
76} // namespace base64
77
78#endif // BASE64_ENCODE_H
79
80

source code of gtk/subprojects/libsass/src/b64/encode.h