values-ranges.icc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 namespace Gecode { namespace Iter { namespace Values {
00023
00034 template <class I>
00035 class ToRanges : public Ranges::MinMax {
00036 protected:
00038 I i;
00039 public:
00041
00042
00043 ToRanges(void);
00045 ToRanges(I& i);
00047 void init(I& i);
00049
00051
00052
00053 void operator++(void);
00055 };
00056
00057 template <class I>
00058 forceinline
00059 ToRanges<I>::ToRanges(void) {}
00060
00061 template <class I>
00062 forceinline void
00063 ToRanges<I>::operator++(void) {
00064 if (!i()) {
00065 finish(); return;
00066 }
00067 mi = i.val(); ma = i.val();
00068 ++i;
00069 while (i() && (ma+1 >= i.val())) {
00070 ma = i.val(); ++i;
00071 }
00072 }
00073
00074 template <class I>
00075 forceinline
00076 ToRanges<I>::ToRanges(I& i0)
00077 : i(i0) {
00078 operator++();
00079 }
00080
00081 template <class I>
00082 forceinline void
00083 ToRanges<I>::init(I& i0) {
00084 i = i0;
00085 operator++();
00086 }
00087
00088 }}}
00089
00090
00091