added assignment3, ex1 not working...
[sws1-1415.git] / ass3 / mart / sws1-assignment3-s4109503-s4202015 / exercise2.c
1 #include <stdlib.h>
2
3 typedef unsigned char uc;
4 typedef unsigned __int128 uint128;
5
6 void addvector(int *r, const int *a, const int *b, size_t len)
7 {
8 for(int *r2 = r; r2 < r + len;r2++, a++, b++)
9 *r2 = *a + *b;
10 }
11
12 int memcmp(const void *s1, const void *s2, size_t n)
13 {
14 for(uc *s3 = (uc*)s1, *s4 = (uc*)s2; s3 < (uc*)s1 + n; s3++, s4++)
15 if(*s3 != *s4)
16 return *s3-*s4;
17 return 0;
18 }
19
20 int memcmp_backwards(const void *s1, const void *s2, size_t n)
21 {
22 for(uc *s3 = (uc*)s1+n, *s4 = (uc*)s2+n; s3 >= (uc*)s1; s3--, s4--)
23 if(*s3 != *s4)
24 return *s3-*s4;
25 return 0;
26 }
27
28 int memcmp_fast(const void *s1, const void *s2, size_t n)
29 {
30 uint128 *s3 = (uint128 *)s1;
31 uint128 *s4 = (uint128 *)s2;
32 unsigned int blocks = n/sizeof(uint128);
33 for(; s3<((uint128*)s1)+blocks; s3++, s4++)
34 if(*s3 != *s4)
35 return memcmp(s3, s4, sizeof(uint128));
36 return memcmp(s3, s4, n % sizeof(uint128));
37 }