- adapt Makefile for code size benchmark - write build files to 'target' directory
137 lines
3.3 KiB
C
137 lines
3.3 KiB
C
#include <stdio.h>
|
|
#include <stdint.h>
|
|
|
|
#include <array/length-prefix.h>
|
|
|
|
void length_prefix_uint64_array_clear(
|
|
struct LengthPrefixUInt64Array * data
|
|
) {
|
|
data->len = 0;
|
|
}
|
|
|
|
void length_prefix_uint64_array_push(
|
|
struct LengthPrefixUInt64Array * data,
|
|
uint64_t value
|
|
) {
|
|
data->items[ data->len ] = value;
|
|
data->len += 1;
|
|
}
|
|
|
|
int length_prefix_uint64_array_reverse(
|
|
struct LengthPrefixUInt64Array const * restrict src,
|
|
struct LengthPrefixUInt64Array * restrict dst
|
|
) {
|
|
dst->len = src->len;
|
|
for(uint64_t i = 0; i < src->len; ++i) {
|
|
dst->items[i] = src->items[src->len - i - 1];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int length_prefix_array_map_8_to_8(
|
|
int (*f) ( uint8_t const * restrict, uint8_t * restrict ),
|
|
struct LengthPrefixUInt8Array const * restrict src,
|
|
struct LengthPrefixUInt8Array * restrict dst
|
|
) {
|
|
dst->len = src->len;
|
|
for( uint64_t i = 0; i < src->len; ++i ) {
|
|
int result = f( &src->items[i], &dst->items[i] );
|
|
if( result ) {
|
|
return result;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int length_prefix_array_map_64_to_64(
|
|
int (*f) ( uint64_t const * restrict, uint64_t * restrict ),
|
|
struct LengthPrefixUInt64Array const * restrict src,
|
|
struct LengthPrefixUInt64Array * restrict dst
|
|
) {
|
|
dst->len = src->len;
|
|
for( uint64_t i = 0; i < src->len; ++i ) {
|
|
int result = f( &src->items[i], &dst->items[i] );
|
|
if( result ) {
|
|
return result;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int length_prefix_array_map_8_to_64(
|
|
int (*f) ( uint8_t const * restrict, uint64_t * restrict ),
|
|
struct LengthPrefixUInt8Array const * restrict src,
|
|
struct LengthPrefixUInt64Array * restrict dst
|
|
) {
|
|
dst->len = src->len;
|
|
for( uint64_t i = 0; i < src->len; ++i ) {
|
|
int result = f( &src->items[i], &dst->items[i] );
|
|
if( result ) {
|
|
return result;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int length_prefix_array_map_64_to_8(
|
|
int (*f) ( uint64_t const * restrict, uint8_t * restrict ),
|
|
struct LengthPrefixUInt64Array const * restrict src,
|
|
struct LengthPrefixUInt8Array * restrict dst
|
|
) {
|
|
dst->len = src->len;
|
|
for( uint64_t i = 0; i < src->len; ++i ) {
|
|
int result = f( &src->items[i], &dst->items[i] );
|
|
if( result ) {
|
|
return result;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void length_prefix_uint64_array_dump(
|
|
struct LengthPrefixUInt64Array const * data
|
|
) {
|
|
printf("Len = %d, [", data->len);
|
|
for( uint64_t i = 0; i < data->len; ++i ) {
|
|
printf("%d; ", data->items[i]);
|
|
}
|
|
printf("]\n");
|
|
}
|
|
|
|
|
|
|
|
|
|
void length_prefix_uint8_array_clear(
|
|
struct LengthPrefixUInt8Array * data
|
|
) {
|
|
data->len = 0;
|
|
}
|
|
|
|
void length_prefix_uint8_array_push(
|
|
struct LengthPrefixUInt8Array * data,
|
|
uint8_t value
|
|
) {
|
|
data->items[ data->len ] = value;
|
|
data->len += 1;
|
|
}
|
|
|
|
int length_prefix_uint8_array_reverse(
|
|
struct LengthPrefixUInt8Array const * restrict src,
|
|
struct LengthPrefixUInt8Array * restrict dst
|
|
) {
|
|
dst->len = src->len;
|
|
for(uint64_t i = 0; i < src->len; ++i) {
|
|
dst->items[i] = src->items[src->len - i - 1];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void length_prefix_uint8_array_dump(
|
|
struct LengthPrefixUInt8Array const * data
|
|
) {
|
|
printf("Len = %d, [", data->len);
|
|
for( uint64_t i = 0; i < data->len; ++i ) {
|
|
printf("%d; ", data->items[i]);
|
|
}
|
|
printf("]\n");
|
|
}
|