[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