Connecting Tech Pros Worldwide Help | Site Map

New way of doing integer types

  #1  
Old January 17th, 2008, 02:25 PM
=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?=
Guest
 
Posts: n/a

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
  #2  
Old January 17th, 2008, 02:55 PM
Lars Uffmann
Guest
 
Posts: n/a

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
  #3  
Old January 17th, 2008, 04:45 PM
=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?=
Guest
 
Posts: n/a

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
  #4  
Old January 17th, 2008, 04:55 PM
Phil Endecott
Guest
 
Posts: n/a

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.
  #5  
Old January 17th, 2008, 05:15 PM
Michal Nazarewicz
Guest
 
Posts: n/a

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--
  #6  
Old January 17th, 2008, 06:05 PM
=?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=
Guest
 
Posts: n/a

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
  #7  
Old January 17th, 2008, 06:15 PM
=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?=
Guest
 
Posts: n/a

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
  #8  
Old January 18th, 2008, 10:35 AM
=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?=
Guest
 
Posts: n/a

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
  #9  
Old January 18th, 2008, 12:25 PM
Pete Becker
Guest
 
Posts: n/a

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)

  #10  
Old January 18th, 2008, 02:25 PM
Phil Endecott
Guest
 
Posts: n/a

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.
Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Integer types in embedded systems =?ISO-8859-1?Q?Tom=E1s_=D3_h=C9ilidhe?= answers 30 June 27th, 2008 08:35 PM
Standard integer types vs <stdint.h> types euler70@gmail.com answers 130 January 25th, 2008 10:45 AM
Sizes of Integer Types Bob Timpkinson answers 159 September 19th, 2007 11:45 AM