[m-rev.] for review: add uint64 to string conversin for bases 8 and 16

Julien Fischer jfischer at opturion.com
Tue Dec 15 22:48:15 AEDT 2020


On Tue, 15 Dec 2020, Peter Wang wrote:

> On Sun, 13 Dec 2020 19:37:01 +1100 Julien Fischer <jfischer at opturion.com> wrote:
>>
>> For review by anyone.
>>
>> --------------------
>>
>> Add uint64 to string conversion for bases 8 and 16.
>>
>> library/string.m:
>>       Add functions for converting uint64s to strings of base 8 or base 16
>>       digits. For most integer types we can cast to a uint and then use the
>>       uint versions of these operations but for 64-bit types we cannot since
>>       on some of our supported platforms uints are 32-bit.
>>
>> NEWS:
>>       Announce the additions.
>>
>> tests/hard_coded/Mmakefile:
>> tests/hard_coded/uint64_string_conv.{m,exp}:
>>       Add a test of the new functions.
>
>> diff --git a/library/string.m b/library/string.m
>> index 35519ea..c02beab 100644
>> --- a/library/string.m
>> +++ b/library/string.m
>> @@ -5857,6 +5871,86 @@ int_to_base_string_group_2(NegN, Base, Curr, GroupLength, Sep, Str) :-
>>
>>   %---------------------%
>>
>> +:- pragma foreign_proc("C",
>> +    uint64_to_hex_string(U64::in) = (S::uo),
>> +    [will_not_call_mercury, promise_pure, thread_safe, will_not_modify_trail],
>> +"
>> +    char buffer[21]; // 20 for digits, 1 for nul.
>
> Should be 17. Not that it matters particularly.


Fixed.

>
>> +    sprintf(buffer, ""%"" PRIx64, U64);
>> +    MR_allocate_aligned_string_msg(S, strlen(buffer), MR_ALLOC_ID);
>> +    strcpy(S, buffer);
>> +").
>
>> +%---------------------%
>> +
>> +:- pragma foreign_proc("C",
>> +    uint64_to_uc_hex_string(U64::in) = (S::uo),
>> +    [will_not_call_mercury, promise_pure, thread_safe, will_not_modify_trail],
>> +"
>> +    char buffer[21]; // 20 for digits, 1 for nul.
>
> Ditto.

And here.


>> +    sprintf(buffer, ""%"" PRIX64, U64);
>> +    MR_allocate_aligned_string_msg(S, strlen(buffer), MR_ALLOC_ID);
>> +    strcpy(S, buffer);
>> +").
>> +
>
> That looks fine, otherwise.

Thanks for that.

Julien.


More information about the reviews mailing list