values-negative.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 namespace Gecode { namespace Iter { namespace Values {
00035
00042 template<class I, bool strict=false>
00043 class Negative {
00044 protected:
00046 I i;
00047 public:
00049
00050
00051 Negative(void);
00053 Negative(I& i);
00055 void init(I& i);
00057
00059
00060
00061 bool operator ()(void) const;
00063 void operator ++(void);
00065
00067
00068
00069 int val(void) const;
00071 };
00072
00073
00074 template<class I, bool strict>
00075 forceinline
00076 Negative<I,strict>::Negative(void) {}
00077
00078 template<class I, bool strict>
00079 forceinline void
00080 Negative<I,strict>::init(I& i0) {
00081 i=i0;
00082 }
00083
00084 template<class I, bool strict>
00085 forceinline
00086 Negative<I,strict>::Negative(I& i0) : i(i0) {}
00087
00088 template<class I, bool strict>
00089 forceinline void
00090 Negative<I,strict>::operator ++(void) {
00091 ++i;
00092 }
00093 template<class I, bool strict>
00094 forceinline bool
00095 Negative<I,strict>::operator ()(void) const {
00096 if (strict) {
00097 return i() && (i.val() < 0);
00098 } else {
00099 return i() && (i.val() <= 0);
00100 }
00101 }
00102
00103 template<class I, bool strict>
00104 forceinline int
00105 Negative<I,strict>::val(void) const {
00106 return i.val();
00107 }
00108
00109 }}}
00110
00111
00112