|
Boost Users : |
From: Niels Dekker - mail address until 2007-11-30 (nd_mail_address_valid_until_2007-11-30_at_[hidden])
Date: 2007-06-05 17:06:58
Hi me22!!! :-)
Scott McMurray (aka me22) wrote about boost::int_t<Bits>:
> The implementation is quite ingenious, actually. On a proverbial
> toaster with 42-bit everything, a request for int_t<39>::least would
> give a signed char, the "smallest" type.
I agree about it being quite ingenious. And I like the fact that it
supports 42-bit-everything-systems. But still, personally I'd rather
have it support all kinds of 64-bits platforms...
>> Does Boost support ILP64 platforms? If so, I guess int_t<32>::least
>> should select _int32, instead of int, on such a platform!
>>
> The current implementation deals only in standard C++98 types.
And should it stay that way?
>>> Now I remember someone already already come up with a patch?
>
> You can still find the patch in the mailing list archives:
> http://lists.boost.org/Archives/boost/2006/06/106262.php
I like your int_exact_t<Bits>::exact, Scott! It could really be of
help, for my own Boost-based project. Still I don't like the fact that
it will fail to get me a 32-bits integer (_int32) on an ILP64 platform.
Why not having int_exact_t entirely based on the exact-width integer
types from <boost/integer.hpp>?
Actually I was thinking of a far more simple implementation, as
follows. (In practice, I find it quite convenient to have the signed
and the unsigned type grouped within one struct.)
////////////////////////////////////////////////////////////
template <unsigned Bits> struct int_exact
{
};
template <> struct int_exact<8>
{
typedef int8_t signed_type;
typedef uint8_t unsigned_type;
};
template <> struct int_exact<16>
{
typedef int16_t signed_type;
typedef uint16_t unsigned_type;
};
template <> struct int_exact<32>
{
typedef int32_t signed_type;
typedef uint32_t unsigned_type;
};
#ifndef BOOST_NO_INT64_T
template <> struct int_exact<64>
{
typedef int64_t signed_type;
typedef uint64_t unsigned_type;
};
#endif
////////////////////////////////////////////////////////////
AFAIK, such a template would correctly support any 64-bits platform,
including ILP64. What do you think?
Anyway, if you would like to add ILP64 support to <boost/integer.hpp> in
a different way, I would appreciate your solution as well... I just
hope to see it soon, in a Boost release version! :-)
Kind regards,
Niels
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net