MCPcopy Create free account
hub / github.com/carbonengine/trinity / Decode

Function Decode

trinity/Resources/Procedural/Base64Encoding.cpp:9–75  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7{
8
9std::vector<uint8_t> Decode( const std::string_view& str )
10{
11 std::vector<uint8_t> result;
12 result.reserve( ( str.size() / 4 ) * 3 );
13
14 auto Index = []( char p ) -> uint8_t {
15 if( p >= 'A' && p <= 'Z' )
16 {
17 return p - 'A';
18 }
19 else if( p >= 'a' && p <= 'z' )
20 {
21 return p - 'a' + 26;
22 }
23 else if( p >= '0' && p <= '9' )
24 {
25 return p - '0' + 52;
26 }
27 else if( p == '+' )
28 {
29 return 62;
30 }
31 else if( p == '/' )
32 {
33 return 63;
34 }
35 return 64;
36 };
37
38 char quad[4];
39 size_t q = 0;
40
41 for( size_t i = 0; i < str.size() && str[i] != '='; i++ )
42 {
43 quad[q] = Index( str[i] );
44 if( quad[q] == 64 )
45 {
46 return {};
47 }
48 q++;
49 if( q == 4 )
50 {
51 q = 0;
52 result.push_back( ( ( quad[0] << 2 ) | ( quad[1] >> 4 ) ) & 0xFF );
53 result.push_back( ( ( quad[1] & 0x0F ) << 4 ) | ( quad[2] >> 2 ) );
54 result.push_back( ( ( quad[2] & 0x03 ) << 6 ) | quad[3] );
55 }
56 }
57 if( q > 0 )
58 {
59 for( size_t i = q; i < 4; i++ )
60 {
61 quad[i] = 0;
62 }
63 result.push_back( ( ( quad[0] << 2 ) | ( quad[1] >> 4 ) ) & 0xFF );
64 if( q > 2 )
65 {
66 result.push_back( ( ( quad[1] & 0x0F ) << 4 ) | ( quad[2] >> 2 ) );

Callers 2

GradientPathToCurveFunction · 0.85
RasterizeGradientFunction · 0.85

Calls 1

sizeMethod · 0.80

Tested by

no test coverage detected