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 Ranges {
00039
00045 template<class I>
00046 class Offset {
00047 protected:
00049 I i;
00051 int c;
00052 public:
00054
00055
00056 Offset(void);
00058 Offset(I& i, int c);
00060 void init(I& i, int c);
00062
00064
00065
00066 bool operator ()(void) const;
00068 void operator ++(void);
00070
00072
00073
00074 int min(void) const;
00076 int max(void) const;
00078 unsigned int width(void) const;
00080 };
00081
00082
00083 template<class I>
00084 forceinline
00085 Offset<I>::Offset(void) {}
00086
00087 template<class I>
00088 inline void
00089 Offset<I>::init(I& i0, int c0) {
00090 i = i0; c = c0;
00091 }
00092
00093 template<class I>
00094 inline
00095 Offset<I>::Offset(I& i0, int c0) : i(i0), c(c0) {}
00096
00097 template<class I>
00098 forceinline void
00099 Offset<I>::operator ++(void) {
00100 ++i;
00101 }
00102 template<class I>
00103 forceinline bool
00104 Offset<I>::operator ()(void) const {
00105 return i();
00106 }
00107
00108 template<class I>
00109 forceinline int
00110 Offset<I>::min(void) const {
00111 return i.min()+c;
00112 }
00113 template<class I>
00114 forceinline int
00115 Offset<I>::max(void) const {
00116 return i.max()+c;
00117 }
00118 template<class I>
00119 forceinline unsigned int
00120 Offset<I>::width(void) const {
00121 return i.width();
00122 }
00123
00124 }}}
00125
00126
00127