diff --git a/morphisms/include/morphisms/posint.h b/morphisms/include/morphisms/posint.h index d44db28..3c96136 100644 --- a/morphisms/include/morphisms/posint.h +++ b/morphisms/include/morphisms/posint.h @@ -3,32 +3,33 @@ #include <morphisms/length-prefix.h> int morph_digit_as_char_to_uint8( - char const * restrict src, + uint64_t const radix, + uint8_t const * restrict src, uint8_t * restrict dst ); int morph_digit_as_char_to_uint64( - char const * restrict src, + uint64_t const radix, + uint8_t const * restrict src, uint64_t * restrict dst ); int morph_digit_as_uint8_to_char( + uint64_t const radix, uint8_t const * restrict src, - char * restrict dst + uint8_t * restrict dst ); int morph_digit_as_uint64_to_char( + uint64_t const radix, uint64_t const * restrict src, - char * restrict dst + uint8_t * restrict dst ); - int morph_posint_endianness( uint64_t const radix, - struct LengthPrefixUInt64Array const * restrict src, struct LengthPrefixUInt64Array * restrict dst ); int morph_posint_radix( uint64_t const src_radix, uint64_t const dst_radix, - struct LengthPrefixUInt64Array const * restrict src, struct LengthPrefixUInt64Array * restrict dst ); diff --git a/morphisms/src/posint.c b/morphisms/src/posint.c index 65292a9..32503c8 100644 --- a/morphisms/src/posint.c +++ b/morphisms/src/posint.c @@ -2,7 +2,8 @@ #include <morphisms/length-prefix.h> int morph_digit_as_char_to_uint8( - char const * restrict src, + uint64_t const radix, + uint8_t const * restrict src, uint8_t * restrict dst ) { if( *src >= '0' && *src <= '9' ) @@ -18,24 +19,17 @@ int morph_digit_as_char_to_uint8( } int morph_digit_as_char_to_uint64( - char const * restrict src, + uint64_t const radix, + uint8_t const * restrict src, uint64_t * restrict dst ) { - if( *src >= '0' && *src <= '9' ) - *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; + return morph_digit_as_char_to_uint8(radix, src, dst); } int morph_digit_as_uint8_to_char( + uint64_t const radix, uint8_t const * restrict src, - char * restrict dst + uint8_t * restrict dst ) { if ( *src < 10 ) *dst = *src + '0'; @@ -48,17 +42,11 @@ int morph_digit_as_uint8_to_char( } int morph_digit_as_uint64_to_char( + uint64_t const radix, uint64_t const * restrict src, - char * restrict dst + uint8_t * restrict dst ) { - if ( *src < 10 ) - *dst = *src + '0'; - else if( *dst < 16 ) - *dst = *src - 0xa + 'a'; - else - return -1; - - return 0; + return morph_digit_as_uint8_to_char(radix, src, dst); } /* switches endianness by reversing the digit sequence