values-map.hpp
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
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 namespace Gecode { namespace Iter { namespace Values {
00039
00048 template<class I, class M, bool strict=false>
00049 class Map {
00050 private:
00052 IsValueIter<I> _checkI;
00053 private:
00055 I i;
00057 M m;
00058 public:
00060
00061
00062 Map(void);
00064 Map(I& i);
00066 Map(I& i, const M& m);
00068 void init(I& i);
00070 void init(I& i, const M& m);
00072
00074
00075
00076 bool operator ()(void) const;
00078 void operator ++(void);
00080
00082
00083
00084 int val(void) const;
00086 };
00087
00088
00089 template<class I, class M, bool strict>
00090 forceinline
00091 Map<I,M,strict>::Map(void) {}
00092
00093 template<class I, class M, bool strict>
00094 forceinline
00095 Map<I,M,strict>::Map(I& i0) : i(i0) {}
00096
00097 template<class I, class M, bool strict>
00098 forceinline
00099 Map<I,M,strict>::Map(I& i0, const M& m0) : i(i0), m(m0) {}
00100
00101 template<class I, class M, bool strict>
00102 forceinline void
00103 Map<I,M,strict>::init(I& i0) {
00104 i=i0;
00105 }
00106
00107 template<class I, class M, bool strict>
00108 forceinline void
00109 Map<I,M,strict>::init(I& i0, const M& m0) {
00110 i=i0; m=m0;
00111 }
00112
00113 template<class I, class M, bool strict>
00114 forceinline void
00115 Map<I,M,strict>::operator ++(void) {
00116 if (strict) {
00117 ++i;
00118 } else {
00119 int n=m.val(i.val());
00120 do {
00121 ++i;
00122 } while (i() && (n == m.val(i.val())));
00123 }
00124 }
00125 template<class I, class M, bool strict>
00126 forceinline bool
00127 Map<I,M,strict>::operator ()(void) const {
00128 return i();
00129 }
00130
00131 template<class I, class M, bool strict>
00132 forceinline int
00133 Map<I,M,strict>::val(void) const {
00134 return m.val(i.val());
00135 }
00136
00137 }}}
00138
00139