Boost logo

Boost :

From: Jeff Garland (jeff_at_[hidden])
Date: 2004-11-15 00:45:55


On Mon, 15 Nov 2004 10:35:35 +0800, Manfred Doudar wrote
> c/- All:
>
> In taking a holistic look at some of the work I do, I've come
> to realize a need for a "transparent" data type, and wondering
> whether or not it exists.
>
> As all of you would have experienced, any organization has such
> a representation of such a type; be it called:
>
> "Null value", "Missing value", "Fill value", "Infinity" ,
>
> or whatever.
>
> What I am hoping for is support for such an representation,
> with existing containers and algorithms; such that if you
> perform any mathematical operation, (arithmetic, transcendental;
> inverse; anything really ...); that you get back the *same*
> object (ie. it passes transparently through any operation), and
> not raise any exception if you so choose.
>
> Example:
>
> missing_val == atan(missing_val) - missing_val;
> missing_val == 1 / missing_val;
> missing_val == missing_val + missing_val;
> missing_val == missing_val - missing_val;
>
> typedef std::vector<any_type> dVec;
> dVec some_vector;
>
> ... populate some_vector ...
>
> dVec::iterator = some_vector.find(missing_val);
>
> Boosters, do we have such a representation; is there value in having
> such a thing in Boost; is there a (simple) alternative work-around ??

In date-time there is a template called int_adapter in the implementation that
lets you have nan, infinities, etc in an integer value type. I think this is
something like what you are trying to do. Basically it steals some values
from the integer type and treats them as special then overrides the operators
accordingly. We use this to implement operations on date-time special values
like not-a-date-time.

See boost/date_time/int_adapter and libs/date_time/test/testint_adapter.cpp
for details.

HTH,

Jeff


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