
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