diff --git a/morphisms/posint.morphism-base b/morphisms/posint.morphism-base index d8838e0..64dea71 100644 --- a/morphisms/posint.morphism-base +++ b/morphisms/posint.morphism-base @@ -14,9 +14,9 @@ morph_nat_as_u64_to_pos () return 0; ``` -morph_nat_as_u64_to_pos () +morph_nat_as_pos_to_u64 (Endianness:Type) ℕ - ~ <PosInt 0 LittleEndian> + ~ <PosInt 0 Endianness> ~ <Seq~<LengthPrefix x86.UInt64> <Digit 0>~x86.UInt64> --> ℕ ~ x86.UInt64 @@ -42,14 +42,16 @@ morph_posint_radix_le (SrcRadix:ℤ, DstRadix:ℤ) length_prefix_uint64_array_clear( dst ); - if( DstRadix == 0 ) { + #if DstRadix==0 length_prefix_uint64_array_push( dst, value ); - } else if( DstRadix > 0 ) { - while( value > 0 ) { + #else + if( value == 0 ) { + length_prefix_uint64_array_push( dst, 0 ); + } else while( value > 0 ) { length_prefix_uint64_array_push( dst, value % DstRadix ); value /= DstRadix; } - } + #endif return 0; ``` @@ -69,13 +71,16 @@ morph_posint_radix_be (SrcRadix:ℤ, DstRadix:ℤ) value += src->items[i]; } - if( DstRadix == 0 ) { + #if DstRadix==0 dst->len = 1; dst->items[0] = value; - } else { + #else uint64_t v = value; dst->len = 0; - while( v ) { + + if( v == 0 ) { + dst->len = 1; + } else while( v ) { dst->len++; v /= DstRadix; } @@ -85,7 +90,7 @@ morph_posint_radix_be (SrcRadix:ℤ, DstRadix:ℤ) dst->items[--i] = value % DstRadix; value /= DstRadix; } - } + #endif return 0; ```