Boost logo

Boost :

Subject: Re: [boost] [xint] Fourth release, requesting preliminary review again
From: Marius Stoica (letto2_at_[hidden])
Date: 2010-06-03 09:40:38


On Thursday 03 June 2010 07:30:59 Chad Nelson wrote:
> I found a way, thanks to a suggestion from John Bytheway. :-)

That's really awsome :)

>
> Since you'll probably use typedefs, it's not something you'll need to
> deal with often. Easy enough to change it, but I'm not sure I see the
> need yet.

> >> Would it? Though similar, they act very differently in the face of
> >> errors. The nothrow version also needs to support the Not-a-Number
> >> value, which requires a couple functions that don't make sense for the
> >> other types.
> >
> > It's just a compile-time option like the other ones.
>
> Not entirely, due to those two extra functions. And logically it's a
> distinct type.
>

The more i think about it i think you should go for a policy based design.
Rigth now there is the obvious problem that you don't have a
nothrow_fixed_integer.

Maby you can do something like this :

integer_t <
        throws<false>,
        size<128>, // 0 means unlimited
         thread_safe<false>> myint;

You could also have some other policies
  -overflow policy( become nan, overflow to negative)
  -signed/unsigned policy

> That might save a few bytes of memory, but it would make the entire
> library slower, because it would have to check to see whether to use the
> data_t object or not before every operation. Memory isn't so precious
> that I'd consider that a good trade-off.
> --

Doesn't seem to bad to me, the advantages quite serious
-if you have a lot of small ints you save a lot of memory( i think an data_t
would be more than 3x larger)
-for example you can put them in a vector without having pointers to
everywhere(less fragmentation)
-you can allocate them on the stack without needing to dynamically allocate
memory wich is quite expensive and nondeterministic

For that you will need to

-add a few instructions to every function(not very much)
-check a flag (not very costly xoring and comparing are the cheapest ops and it
will have good branch prediction )
-add another pointer(probably the most serious issue, but you already have a 3
pointer indirection - maby you can make it so you can keep that ? )


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk