digit morphisms: switch char to uint8_t

This commit is contained in:
Michael Sippel 2025-02-05 11:10:11 +01:00
parent 59c0ea8e57
commit 10dab73876
Signed by: senvas
GPG key ID: F96CF119C34B64A6
2 changed files with 18 additions and 29 deletions
morphisms
include/morphisms
src

View file

@ -3,32 +3,33 @@
#include <morphisms/length-prefix.h> #include <morphisms/length-prefix.h>
int morph_digit_as_char_to_uint8( int morph_digit_as_char_to_uint8(
char const * restrict src, uint64_t const radix,
uint8_t const * restrict src,
uint8_t * restrict dst uint8_t * restrict dst
); );
int morph_digit_as_char_to_uint64( int morph_digit_as_char_to_uint64(
char const * restrict src, uint64_t const radix,
uint8_t const * restrict src,
uint64_t * restrict dst uint64_t * restrict dst
); );
int morph_digit_as_uint8_to_char( int morph_digit_as_uint8_to_char(
uint64_t const radix,
uint8_t const * restrict src, uint8_t const * restrict src,
char * restrict dst uint8_t * restrict dst
); );
int morph_digit_as_uint64_to_char( int morph_digit_as_uint64_to_char(
uint64_t const radix,
uint64_t const * restrict src, uint64_t const * restrict src,
char * restrict dst uint8_t * restrict dst
); );
int morph_posint_endianness( int morph_posint_endianness(
uint64_t const radix, uint64_t const radix,
struct LengthPrefixUInt64Array const * restrict src, struct LengthPrefixUInt64Array const * restrict src,
struct LengthPrefixUInt64Array * restrict dst struct LengthPrefixUInt64Array * restrict dst
); );
int morph_posint_radix( int morph_posint_radix(
uint64_t const src_radix, uint64_t const src_radix,
uint64_t const dst_radix, uint64_t const dst_radix,
struct LengthPrefixUInt64Array const * restrict src, struct LengthPrefixUInt64Array const * restrict src,
struct LengthPrefixUInt64Array * restrict dst struct LengthPrefixUInt64Array * restrict dst
); );

View file

@ -2,7 +2,8 @@
#include <morphisms/length-prefix.h> #include <morphisms/length-prefix.h>
int morph_digit_as_char_to_uint8( int morph_digit_as_char_to_uint8(
char const * restrict src, uint64_t const radix,
uint8_t const * restrict src,
uint8_t * restrict dst uint8_t * restrict dst
) { ) {
if( *src >= '0' && *src <= '9' ) if( *src >= '0' && *src <= '9' )
@ -18,24 +19,17 @@ int morph_digit_as_char_to_uint8(
} }
int morph_digit_as_char_to_uint64( int morph_digit_as_char_to_uint64(
char const * restrict src, uint64_t const radix,
uint8_t const * restrict src,
uint64_t * restrict dst uint64_t * restrict dst
) { ) {
if( *src >= '0' && *src <= '9' ) return morph_digit_as_char_to_uint8(radix, src, dst);
*dst = *src - '0';
else if( *src >= 'a' && *src <= 'f')
*dst = 0xa + *src - 'a';
else if( *src >= 'A' && *src <= 'F')
*dst = 0xa + *src - 'A';
else
return -1;
return 0;
} }
int morph_digit_as_uint8_to_char( int morph_digit_as_uint8_to_char(
uint64_t const radix,
uint8_t const * restrict src, uint8_t const * restrict src,
char * restrict dst uint8_t * restrict dst
) { ) {
if ( *src < 10 ) if ( *src < 10 )
*dst = *src + '0'; *dst = *src + '0';
@ -48,17 +42,11 @@ int morph_digit_as_uint8_to_char(
} }
int morph_digit_as_uint64_to_char( int morph_digit_as_uint64_to_char(
uint64_t const radix,
uint64_t const * restrict src, uint64_t const * restrict src,
char * restrict dst uint8_t * restrict dst
) { ) {
if ( *src < 10 ) return morph_digit_as_uint8_to_char(radix, src, dst);
*dst = *src + '0';
else if( *dst < 16 )
*dst = *src - 0xa + 'a';
else
return -1;
return 0;
} }
/* switches endianness by reversing the digit sequence /* switches endianness by reversing the digit sequence