Generated on Wed Nov 1 15:04:34 2006 for Gecode by doxygen 1.4.5

int-set.icc

Go to the documentation of this file.
00001 /*
00002  *  Main authors:
00003  *     Christian Schulte <schulte@gecode.org>
00004  *
00005  *  Copyright:
00006  *     Christian Schulte, 2003
00007  *
00008  *  Last modified:
00009  *     $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
00010  *     $Revision: 3512 $
00011  *
00012  *  This file is part of Gecode, the generic constraint
00013  *  development environment:
00014  *     http://www.gecode.org
00015  *
00016  *  See the file "LICENSE" for information on usage and
00017  *  redistribution of this file, and for a
00018  *     DISCLAIMER OF ALL WARRANTIES.
00019  *
00020  */
00021 
00022 namespace Gecode {
00023 
00024   /*
00025    * Integer sets
00026    *
00027    */
00028 
00029   forceinline
00030   IntSet::IntSet(void) {}
00031 
00032   forceinline
00033   IntSet::IntSet(const IntSet& s) : sar(s.sar) {}
00034 
00035   template <class I>
00036   forceinline
00037   IntSet::IntSet(I& i) {
00038     int j=0;
00039     while (i()) {
00040       sar.ensure(j+1);
00041       sar[j].min = i.min(); sar[j].max = i.max();
00042       ++j; ++i;
00043     }
00044     sar.size(j);
00045   }
00046 
00047   forceinline
00048   IntSet::IntSet(const int r[][2], int n) : sar(n) { init(r,n); }
00049 
00050   forceinline
00051   IntSet::IntSet(const int r[], int n) : sar(n) { init(r,n); }
00052 
00053   forceinline
00054   IntSet::IntSet(int n, int m) : sar(1) { init(n,m); }
00055 
00056   forceinline void
00057   IntSet::update(bool share, IntSet& s) {
00058     sar.update(share, s.sar);
00059   }
00060 
00061   forceinline int
00062   IntSet::min(int i) const {
00063     return sar[i].min;
00064   }
00065 
00066   forceinline int
00067   IntSet::max(int i) const {
00068     return sar[i].max;
00069   }
00070 
00071   forceinline unsigned int
00072   IntSet::width(int i) const {
00073     return sar[i].max-sar[i].min+1;
00074   }
00075 
00076   forceinline int
00077   IntSet::size(void) const {
00078     return sar.size();
00079   }
00080 
00081   forceinline int
00082   IntSet::min(void) const {
00083     return sar[0].min;
00084   }
00085 
00086   forceinline int
00087   IntSet::max(void) const {
00088     return sar[sar.size()-1].max;
00089   }
00090 
00091 
00092   /*
00093    * Range iterator for integer sets
00094    *
00095    */
00096 
00097   forceinline
00098   IntSetRanges::IntSetRanges(void) {}
00099   forceinline
00100   IntSetRanges::IntSetRanges(const IntSet& s)
00101     : i(&s.sar[0]), e(&s.sar[s.size()]) {}
00102   forceinline void
00103   IntSetRanges::init(const IntSet& s) {
00104     i = &s.sar[0]; e = &s.sar[s.size()];
00105   }
00106 
00107   forceinline void
00108   IntSetRanges::operator++(void) {
00109     i++;
00110   }
00111   forceinline bool
00112   IntSetRanges::operator()(void) const {
00113     return i<e;
00114   }
00115 
00116   forceinline int
00117   IntSetRanges::min(void) const {
00118     return i->min;
00119   }
00120   forceinline int
00121   IntSetRanges::max(void) const {
00122     return i->max;
00123   }
00124   forceinline unsigned int
00125   IntSetRanges::width(void) const {
00126     return i->max - i->min +1;
00127   }
00128 
00129   /*
00130    * Value iterator for integer sets
00131    *
00132    */
00133   forceinline
00134   IntSetValues::IntSetValues(void) {}
00135 
00136   forceinline
00137   IntSetValues::IntSetValues(const IntSet& s) {
00138     IntSetRanges r(s);
00139     Iter::Ranges::ToValues<IntSetRanges>::init(r);
00140   }
00141 
00142   forceinline void
00143   IntSetValues::init(const IntSet& s) {
00144     IntSetRanges r(s);
00145     Iter::Ranges::ToValues<IntSetRanges>::init(r);
00146   }
00147 
00148 }
00149 
00150 // STATISTICS: int-var
00151