Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Base64Encoder.cs
Go to the documentation of this file.
2
3internal sealed class Base64Encoder : ByteEncoder
4{
5 private readonly int _lineLength;
6
8
9 private static ReadOnlySpan<byte> Base64EncodeMap => "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="u8;
10
11 internal override WriteStateInfoBase WriteState => _writeState;
12
13 protected override bool HasSpecialEncodingForCRLF => false;
14
15 internal Base64Encoder(Base64WriteStateInfo writeStateInfo, int lineLength)
16 {
17 _writeState = writeStateInfo;
18 _lineLength = lineLength;
19 }
20
21 protected override void AppendEncodedCRLF()
22 {
23 throw new InvalidOperationException();
24 }
25
26 protected override bool LineBreakNeeded(byte b)
27 {
28 return LineBreakNeeded(1);
29 }
30
31 protected override bool LineBreakNeeded(byte[] bytes, int count)
32 {
33 return LineBreakNeeded(count);
34 }
35
36 private bool LineBreakNeeded(int numberOfBytesToAppend)
37 {
38 if (_lineLength == -1)
39 {
40 return false;
41 }
42 int num;
43 int num2;
44 switch (_writeState.Padding)
45 {
46 case 2:
47 num = 2;
48 num2 = 3;
49 break;
50 case 1:
51 num = 1;
52 num2 = 2;
53 break;
54 case 0:
55 num = 0;
56 num2 = 0;
57 break;
58 default:
59 num = 0;
60 num2 = 0;
61 break;
62 }
63 int num3 = numberOfBytesToAppend - num;
64 if (num3 <= 0)
65 {
66 return false;
67 }
68 int num4 = num3 / 3 + ((num3 % 3 != 0) ? 1 : 0);
69 int num5 = num2 + num4 * 4;
70 return WriteState.CurrentLineLength + num5 + _writeState.FooterLength > _lineLength;
71 }
72
73 protected override int GetCodepointSize(string value, int i)
74 {
75 if (!IsSurrogatePair(value, i))
76 {
77 return 1;
78 }
79 return 2;
80 }
81
82 public override void AppendPadding()
83 {
84 switch (_writeState.Padding)
85 {
86 case 2:
90 _writeState.Padding = 0;
91 break;
92 case 1:
95 _writeState.Padding = 0;
96 break;
97 case 0:
98 break;
99 }
100 }
101
102 protected override void ApppendEncodedByte(byte b)
103 {
104 switch (_writeState.Padding)
105 {
106 case 0:
107 _writeState.Append(Base64EncodeMap[(b & 0xFC) >> 2]);
108 _writeState.LastBits = (byte)((b & 3) << 4);
109 _writeState.Padding = 2;
110 break;
111 case 2:
113 _writeState.LastBits = (byte)((b & 0xF) << 2);
114 _writeState.Padding = 1;
115 break;
116 case 1:
119 _writeState.Padding = 0;
120 break;
121 }
122 }
123}
override int GetCodepointSize(string value, int i)
static ReadOnlySpan< byte > Base64EncodeMap
override void AppendEncodedCRLF()
override bool LineBreakNeeded(byte b)
override void ApppendEncodedByte(byte b)
override bool HasSpecialEncodingForCRLF
bool LineBreakNeeded(int numberOfBytesToAppend)
override bool LineBreakNeeded(byte[] bytes, int count)
Base64Encoder(Base64WriteStateInfo writeStateInfo, int lineLength)
readonly Base64WriteStateInfo _writeState
bool IsSurrogatePair(string value, int i)