Selaa lähdekoodia

naive diff code implementation/reference in c.

haven't managed to write this in rust yet. it's... complicated.
Lucas Stadler 11 vuotta sitten
vanhempi
commit
1cc5ebec6c
2 muutettua tiedostoa jossa 49 lisäystä ja 0 poistoa
  1. 3 0
      rust/Makefile
  2. 46 0
      rust/diff_code.c

+ 3 - 0
rust/Makefile

@ -1,3 +1,6 @@
1
diff_code: diff_code.c
2
	gcc -std=c99 -o diff_code diff_code.c
3
1 4
keylog: keylog.rs libkeylog_xlib.so
2 5
	rustc -L rust-xlib -L . keylog.rs
3 6

+ 46 - 0
rust/diff_code.c

@ -0,0 +1,46 @@
1
#include <stdio.h>
2
#include <stdlib.h>
3
4
int* diff_encode(int* values, int length) {
5
	if (length < 1) {
6
		return NULL;
7
	}
8
9
	int* result = malloc(sizeof(int) * length);
10
	int last = result[0] = values[0];
11
	for (int i = 1; i < length; i++) {
12
		result[i] = values[i] - last;
13
		last = values[i];
14
	}
15
16
	return result;
17
}
18
19
int* diff_decode(int* encoded, int length) {
20
	if (length < 1) {
21
		return NULL;
22
	}
23
24
	int* result = malloc(sizeof(int) * length);
25
	int last = result[0] = encoded[0];
26
	for (int i = 1; i < length; i++) {
27
		result[i] = last + encoded[i];
28
		last = result[i];
29
	}
30
31
	return result;
32
}
33
34
int main() {
35
	int years[] = {1913, 2020, 1931, 1947, 1978, 1970, 2001, 2023, 1801, 2807};
36
	int length = 10;
37
38
	int* encoded = diff_encode(years, length);
39
	int* decoded = diff_decode(encoded, length);
40
41
	for (int i = 0; i < length; i++) {
42
		printf("%d -> %d -> %d\n", years[i], encoded[i], decoded[i]);
43
	}
44
45
	return 0;
46
}