add C functions for map lengthPrefix

This commit is contained in:
Michael Sippel 2025-02-05 11:25:53 +01:00
parent 10dab73876
commit e07b3585f9
Signed by: senvas
GPG key ID: F96CF119C34B64A6
6 changed files with 81 additions and 13 deletions

View file

@ -1,5 +1,5 @@
LIB_DIR=$(shell pwd)/lib
TARGETS=lib/libmorph_length-prefix.so lib/libmorph_posint.so test
TARGETS=lib/libmorph_length-prefix.so lib/libmorph_posint.so
all: $(TARGETS)

View file

@ -23,7 +23,6 @@ void length_prefix_uint8_array_dump(
struct LengthPrefixUInt8Array const * data
);
/* UInt64 */
struct LengthPrefixUInt64Array {
@ -46,6 +45,25 @@ void length_prefix_uint64_array_dump(
struct LengthPrefixUInt64Array const * data
);
/*
* Map
*/
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
);
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
);
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
);
/*
* Morphisms

View file

@ -3,22 +3,22 @@
#include <morphisms/length-prefix.h>
int morph_digit_as_char_to_uint8(
uint64_t const radix,
//uint64_t const radix,
uint8_t const * restrict src,
uint8_t * restrict dst
);
int morph_digit_as_char_to_uint64(
uint64_t const radix,
//uint64_t const radix,
uint8_t const * restrict src,
uint64_t * restrict dst
);
int morph_digit_as_uint8_to_char(
uint64_t const radix,
//uint64_t const radix,
uint8_t const * restrict src,
uint8_t * restrict dst
);
int morph_digit_as_uint64_to_char(
uint64_t const radix,
//uint64_t const radix,
uint64_t const * restrict src,
uint8_t * restrict dst
);

View file

@ -22,10 +22,12 @@ int main() {
{
struct LengthPrefixUInt8Array * src = (void*) bufB;
struct LengthPrefixUInt64Array * dst = (void*) bufA;
length_prefix_array_map_8_to_64( morph_digit_as_char_to_uint64, src, dst );
/*
dst->len = src->len;
for( uint64_t i = 0; i < src->len; ++i )
morph_digit_as_char_to_uint64( &src->items[i], &dst->items[i] );
*/
}
// morph to
@ -63,9 +65,12 @@ int main() {
struct LengthPrefixUInt64Array * src = (void*) bufB;
struct LengthPrefixUInt8Array * dst = (void*) bufA;
length_prefix_array_map_64_to_8( morph_digit_as_uint64_to_char, src, dst );
/*
dst->len = src->len;
for( uint64_t i = 0; i < src->len; ++i )
morph_digit_as_uint64_to_char( &src->items[i], &dst->items[i] );
*/
}
// morph to

View file

@ -28,6 +28,51 @@ int length_prefix_uint64_array_reverse(
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
) {

View file

@ -2,7 +2,7 @@
#include <morphisms/length-prefix.h>
int morph_digit_as_char_to_uint8(
uint64_t const radix,
//uint64_t const radix,
uint8_t const * restrict src,
uint8_t * restrict dst
) {
@ -19,15 +19,15 @@ int morph_digit_as_char_to_uint8(
}
int morph_digit_as_char_to_uint64(
uint64_t const radix,
//uint64_t const radix,
uint8_t const * restrict src,
uint64_t * restrict dst
) {
return morph_digit_as_char_to_uint8(radix, src, dst);
return morph_digit_as_char_to_uint8(src, (void*)dst);
}
int morph_digit_as_uint8_to_char(
uint64_t const radix,
//uint64_t const radix,
uint8_t const * restrict src,
uint8_t * restrict dst
) {
@ -42,11 +42,11 @@ int morph_digit_as_uint8_to_char(
}
int morph_digit_as_uint64_to_char(
uint64_t const radix,
//uint64_t const radix,
uint64_t const * restrict src,
uint8_t * restrict dst
) {
return morph_digit_as_uint8_to_char(radix, src, dst);
return morph_digit_as_uint8_to_char((void*)src, dst);
}
/* switches endianness by reversing the digit sequence