mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 03:51:18 +00:00
Fix base64 and hash examples.
This commit is contained in:
@@ -1,12 +1,11 @@
|
||||
module base64;
|
||||
// Based on the C2 version.
|
||||
|
||||
error InvalidCharacter
|
||||
{
|
||||
int index;
|
||||
char c;
|
||||
}
|
||||
|
||||
errtype DecodingError
|
||||
{
|
||||
INVALID_CHARACTER
|
||||
}
|
||||
const char[64] LUT_ENC = {
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
|
||||
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
|
||||
@@ -43,7 +42,7 @@ const char PAD = '=';
|
||||
const char FIRST = '+';
|
||||
const char LAST = 'z';
|
||||
|
||||
public func void encode(char[] in, char *out)
|
||||
func void encode(char[] in, char *out)
|
||||
{
|
||||
int j = 0;
|
||||
char c = LUT_ENC[1];
|
||||
@@ -77,7 +76,7 @@ public func void encode(char[] in, char *out)
|
||||
}
|
||||
|
||||
|
||||
public func int! decode(char[] in, char* out)
|
||||
func int! decode(char[] in, char* out, int* invalid_char_index = null)
|
||||
{
|
||||
int j = 0;
|
||||
|
||||
@@ -87,7 +86,12 @@ public func int! decode(char[] in, char* out)
|
||||
if (value == PAD) return j;
|
||||
|
||||
char c = LUT_DEC[in[i]];
|
||||
if (c == ERR) return InvalidCharacter({i, value})!;
|
||||
if (c == ERR)
|
||||
{
|
||||
if (invalid_char_index) *invalid_char_index = i;
|
||||
return DecodingError.INVALID_CHARACTER!;
|
||||
}
|
||||
|
||||
|
||||
switch (i % 4)
|
||||
{
|
||||
@@ -116,13 +120,15 @@ public func int! decode(char[] in, char* out)
|
||||
|
||||
extern func void printf(char *fmt, ...);
|
||||
|
||||
public func void main()
|
||||
func void main()
|
||||
{
|
||||
char *helloworld = "Hello World\n";
|
||||
char[1000] buffer;
|
||||
encode(helloworld[0..12], &buffer);
|
||||
printf("Result: %s\n", &buffer);
|
||||
char *to_decode = "aGVsbG8gd29ybGRcMA==";
|
||||
char[*] result = b64"aGVsbG8gd29ybGRcMA==";
|
||||
decode(to_decode[0..19], &buffer);
|
||||
printf("Result: %s\n", &buffer);
|
||||
printf("Result direct: %.*s\n", 13, &result);
|
||||
}
|
||||
@@ -6,7 +6,7 @@ module hash;
|
||||
|
||||
extern func void printf(char*, ...);
|
||||
|
||||
public func void main()
|
||||
func void main()
|
||||
{
|
||||
char* y = "Hello World!";
|
||||
printf("Adler32 of %s is %x\n", y, adler32(y[0..11]));
|
||||
@@ -18,7 +18,7 @@ public func void main()
|
||||
printf("FNV64a of %s is %llx\n", y, fnv64a(y[0..11]));
|
||||
}
|
||||
|
||||
public func uint adler32(char[] data)
|
||||
func uint adler32(char[] data)
|
||||
{
|
||||
const uint ADLER_CONST = 65521;
|
||||
uint a = 1;
|
||||
@@ -31,7 +31,7 @@ public func uint adler32(char[] data)
|
||||
return (b << 16) | a;
|
||||
}
|
||||
|
||||
public func uint crc32(char[] data)
|
||||
func uint crc32(char[] data)
|
||||
{
|
||||
uint result = ~(uint)(0);
|
||||
foreach (char x : data)
|
||||
@@ -41,7 +41,7 @@ public func uint crc32(char[] data)
|
||||
return ~result;
|
||||
}
|
||||
|
||||
public func ulong crc64(char[] data)
|
||||
func ulong crc64(char[] data)
|
||||
{
|
||||
ulong result = 0;
|
||||
foreach (char x : data)
|
||||
@@ -52,7 +52,7 @@ public func ulong crc64(char[] data)
|
||||
}
|
||||
|
||||
|
||||
public func uint fnv32(char[] data)
|
||||
func uint fnv32(char[] data)
|
||||
{
|
||||
uint h = 0x811c9dc5;
|
||||
foreach (char x : data)
|
||||
@@ -62,7 +62,7 @@ public func uint fnv32(char[] data)
|
||||
return h;
|
||||
}
|
||||
|
||||
public func ulong fnv64(char[] data)
|
||||
func ulong fnv64(char[] data)
|
||||
{
|
||||
ulong h = 0xcbf29ce484222325;
|
||||
foreach (char x : data)
|
||||
@@ -72,7 +72,7 @@ public func ulong fnv64(char[] data)
|
||||
return h;
|
||||
}
|
||||
|
||||
public func uint fnv32a(char[] data)
|
||||
func uint fnv32a(char[] data)
|
||||
{
|
||||
uint h = 0x811c9dc5;
|
||||
foreach (char x : data)
|
||||
@@ -82,7 +82,7 @@ public func uint fnv32a(char[] data)
|
||||
return h;
|
||||
}
|
||||
|
||||
public func ulong fnv64a(char[] data)
|
||||
func ulong fnv64a(char[] data)
|
||||
{
|
||||
ulong h = 0xcbf29ce484222325;
|
||||
foreach (char x : data)
|
||||
@@ -92,7 +92,7 @@ public func ulong fnv64a(char[] data)
|
||||
return h;
|
||||
}
|
||||
|
||||
const uint[256] CRC32_TABLE = {
|
||||
private const uint[256] CRC32_TABLE = {
|
||||
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
|
||||
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
|
||||
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
|
||||
@@ -159,7 +159,7 @@ const uint[256] CRC32_TABLE = {
|
||||
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
|
||||
};
|
||||
|
||||
const ulong[256] CRC64_TABLE = {
|
||||
private const ulong[256] CRC64_TABLE = {
|
||||
0x0000000000000000, 0x7ad870c830358979,
|
||||
0xf5b0e190606b12f2, 0x8f689158505e9b8b,
|
||||
0xc038e5739841b68f, 0xbae095bba8743ff6,
|
||||
|
||||
Reference in New Issue
Block a user