Subject: Re: [boost] [review][constrained_value] Bounded value
From: Robert Kawulak (robert.kawulak_at_[hidden])
Date: 2008-12-03 09:03:54
2008/12/3 Edward Diener
> I believe the bounded objects are actually a subset of a larger concept, which is the set of valid values for an object. Ideally what one could have is a set of bounded values which define the valid values. Each member of the set could be a pair ( or two-element tuple ) defining a lower and upper value inclusive, and of course a single value in the set would have its lower and upper value be the same. In this way one could define, as an example, a constrained object whose integer value could be between 0 and 20 and between 50 and 70. Currently the bounded object concept only allows one "bounds". With the larger concept I mention, a bounded object can have any number of bounds. While the single bounds bounded object can still be supported, I would like to see the constrained value library implement a multi-bound concept, in which case the current bounded object concept is just a subset of the multi-bound with a single bound.
What you ask for can be easily achieved using the current
implementation. All you have to do is to define a constraint that
encapsulates several within_bounds predicates, each one responsible
for one sub-range of the allowed set.
If you don't care about efficiency or want to use
dynamically-adjustable sets, the task is almost trivial - use
boost::signal as the constraint type and provide a combiner that
returns logical alternative of the results. Then add instances of
within_bounds (or any other predicate) as slots of the signal.
The built-in support for such multi-range sets could be added to the
library too, but I wonder if the use case is common enough and I
should focus on this right now. Anyway, this shuold be easy to achieve
anytime in the future with no modifications to the current