New way of doing integer types 
January 17th, 2008, 02:25 PM
| | | |
I posted an article of similar effect to this to comp.std.c++ but for some
reason it hasn't shown up in the newsgroup.
Anyway, instead of having a system in C++ whereby each integer type has a
minimum range (e.g. int must be at least 16-Bit), would it not be a hell of
a lot better if we could define objects as follows:
uint_fast24_t i;
, where 24 can be replaced with whatever range you need. I think it would
be trivial for a compiler to iterate thru all the integer types it provides
to pick the most appropriate one.
Or perhaps another method could be:
int {0,65535} i; /* 0 and 65535 specify the min and max */
(although personally I prefer the former way of doing it)
This would lead to portable algorithms that run faster.
--
Tomás Ó hÉilidhe | 
January 17th, 2008, 02:55 PM
| | | | re: New way of doing integer types
Tomás Ó hÉilidhe wrote: Quote:
Anyway, instead of having a system in C++ whereby each integer type has a
minimum range (e.g. int must be at least 16-Bit), would it not be a hell of
a lot better if we could define objects as follows:
>
uint_fast24_t i;
| What do you mean by fast? That the compiler shall do address alignment?
As for the 24 (or whatever else), I am currently using stdint.h, and
types such as uint16_t - what exactly would be different?
Best Regards,
Lars | 
January 17th, 2008, 04:45 PM
| | | | re: New way of doing integer types
Lars Uffmann: Quote:
Tomás Ó hÉilidhe wrote: Quote:
>Anyway, instead of having a system in C++ whereby each integer type
>has a minimum range (e.g. int must be at least 16-Bit), would it not
>be a hell of a lot better if we could define objects as follows:
>>
> uint_fast24_t i;
| >
What do you mean by fast? That the compiler shall do address
alignment?
>
As for the 24 (or whatever else), I am currently using stdint.h, and
types such as uint16_t - what exactly would be different?
>
Best Regards,
>
Lars
|
uint_fast24_t would represent the fastest integer type that has at least 24
value bits.
By fast, I mean the time it takes for the machine to do arithmetic.
--
Tomás Ó hÉilidhe | 
January 17th, 2008, 04:55 PM
| | | | re: New way of doing integer types
Tomás Ó hÉilidhe wrote: Quote:
Anyway, instead of having a system in C++ whereby each integer type has a
minimum range (e.g. int must be at least 16-Bit), would it not be a hell of
a lot better if we could define objects as follows:
>
uint_fast24_t i;
| boost::uint_t<24>::fast i; Quote:
Or perhaps another method could be:
>
int {0,65535} i; /* 0 and 65535 specify the min and max */
| boost::int_max_value_t<65535>::fast i;
Phil. | 
January 17th, 2008, 05:15 PM
| | | | re: New way of doing integer types
"Tomás Ó hÉilidhe" <toe@lavabit.comwrites: Quote:
I posted an article of similar effect to this to comp.std.c++ but for some
reason it hasn't shown up in the newsgroup.
>
Anyway, instead of having a system in C++ whereby each integer type has a
minimum range (e.g. int must be at least 16-Bit), would it not be a hell of
a lot better if we could define objects as follows:
>
uint_fast24_t i;
>
, where 24 can be replaced with whatever range you need. I think it would
be trivial for a compiler to iterate thru all the integer types it provides
to pick the most appropriate one.
>
Or perhaps another method could be:
>
int {0,65535} i; /* 0 and 65535 specify the min and max */
>
(although personally I prefer the former way of doing it)
>
This would lead to portable algorithms that run faster.
| Instead of creating new syntax I'd use a template-like syntax, ie:
#v+
uint_fast<24i;
int<0, 65535j;
#v-
The later may be achieved with templates though (probably something
better could be invented but as a proof of concept):
#v+
template<unsigned bitsstruct uint {
typedef typename uint<bits + 1>::type type;
};
template<struct uint< 8{ typedef unsigned char type; }
template<struct uint<16{ typedef unsigned short type; }
template<struct uint<32{ typedef unsigned int type; }
uint<24>::type i;
#v-
Not that I believe something like that will be ever implemented even
though it may be handy.
--
Best regards, _ _
.o. | Liege of Serenly Enlightened Majesty of o' \,=./ `o
..o | Computer Science, Michal "mina86" Nazarewicz (o o)
ooo +--<mina86*tlen.pl>--<jid:mina86*jabber.org>--ooO--(_)--Ooo-- | 
January 17th, 2008, 06:05 PM
| | | | re: New way of doing integer types
On 2008-01-17 15:06, Tomás Ó hÉilidhe wrote: Quote:
I posted an article of similar effect to this to comp.std.c++ but for some
reason it hasn't shown up in the newsgroup.
>
Anyway, instead of having a system in C++ whereby each integer type has a
minimum range (e.g. int must be at least 16-Bit), would it not be a hell of
a lot better if we could define objects as follows:
>
uint_fast24_t i;
>
, where 24 can be replaced with whatever range you need. I think it would
be trivial for a compiler to iterate thru all the integer types it provides
to pick the most appropriate one.
>
Or perhaps another method could be:
>
int {0,65535} i; /* 0 and 65535 specify the min and max */
>
(although personally I prefer the former way of doing it)
>
This would lead to portable algorithms that run faster.
| Yes, and perhaps that is why that is how it is done in C99 and will be
done in C++0X. Though none of them specifies any 24-bit types, just 8,
16,32, and 64 (though I think vendors can add 24 if they want).
--
Erik Wikström | 
January 17th, 2008, 06:15 PM
| | | | re: New way of doing integer types
=?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=: Quote:
Yes, and perhaps that is why that is how it is done in C99 and will be
done in C++0X. Though none of them specifies any 24-bit types, just 8,
16,32, and 64 (though I think vendors can add 24 if they want).
|
What I was proposing was that you could put in any number you like and then
the compiler would do the work to pick the most appropriate. For example:
uint_fast17_t i;
--
Tomás Ó hÉilidhe | 
January 18th, 2008, 10:35 AM
| | | | re: New way of doing integer types
Phil Endecott: Quote: |
boost::uint_t<24>::fast i;
|
How can a portable implementation of boost achieve this? Or does boost have
platform-specific implementations?
--
Tomás Ó hÉilidhe | 
January 18th, 2008, 12:25 PM
| | | | re: New way of doing integer types
On 2008-01-18 05:26:40 -0500, "Tomás Ó hÉilidhe" <toe@lavabit.comsaid: Quote:
Phil Endecott:
>
> Quote: |
>boost::uint_t<24>::fast i;
| >
>
How can a portable implementation of boost achieve this? Or does boost have
platform-specific implementations?
| Portable code almost always has a platform-specific layer.
--
Pete
Roundhouse Consulting, Ltd. ( www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
( www.petebecker.com/tr1book) | 
January 18th, 2008, 02:25 PM
| | | | re: New way of doing integer types
Tomás Ó hÉilidhe wrote: Quote:
Phil Endecott:
> Quote: |
>boost::uint_t<24>::fast i;
| >
How can a portable implementation of boost achieve this?
| The code's here: http://svn.boost.org/svn/boost/trunk/boost/integer.hpp
As far as I can see:
- It finds the 'least' type using sizeof, i.e. a 32-bit int when you ask
for 24.
- It typedefs 'least' to 'fast', with a comment that implementations can
override this with a specialisation if they want.
- It doesn't provide any such specialisations.
Phil. |  | | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 225,662 network members.
|