New way of doing integer types



 DEVELOP > c-Plus-Plus > New way of doing integer types

LINK TO THIS PAGE  


rating :  0   |  0


  Page 1 of 1

1

 
Topic: DEVELOP > c-Plus-Plus
User: "=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?="
Date: 17 Jan 2008 08:06:14 AM
Object: New way of doing integer types
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
.

User: "Michal Nazarewicz"

Title: Re: New way of doing integer types 17 Jan 2008 11:14:35 AM
"Tomás Ó hÉilidhe" <toe@lavabit.com> writes:

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<24> i;
int<0, 65535> j;
#v-
The later may be achieved with templates though (probably something
better could be invented but as a proof of concept):
#v+
template<unsigned bits> struct 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--
.

User: "=?UTF-8?B?RXJpayBXaWtzdHLDtm0=?="

Title: Re: New way of doing integer types 17 Jan 2008 12:03:38 PM
On 2008-01-17 15:06, Tomás Ó hÉilidhe wrote:

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
.
User: "=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?="

Title: Re: New way of doing integer types 17 Jan 2008 12:09:54 PM
=?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=:

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
.


User: "Lars Uffmann"

Title: Re: New way of doing integer types 17 Jan 2008 08:28:02 AM
Tomás Ó hÉilidhe wrote:

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
.
User: "=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?="

Title: Re: New way of doing integer types 17 Jan 2008 10:37:30 AM
Lars Uffmann:

Tomás Ó hÉilidhe wrote:

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
.


User: "Phil Endecott"

Title: Re: New way of doing integer types 17 Jan 2008 10:51:39 AM
Tomás Ó hÉilidhe wrote:

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;

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.
.
User: "=?iso-8859-1?q?Tom=E1s_=D3_h=C9ilidhe?="

Title: Re: New way of doing integer types 18 Jan 2008 04:26:40 AM
Phil Endecott:

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
.
User: "Pete Becker"

Title: Re: New way of doing integer types 18 Jan 2008 06:19:57 AM
On 2008-01-18 05:26:40 -0500, "Tomás Ó hÉilidhe" <toe@lavabit.com> said:

Phil Endecott:


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)
.

User: "Phil Endecott"

Title: Re: New way of doing integer types 18 Jan 2008 08:22:11 AM
Tomás Ó hÉilidhe wrote:

Phil Endecott:

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




  Page 1 of 1

1

 


Related Articles
 

NEWER

pg.1232     pg.940     pg.716     pg.544     pg.412     pg.311     pg.234     pg.175     pg.130     pg.96     pg.70     pg.50     pg.35     pg.24     pg.16     pg.10     pg.6     pg.3     pg.1

OLDER