1/* -*- c++ -*-
2 SPDX-FileCopyrightText: 2002 Marc Mutz <mutz@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#ifndef KCODECS_UUENCODE_H
8#define KCODECS_UUENCODE_H
9
10#include "kcodecs.h"
11
12namespace KCodecs
13{
14/*
15 A class representing the UUEncode codec.
16*/
17class UUCodec : public Codec
18{
19public:
20 UUCodec()
21 : Codec()
22 {
23 }
24
25 ~UUCodec() override
26 {
27 }
28
29 const char *name() const override
30 {
31 return "x-uuencode";
32 }
33
34 qsizetype maxEncodedSizeFor(qsizetype insize, NewlineType newline = Codec::NewlineLF) const override
35 {
36 Q_UNUSED(newline);
37 return insize; // we have no encoder!
38 }
39
40 qsizetype maxDecodedSizeFor(qsizetype insize, NewlineType newline = Codec::NewlineLF) const override
41 {
42 // assuming all characters are part of the uuencode stream (which
43 // does almost never hold due to required linebreaking; but
44 // additional non-uu chars don't affect the output size), each
45 // 4-tupel of them becomes a 3-tupel in the decoded octet
46 // stream. So:
47 qsizetype result = ((insize + 3) / 4) * 3;
48 // but all of them may be \n, so
49 if (newline == Codec::NewlineCRLF) {
50 result *= 2; // :-o
51 }
52 return result;
53 }
54
55 Encoder *makeEncoder(NewlineType newline = Codec::NewlineLF) const override;
56
57 Decoder *makeDecoder(NewlineType newline = Codec::NewlineLF) const override;
58};
59
60} // namespace KCodecs
61
62#endif // KCODECS_UUENCODE_H
63

source code of kcodecs/src/kcodecsuuencode.h