ranges-array.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 Ranges {
00035
00046 class Array {
00047 public:
00049 class Range {
00050 public:
00051 int min;
00052 int max;
00053 };
00054 protected:
00056 Range* r;
00058 unsigned int c;
00060 unsigned int n;
00061 public:
00063
00064
00065 Array(void);
00067 Array(Range* r, unsigned int n);
00069 Array(Range* r, int n);
00071 void init(Range* r, unsigned int n);
00073 void init(Range* r, int n);
00075
00077
00078
00079 bool operator ()(void) const;
00081 void operator ++(void);
00083 void reset(void);
00085
00087
00088
00089 int min(void) const;
00091 int max(void) const;
00093 unsigned int width(void) const;
00095 };
00096
00097
00098 forceinline
00099 Array::Array(void) {}
00100
00101 forceinline
00102 Array::Array(Range* r0, unsigned int n0)
00103 : r(r0), c(0U), n(n0) {}
00104
00105 forceinline
00106 Array::Array(Range* r0, int n0)
00107 : r(r0), c(0U), n(static_cast<unsigned int>(n0)) {}
00108
00109 forceinline void
00110 Array::init(Range* r0, unsigned int n0) {
00111 r=r0; c=0U; n=n0;
00112 }
00113
00114 forceinline void
00115 Array::init(Range* r0, int n0) {
00116 r=r0; c=0U; n=static_cast<unsigned int>(n0);
00117 }
00118
00119 forceinline void
00120 Array::operator ++(void) {
00121 c++;
00122 }
00123 forceinline bool
00124 Array::operator ()(void) const {
00125 return c < n;
00126 }
00127
00128 forceinline void
00129 Array::reset(void) {
00130 c=0U;
00131 }
00132
00133 forceinline int
00134 Array::min(void) const {
00135 return r[c].min;
00136 }
00137 forceinline int
00138 Array::max(void) const {
00139 return r[c].max;
00140 }
00141 forceinline unsigned int
00142 Array::width(void) const {
00143 return static_cast<unsigned int>(r[c].max-r[c].min)+1;
00144 }
00145
00146 }}}
00147
00148
00149