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

array.icc

Go to the documentation of this file.
00001 /*
00002  *  Main authors:
00003  *     Christian Schulte <schulte@gecode.org>
00004  *
00005  *  Copyright:
00006  *     Christian Schulte, 2005
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   // Forward declaration.
00025   class BoolVarArray;
00026 
00036 
00037   typedef PrimArgArray<int>    IntArgs;
00039   typedef VarArgArray<IntVar>  IntVarArgs;
00041   class BoolVarArgs : public IntVarArgs {
00042   public:
00044 
00045 
00046     BoolVarArgs(int n);
00048     BoolVarArgs(const BoolVarArgs& a);
00050     explicit BoolVarArgs(const BoolVarArray& a);
00052 
00054 
00055 
00056     BoolVar& operator[](int i);
00058     const BoolVar& operator[](int i) const;
00060   };
00061 
00063 
00079   class IntVarArray : public VarArray<IntVar> {
00080   public:
00082 
00083 
00084     IntVarArray(void);
00086     IntVarArray(Space* home, int n);
00088     IntVarArray(const IntVarArray& a);
00100     GECODE_INT_EXPORT
00101     IntVarArray(Space* home, int n, int min, int max);
00113     GECODE_INT_EXPORT
00114     IntVarArray(Space* home, int n, const IntSet& s);
00116   };
00121   class BoolVarArray : public IntVarArray {
00122   public:
00124 
00125 
00126     BoolVarArray(void);
00128     BoolVarArray(Space* home, int n);
00130     BoolVarArray(const BoolVarArray& a);
00142     GECODE_INT_EXPORT
00143     BoolVarArray(Space* home, int n, int min, int max);
00145 
00147 
00148 
00149     BoolVar& operator[](int i);
00151     const BoolVar& operator[](int i) const;
00153   };
00154 
00156   template <>
00157   class ArrayTraits<IntVarArray> {
00158   public:
00159     typedef IntVarArgs   storage_type;
00160     typedef IntVar       value_type;
00161     typedef IntVarArgs   args_type;
00162   };
00164   template <>
00165   class ArrayTraits<IntVarArgs> {
00166   public:
00167     typedef IntVarArgs storage_type;
00168     typedef IntVar     value_type;
00169     typedef IntVarArgs args_type;
00170   };
00172   template <>
00173   class ArrayTraits<IntArgs> {
00174   public:
00175     typedef IntArgs storage_type;
00176     typedef int     value_type;
00177     typedef IntArgs args_type;
00178   };
00180   template <>
00181   class ArrayTraits<BoolVarArray> {
00182   public:
00183     typedef BoolVarArgs   storage_type;
00184     typedef BoolVar       value_type;
00185     typedef BoolVarArgs   args_type;
00186   };
00188   template <>
00189   class ArrayTraits<BoolVarArgs> {
00190   public:
00191     typedef BoolVarArgs storage_type;
00192     typedef BoolVar     value_type;
00193     typedef BoolVarArgs args_type;
00194   };
00195 
00196   /*
00197    * Implementation
00198    *
00199    */
00200 
00201   forceinline
00202   BoolVarArgs::BoolVarArgs(const BoolVarArgs& a)
00203     : IntVarArgs(a) {}
00204 
00205   forceinline
00206   BoolVarArgs::BoolVarArgs(const BoolVarArray& a)
00207     : IntVarArgs(a) {}
00208 
00209   forceinline
00210   BoolVarArgs::BoolVarArgs(int n)
00211     : IntVarArgs(n) {}
00212 
00213 
00214   forceinline BoolVar&
00215   BoolVarArgs::operator[](int i) {
00216     BoolVar* b = static_cast<BoolVar*>(&a[i]);
00217     return *b;
00218   }
00219 
00220   forceinline const BoolVar&
00221   BoolVarArgs::operator[](int i) const {
00222     const BoolVar* b = static_cast<BoolVar*>(&a[i]);
00223     return *b;
00224   }
00225 
00226   forceinline
00227   IntVarArray::IntVarArray(void) {}
00228 
00229   forceinline
00230   IntVarArray::IntVarArray(Space* home, int n)
00231     : VarArray<IntVar>(home,n) {}
00232 
00233   forceinline
00234   IntVarArray::IntVarArray(const IntVarArray& a)
00235     : VarArray<IntVar>(a) {}
00236 
00237 
00238   forceinline
00239   BoolVarArray::BoolVarArray(void) {}
00240 
00241   forceinline
00242   BoolVarArray::BoolVarArray(const BoolVarArray& a)
00243     : IntVarArray(a) {}
00244 
00245   forceinline
00246   BoolVarArray::BoolVarArray(Space* home, int n)
00247     : IntVarArray(home,n) {}
00248 
00249 
00250   forceinline BoolVar&
00251   BoolVarArray::operator[](int i) {
00252     BoolVar* b = static_cast<BoolVar*>(&x[i]);
00253     return *b;
00254   }
00255 
00256   forceinline const BoolVar&
00257   BoolVarArray::operator[](int i) const {
00258     const BoolVar* b = static_cast<BoolVar*>(&x[i]);
00259     return *b;
00260   }
00261 
00262 }
00263 
00264 // STATISTICS: int-other