Generated on Mon Sep 17 2012 22:20:33 for Gecode by doxygen 1.8.1.1
int.hh
Go to the documentation of this file.
1 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2 /*
3  * Main authors:
4  * Christian Schulte <schulte@gecode.org>
5  * Guido Tack <tack@gecode.org>
6  *
7  * Contributing authors:
8  * Mikael Lagerkvist <lagerkvist@gecode.org>
9  * David Rijsman <David.Rijsman@quintiq.com>
10  *
11  * Copyright:
12  * David Rijsman, 2009
13  * Mikael Lagerkvist, 2006
14  * Christian Schulte, 2002
15  * Guido Tack, 2004
16  *
17  * Last modified:
18  * $Date: 2012-02-22 16:04:20 +1100 (Wed, 22 Feb 2012) $ by $Author: tack $
19  * $Revision: 12537 $
20  *
21  * This file is part of Gecode, the generic constraint
22  * development environment:
23  * http://www.gecode.org
24  *
25  * Permission is hereby granted, free of charge, to any person obtaining
26  * a copy of this software and associated documentation files (the
27  * "Software"), to deal in the Software without restriction, including
28  * without limitation the rights to use, copy, modify, merge, publish,
29  * distribute, sublicense, and/or sell copies of the Software, and to
30  * permit persons to whom the Software is furnished to do so, subject to
31  * the following conditions:
32  *
33  * The above copyright notice and this permission notice shall be
34  * included in all copies or substantial portions of the Software.
35  *
36  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
37  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
38  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
39  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
40  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
41  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
42  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43  *
44  */
45 
46 #ifndef __GECODE_INT_HH__
47 #define __GECODE_INT_HH__
48 
49 #include <climits>
50 #include <cfloat>
51 #include <iostream>
52 
53 #include <vector>
54 
55 #include <gecode/kernel.hh>
56 #include <gecode/iter.hh>
57 
58 /*
59  * Configure linking
60  *
61  */
62 #if !defined(GECODE_STATIC_LIBS) && \
63  (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
64 
65 #ifdef GECODE_BUILD_INT
66 #define GECODE_INT_EXPORT __declspec( dllexport )
67 #else
68 #define GECODE_INT_EXPORT __declspec( dllimport )
69 #endif
70 
71 #else
72 
73 #ifdef GECODE_GCC_HAS_CLASS_VISIBILITY
74 #define GECODE_INT_EXPORT __attribute__ ((visibility("default")))
75 #else
76 #define GECODE_INT_EXPORT
77 #endif
78 
79 #endif
80 
81 // Configure auto-linking
82 #ifndef GECODE_BUILD_INT
83 #define GECODE_LIBRARY_NAME "Int"
85 #endif
86 
98 #include <gecode/int/exception.hpp>
99 
100 namespace Gecode { namespace Int {
101 
109  namespace Limits {
111  const int max = INT_MAX - 1;
113  const int min = -max;
115  const int infinity = max + 1;
117  bool valid(int n);
119  bool valid(double n);
121  void check(int n, const char* l);
123  void check(double n, const char* l);
125  void positive(int n, const char* l);
127  void positive(double n, const char* l);
129  void nonnegative(int n, const char* l);
131  void nonnegative(double n, const char* l);
133  const double double_max = 9007199254740991.0;
135  const double double_min = -9007199254740991.0;
137  void double_check(double n, const char* l);
139  const double double_infinity = DBL_MAX;
140  }
141 
142 }}
143 
144 #include <gecode/int/limits.hpp>
145 
146 namespace Gecode {
147 
148  class IntSetRanges;
149 
150  template<class I> class IntSetInit;
151 
159  class IntSet : public SharedHandle {
160  friend class IntSetRanges;
161  template<class I> friend class IntSetInit;
162  private:
164  class Range {
165  public:
166  int min, max;
167  };
168  class IntSetObject : public SharedHandle::Object {
169  public:
171  unsigned int size;
173  int n;
175  Range* r;
177  GECODE_INT_EXPORT static IntSetObject* allocate(int m);
179  GECODE_INT_EXPORT SharedHandle::Object* copy(void) const;
181  GECODE_INT_EXPORT bool in(int n) const;
183  GECODE_INT_EXPORT virtual ~IntSetObject(void);
184  };
186  class MinInc;
188  GECODE_INT_EXPORT void normalize(Range* r, int n);
190  GECODE_INT_EXPORT void init(int n, int m);
192  GECODE_INT_EXPORT void init(const int r[], int n);
194  GECODE_INT_EXPORT void init(const int r[][2], int n);
195  public:
197 
198 
199  IntSet(void);
204  IntSet(int n, int m);
206  IntSet(const int r[], int n);
212  IntSet(const int r[][2], int n);
214  template<class I>
215  explicit IntSet(I& i);
217 
219 
220 
221  int ranges(void) const;
223  int min(int i) const;
225  int max(int i) const;
227  unsigned int width(int i) const;
229 
231 
232 
233  bool in(int n) const;
235  unsigned int size(void) const;
237  unsigned int width(void) const;
239  int min(void) const;
241  int max(void) const;
243 
245 
246 
249  };
250 
256  class IntSetRanges {
257  private:
259  const IntSet::Range* i;
261  const IntSet::Range* e;
262  public:
264 
265 
266  IntSetRanges(void);
268  IntSetRanges(const IntSet& s);
270  void init(const IntSet& s);
272 
274 
275 
276  bool operator ()(void) const;
278  void operator ++(void);
280 
282 
283 
284  int min(void) const;
286  int max(void) const;
288  unsigned int width(void) const;
290  };
291 
297  class IntSetValues : public Iter::Ranges::ToValues<IntSetRanges> {
298  public:
300 
301 
302  IntSetValues(void);
304  IntSetValues(const IntSet& s);
306  void init(const IntSet& s);
308  };
309 
314  template<class Char, class Traits>
315  std::basic_ostream<Char,Traits>&
316  operator <<(std::basic_ostream<Char,Traits>& os, const IntSet& s);
317 
318 }
319 
320 #include <gecode/int/int-set-1.hpp>
321 
322 #include <gecode/int/var-imp.hpp>
323 
324 namespace Gecode {
325 
326  namespace Int {
327  class IntView;
328  }
329 
335  class IntVar : public VarImpVar<Int::IntVarImp> {
336  friend class IntVarArray;
337  friend class IntVarArgs;
338  private:
346  void _init(Space& home, int min, int max);
353  void _init(Space& home, const IntSet& d);
354  public:
356 
357 
358  IntVar(void);
360  IntVar(const IntVar& y);
362  IntVar(const Int::IntView& y);
374  GECODE_INT_EXPORT IntVar(Space& home, int min, int max);
386  GECODE_INT_EXPORT IntVar(Space& home, const IntSet& d);
388 
390 
391 
392  int min(void) const;
394  int max(void) const;
396  int med(void) const;
404  int val(void) const;
405 
407  unsigned int size(void) const;
409  unsigned int width(void) const;
411  unsigned int regret_min(void) const;
413  unsigned int regret_max(void) const;
415 
417 
418 
419  bool range(void) const;
421  bool in(int n) const;
423  };
424 
429  template<class Char, class Traits>
430  std::basic_ostream<Char,Traits>&
431  operator <<(std::basic_ostream<Char,Traits>& os, const IntVar& x);
432 
438  public:
440 
441 
442  IntVarRanges(void);
444  IntVarRanges(const IntVar& x);
446  void init(const IntVar& x);
448  };
449 
454  class IntVarValues : public Iter::Ranges::ToValues<IntVarRanges> {
455  public:
457 
458 
459  IntVarValues(void);
461  IntVarValues(const IntVar& x);
463  void init(const IntVar& x);
465  };
466 
467  namespace Int {
468  class BoolView;
469  }
470 
476  class BoolVar : public VarImpVar<Int::BoolVarImp> {
477  friend class BoolVarArray;
478  friend class BoolVarArgs;
479  private:
487  void _init(Space& home, int min, int max);
488  public:
490 
491 
492  BoolVar(void);
494  BoolVar(const BoolVar& y);
496  BoolVar(const Int::BoolView& y);
508  GECODE_INT_EXPORT BoolVar(Space& home, int min, int max);
510 
512 
513 
514  int min(void) const;
516  int max(void) const;
518  int med(void) const;
526  int val(void) const;
527 
529  unsigned int size(void) const;
531  unsigned int width(void) const;
533  unsigned int regret_min(void) const;
535  unsigned int regret_max(void) const;
537 
539 
540 
541  bool range(void) const;
543  bool in(int n) const;
545 
547 
548 
549  bool zero(void) const;
551  bool one(void) const;
553  bool none(void) const;
555  };
556 
561  template<class Char, class Traits>
562  std::basic_ostream<Char,Traits>&
563  operator <<(std::basic_ostream<Char,Traits>& os, const BoolVar& x);
564 
565 }
566 
567 
568 #include <gecode/int/view.hpp>
569 #include <gecode/int/propagator.hpp>
570 
571 namespace Gecode {
572 
582 
584 
585 }
586 
588 
589 namespace Gecode {
590 
592  class IntArgs : public PrimArgArray<int> {
593  public:
595 
596 
597  IntArgs(void);
599  explicit IntArgs(int n);
601  IntArgs(const SharedArray<int>& x);
603  IntArgs(const std::vector<int>& x);
606  IntArgs(int n, int e0, ...);
608  IntArgs(int n, const int* e);
610  IntArgs(const PrimArgArray<int>& a);
611 
613  static IntArgs create(int n, int start, int inc=1);
615  };
616 
618  class IntVarArgs : public VarArgArray<IntVar> {
619  public:
621 
622 
623  IntVarArgs(void) {}
625  explicit IntVarArgs(int n) : VarArgArray<IntVar>(n) {}
642  IntVarArgs(Space& home, int n, int min, int max);
655  IntVarArgs(Space& home, int n, const IntSet& s);
657  };
666  class BoolVarArgs : public VarArgArray<BoolVar> {
667  public:
669 
670 
671  BoolVarArgs(void) {}
673  explicit BoolVarArgs(int n) : VarArgArray<BoolVar>(n) {}
678  : VarArgArray<BoolVar>(a) {}
691  BoolVarArgs(Space& home, int n, int min, int max);
693  };
695 
711  class IntVarArray : public VarArray<IntVar> {
712  public:
714 
715 
716  IntVarArray(void);
718  IntVarArray(Space& home, int n);
720  IntVarArray(const IntVarArray& a);
722  IntVarArray(Space& home, const IntVarArgs& a);
735  IntVarArray(Space& home, int n, int min, int max);
748  IntVarArray(Space& home, int n, const IntSet& s);
750  };
751 
756  class BoolVarArray : public VarArray<BoolVar> {
757  public:
759 
760 
761  BoolVarArray(void);
763  BoolVarArray(Space& home, int n);
765  BoolVarArray(const BoolVarArray& a);
767  BoolVarArray(Space& home, const BoolVarArgs& a);
780  BoolVarArray(Space& home, int n, int min, int max);
782  };
783 
784 }
785 
786 #include <gecode/int/int-set-2.hpp>
787 
788 #include <gecode/int/array.hpp>
789 
790 namespace Gecode {
791 
796  enum IntRelType {
803  };
804 
809  enum BoolOpType {
815  };
816 
830  enum IntConLevel {
835  };
836 
842  enum TaskType {
843  TT_FIXP, //< Task with fixed processing time
844  TT_FIXS, //< Task with fixed start time
845  TT_FIXE //< Task with fixed end time
846  };
847 
854 
856  template<>
858  public:
862  };
863 
864 
872 
873  GECODE_INT_EXPORT void
874  dom(Home home, IntVar x, int n,
875  IntConLevel icl=ICL_DEF);
877  GECODE_INT_EXPORT void
878  dom(Home home, const IntVarArgs& x, int n,
879  IntConLevel icl=ICL_DEF);
880 
882  GECODE_INT_EXPORT void
883  dom(Home home, IntVar x, int l, int m,
884  IntConLevel icl=ICL_DEF);
886  GECODE_INT_EXPORT void
887  dom(Home home, const IntVarArgs& x, int l, int m,
888  IntConLevel icl=ICL_DEF);
889 
891  GECODE_INT_EXPORT void
892  dom(Home home, IntVar x, const IntSet& s,
893  IntConLevel icl=ICL_DEF);
895  GECODE_INT_EXPORT void
896  dom(Home home, const IntVarArgs& x, const IntSet& s,
897  IntConLevel icl=ICL_DEF);
898 
900  GECODE_INT_EXPORT void
901  dom(Home home, IntVar x, int n, BoolVar b,
902  IntConLevel icl=ICL_DEF);
904  GECODE_INT_EXPORT void
905  dom(Home home, IntVar x, int l, int m, BoolVar b,
906  IntConLevel icl=ICL_DEF);
908  GECODE_INT_EXPORT void
909  dom(Home home, IntVar x, const IntSet& s, BoolVar b,
910  IntConLevel icl=ICL_DEF);
912 
913 
924  GECODE_INT_EXPORT void
925  rel(Home home, IntVar x0, IntRelType r, IntVar x1,
926  IntConLevel icl=ICL_DEF);
933  GECODE_INT_EXPORT void
934  rel(Home home, const IntVarArgs& x, IntRelType r, IntVar y,
935  IntConLevel icl=ICL_DEF);
939  GECODE_INT_EXPORT void
940  rel(Home home, IntVar x, IntRelType r, int c,
941  IntConLevel icl=ICL_DEF);
945  GECODE_INT_EXPORT void
946  rel(Home home, const IntVarArgs& x, IntRelType r, int c,
947  IntConLevel icl=ICL_DEF);
954  GECODE_INT_EXPORT void
955  rel(Home home, IntVar x0, IntRelType r, IntVar x1, BoolVar b,
956  IntConLevel icl=ICL_DEF);
963  GECODE_INT_EXPORT void
964  rel(Home home, IntVar x, IntRelType r, int c, BoolVar b,
965  IntConLevel icl=ICL_DEF);
980  GECODE_INT_EXPORT void
981  rel(Home home, const IntVarArgs& x, IntRelType r,
982  IntConLevel icl=ICL_DEF);
997  GECODE_INT_EXPORT void
998  rel(Home home, const IntVarArgs& x, IntRelType r, const IntVarArgs& y,
999  IntConLevel icl=ICL_DEF);
1000 
1008  GECODE_INT_EXPORT void
1009  rel(Home home, BoolVar x0, IntRelType r, BoolVar x1,
1010  IntConLevel icl=ICL_DEF);
1014  GECODE_INT_EXPORT void
1015  rel(Home home, BoolVar x0, IntRelType r, BoolVar x1, BoolVar b,
1016  IntConLevel icl=ICL_DEF);
1020  GECODE_INT_EXPORT void
1021  rel(Home home, const BoolVarArgs& x, IntRelType r, BoolVar y,
1022  IntConLevel icl=ICL_DEF);
1030  GECODE_INT_EXPORT void
1031  rel(Home home, BoolVar x, IntRelType r, int n,
1032  IntConLevel icl=ICL_DEF);
1040  GECODE_INT_EXPORT void
1041  rel(Home home, BoolVar x, IntRelType r, int n, BoolVar b,
1042  IntConLevel icl=ICL_DEF);
1050  GECODE_INT_EXPORT void
1051  rel(Home home, const BoolVarArgs& x, IntRelType r, int n,
1052  IntConLevel icl=ICL_DEF);
1062  GECODE_INT_EXPORT void
1063  rel(Home home, const BoolVarArgs& x, IntRelType r, const BoolVarArgs& y,
1064  IntConLevel icl=ICL_DEF);
1075  GECODE_INT_EXPORT void
1076  rel(Home home, const BoolVarArgs& x, IntRelType r,
1077  IntConLevel icl=ICL_DEF);
1083  GECODE_INT_EXPORT void
1084  rel(Home home, BoolVar x0, BoolOpType o, BoolVar x1, BoolVar x2,
1085  IntConLevel icl=ICL_DEF);
1094  GECODE_INT_EXPORT void
1095  rel(Home home, BoolVar x0, BoolOpType o, BoolVar x1, int n,
1096  IntConLevel icl=ICL_DEF);
1106  GECODE_INT_EXPORT void
1107  rel(Home home, BoolOpType o, const BoolVarArgs& x, BoolVar y,
1108  IntConLevel icl=ICL_DEF);
1121  GECODE_INT_EXPORT void
1122  rel(Home home, BoolOpType o, const BoolVarArgs& x, int n,
1123  IntConLevel icl=ICL_DEF);
1134  GECODE_INT_EXPORT void
1135  clause(Home home, BoolOpType o, const BoolVarArgs& x, const BoolVarArgs& y,
1136  BoolVar z, IntConLevel icl=ICL_DEF);
1150  GECODE_INT_EXPORT void
1151  clause(Home home, BoolOpType o, const BoolVarArgs& x, const BoolVarArgs& y,
1152  int n, IntConLevel icl=ICL_DEF);
1153 
1154 
1166  GECODE_INT_EXPORT void
1167  precede(Home home, const IntVarArgs& x, int s, int t,
1176  GECODE_INT_EXPORT void
1177  precede(Home home, const IntVarArgs& x, const IntArgs& c,
1179 
1180 
1186 
1187  GECODE_INT_EXPORT void
1188  member(Home home, const IntVarArgs& x, IntVar y,
1189  IntConLevel icl=ICL_DEF);
1191  GECODE_INT_EXPORT void
1192  member(Home home, const BoolVarArgs& x, BoolVar y,
1193  IntConLevel icl=ICL_DEF);
1195  GECODE_INT_EXPORT void
1196  member(Home home, const IntVarArgs& x, IntVar y, BoolVar b,
1197  IntConLevel icl=ICL_DEF);
1199  GECODE_INT_EXPORT void
1200  member(Home home, const BoolVarArgs& x, BoolVar y, BoolVar b,
1201  IntConLevel icl=ICL_DEF);
1203 
1204 
1211 
1218  GECODE_INT_EXPORT void
1219  element(Home home, IntSharedArray n, IntVar x0, IntVar x1,
1220  IntConLevel icl=ICL_DEF);
1226  GECODE_INT_EXPORT void
1227  element(Home home, IntSharedArray n, IntVar x0, BoolVar x1,
1228  IntConLevel icl=ICL_DEF);
1234  GECODE_INT_EXPORT void
1235  element(Home home, IntSharedArray n, IntVar x0, int x1,
1236  IntConLevel icl=ICL_DEF);
1242  GECODE_INT_EXPORT void
1243  element(Home home, const IntVarArgs& x, IntVar y0, IntVar y1,
1244  IntConLevel icl=ICL_DEF);
1250  GECODE_INT_EXPORT void
1251  element(Home home, const IntVarArgs& x, IntVar y0, int y1,
1252  IntConLevel icl=ICL_DEF);
1254  GECODE_INT_EXPORT void
1255  element(Home home, const BoolVarArgs& x, IntVar y0, BoolVar y1,
1256  IntConLevel icl=ICL_DEF);
1258  GECODE_INT_EXPORT void
1259  element(Home home, const BoolVarArgs& x, IntVar y0, int y1,
1260  IntConLevel icl=ICL_DEF);
1261 
1274  GECODE_INT_EXPORT void
1275  element(Home home, IntSharedArray a,
1276  IntVar x, int w, IntVar y, int h, IntVar z,
1277  IntConLevel icl=ICL_DEF);
1290  GECODE_INT_EXPORT void
1291  element(Home home, IntSharedArray a,
1292  IntVar x, int w, IntVar y, int h, BoolVar z,
1293  IntConLevel icl=ICL_DEF);
1309  GECODE_INT_EXPORT void
1310  element(Home home, const IntVarArgs& a,
1311  IntVar x, int w, IntVar y, int h, IntVar z,
1312  IntConLevel icl=ICL_DEF);
1325  GECODE_INT_EXPORT void
1326  element(Home home, const BoolVarArgs& a,
1327  IntVar x, int w, IntVar y, int h, BoolVar z,
1328  IntConLevel icl=ICL_DEF);
1330 
1331 
1346  GECODE_INT_EXPORT void
1347  distinct(Home home, const IntVarArgs& x,
1348  IntConLevel icl=ICL_DEF);
1361  GECODE_INT_EXPORT void
1362  distinct(Home home, const IntArgs& n, const IntVarArgs& x,
1363  IntConLevel icl=ICL_DEF);
1365 
1366 
1384  GECODE_INT_EXPORT void
1385  channel(Home home, const IntVarArgs& x, const IntVarArgs& y,
1386  IntConLevel icl=ICL_DEF);
1387 
1401  GECODE_INT_EXPORT void
1402  channel(Home home, const IntVarArgs& x, int xoff,
1403  const IntVarArgs& y, int yoff,
1404  IntConLevel icl=ICL_DEF);
1405 
1407  GECODE_INT_EXPORT void
1408  channel(Home home, BoolVar x0, IntVar x1,
1409  IntConLevel icl=ICL_DEF);
1411  forceinline void
1412  channel(Home home, IntVar x0, BoolVar x1,
1413  IntConLevel icl=ICL_DEF) {
1414  channel(home,x1,x0,icl);
1415  }
1421  GECODE_INT_EXPORT void
1422  channel(Home home, const BoolVarArgs& x, IntVar y, int o=0,
1423  IntConLevel icl=ICL_DEF);
1425 
1426 
1443  GECODE_INT_EXPORT void
1444  sorted(Home home, const IntVarArgs& x, const IntVarArgs& y,
1445  IntConLevel icl=ICL_DEF);
1446 
1458  GECODE_INT_EXPORT void
1459  sorted(Home home, const IntVarArgs& x, const IntVarArgs& y,
1460  const IntVarArgs& z,
1461  IntConLevel icl=ICL_DEF);
1463 
1464 
1483  GECODE_INT_EXPORT void
1484  count(Home home, const IntVarArgs& x, int n, IntRelType r, int m,
1485  IntConLevel icl=ICL_DEF);
1490  GECODE_INT_EXPORT void
1491  count(Home home, const IntVarArgs& x, const IntSet& y, IntRelType r, int m,
1492  IntConLevel icl=ICL_DEF);
1500  GECODE_INT_EXPORT void
1501  count(Home home, const IntVarArgs& x, IntVar y, IntRelType r, int m,
1502  IntConLevel icl=ICL_DEF);
1510  GECODE_INT_EXPORT void
1511  count(Home home, const IntVarArgs& x, const IntArgs& y, IntRelType r, int m,
1512  IntConLevel icl=ICL_DEF);
1517  GECODE_INT_EXPORT void
1518  count(Home home, const IntVarArgs& x, int n, IntRelType r, IntVar z,
1519  IntConLevel icl=ICL_DEF);
1524  GECODE_INT_EXPORT void
1525  count(Home home, const IntVarArgs& x, const IntSet& y, IntRelType r, IntVar z,
1526  IntConLevel icl=ICL_DEF);
1534  GECODE_INT_EXPORT void
1535  count(Home home, const IntVarArgs& x, IntVar y, IntRelType r, IntVar z,
1536  IntConLevel icl=ICL_DEF);
1544  GECODE_INT_EXPORT void
1545  count(Home home, const IntVarArgs& x, const IntArgs& y, IntRelType r, IntVar z,
1546  IntConLevel icl=ICL_DEF);
1547 
1561  GECODE_INT_EXPORT void
1562  count(Home home, const IntVarArgs& x, const IntVarArgs& c,
1563  IntConLevel icl=ICL_DEF);
1564 
1578  GECODE_INT_EXPORT void
1579  count(Home home, const IntVarArgs& x, const IntSetArgs& c,
1580  IntConLevel icl=ICL_DEF);
1581 
1598  GECODE_INT_EXPORT void
1599  count(Home home, const IntVarArgs& x,
1600  const IntVarArgs& c, const IntArgs& v,
1601  IntConLevel icl=ICL_DEF);
1602 
1619  GECODE_INT_EXPORT void
1620  count(Home home, const IntVarArgs& x,
1621  const IntSetArgs& c, const IntArgs& v,
1622  IntConLevel icl=ICL_DEF);
1623 
1640  GECODE_INT_EXPORT void
1641  count(Home home, const IntVarArgs& x,
1642  const IntSet& c, const IntArgs& v,
1643  IntConLevel icl=ICL_DEF);
1644 
1646 
1661  GECODE_INT_EXPORT void
1662  nvalues(Home home, const IntVarArgs& x, IntRelType r, int y,
1663  IntConLevel icl=ICL_DEF);
1667  GECODE_INT_EXPORT void
1668  nvalues(Home home, const IntVarArgs& x, IntRelType r, IntVar y,
1669  IntConLevel icl=ICL_DEF);
1673  GECODE_INT_EXPORT void
1674  nvalues(Home home, const BoolVarArgs& x, IntRelType r, int y,
1675  IntConLevel icl=ICL_DEF);
1679  GECODE_INT_EXPORT void
1680  nvalues(Home home, const BoolVarArgs& x, IntRelType r, IntVar y,
1681  IntConLevel icl=ICL_DEF);
1683 
1704  GECODE_INT_EXPORT void
1705  sequence(Home home, const IntVarArgs& x, const IntSet& s,
1706  int q, int l, int u, IntConLevel icl=ICL_DEF);
1707 
1722  GECODE_INT_EXPORT void
1723  sequence(Home home, const BoolVarArgs& x, const IntSet& s,
1724  int q, int l, int u, IntConLevel icl=ICL_DEF);
1725 
1727 
1740 
1748  class DFA : public SharedHandle {
1749  private:
1751  class DFAI;
1752  public:
1754  class Transition {
1755  public:
1756  int i_state;
1757  int symbol;
1758  int o_state;
1759  };
1761  class Transitions {
1762  private:
1764  const Transition* c_trans;
1766  const Transition* e_trans;
1767  public:
1769  Transitions(const DFA& d);
1771  Transitions(const DFA& d, int n);
1773  bool operator ()(void) const;
1775  void operator ++(void);
1777  int i_state(void) const;
1779  int symbol(void) const;
1781  int o_state(void) const;
1782  };
1784  class Symbols {
1785  private:
1787  const Transition* c_trans;
1789  const Transition* e_trans;
1790  public:
1792  Symbols(const DFA& d);
1794  bool operator ()(void) const;
1796  void operator ++(void);
1798  int val(void) const;
1799  };
1800  public:
1801  friend class Transitions;
1803  DFA(void);
1816  DFA(int s, Transition t[], int f[], bool minimize=true);
1818  DFA(const DFA& d);
1820  int n_states(void) const;
1822  int n_transitions(void) const;
1824  unsigned int n_symbols(void) const;
1826  unsigned int max_degree(void) const;
1828  int final_fst(void) const;
1830  int final_lst(void) const;
1832  int symbol_min(void) const;
1834  int symbol_max(void) const;
1835  };
1836 
1837 
1849  };
1850 
1861  GECODE_INT_EXPORT void
1862  extensional(Home home, const IntVarArgs& x, DFA d,
1863  IntConLevel icl=ICL_DEF);
1864 
1875  GECODE_INT_EXPORT void
1876  extensional(Home home, const BoolVarArgs& x, DFA d,
1877  IntConLevel icl=ICL_DEF);
1878 
1885  class TupleSet : public SharedHandle {
1886  public:
1891  typedef int* Tuple;
1892 
1898  : public SharedHandle::Object {
1899  public:
1901  int arity;
1903  int size;
1909  int* data;
1911  int excess;
1913  int min, max;
1915  unsigned int domsize;
1920 
1922  template<class T>
1923  void add(T t);
1925  GECODE_INT_EXPORT void finalize(void);
1927  GECODE_INT_EXPORT void resize(void);
1929  bool finalized(void) const;
1931  TupleSetI(void);
1933  GECODE_INT_EXPORT virtual ~TupleSetI(void);
1935  GECODE_INT_EXPORT virtual SharedHandle::Object* copy(void) const;
1936  };
1937 
1939  TupleSetI* implementation(void);
1940 
1942  TupleSet(void);
1944  TupleSet(const TupleSet& d);
1945 
1947  void add(const IntArgs& tuple);
1949  void finalize(void);
1951  bool finalized(void) const;
1953  int arity(void) const;
1955  int tuples(void) const;
1957  Tuple operator [](int i) const;
1959  int min(void) const;
1961  int max(void) const;
1962  };
1963 
1982  GECODE_INT_EXPORT void
1983  extensional(Home home, const IntVarArgs& x, const TupleSet& t,
1985 
1996  GECODE_INT_EXPORT void
1997  extensional(Home home, const BoolVarArgs& x, const TupleSet& t,
2000 
2001 }
2002 
2005 
2006 namespace Gecode {
2007 
2019  GECODE_INT_EXPORT void
2020  min(Home home, IntVar x0, IntVar x1, IntVar x2,
2021  IntConLevel icl=ICL_DEF);
2029  GECODE_INT_EXPORT void
2030  min(Home home, const IntVarArgs& x, IntVar y,
2031  IntConLevel icl=ICL_DEF);
2037  GECODE_INT_EXPORT void
2038  max(Home home, IntVar x0, IntVar x1, IntVar x2,
2039  IntConLevel icl=ICL_DEF);
2047  GECODE_INT_EXPORT void
2048  max(Home home, const IntVarArgs& x, IntVar y,
2049  IntConLevel icl=ICL_DEF);
2050 
2056  GECODE_INT_EXPORT void
2057  abs(Home home, IntVar x0, IntVar x1,
2058  IntConLevel icl=ICL_DEF);
2059 
2065  GECODE_INT_EXPORT void
2066  mult(Home home, IntVar x0, IntVar x1, IntVar x2,
2067  IntConLevel icl=ICL_DEF);
2068 
2074  GECODE_INT_EXPORT void
2075  sqr(Home home, IntVar x0, IntVar x1,
2076  IntConLevel icl=ICL_DEF);
2077 
2083  GECODE_INT_EXPORT void
2084  sqrt(Home home, IntVar x0, IntVar x1,
2085  IntConLevel icl=ICL_DEF);
2086 
2091  GECODE_INT_EXPORT void
2092  divmod(Home home, IntVar x0, IntVar x1, IntVar x2, IntVar x3,
2093  IntConLevel icl=ICL_DEF);
2094 
2099  GECODE_INT_EXPORT void
2100  div(Home home, IntVar x0, IntVar x1, IntVar x2,
2101  IntConLevel icl=ICL_DEF);
2102 
2107  GECODE_INT_EXPORT void
2108  mod(Home home, IntVar x0, IntVar x1, IntVar x2,
2109  IntConLevel icl=ICL_DEF);
2111 
2143  GECODE_INT_EXPORT void
2144  linear(Home home, const IntVarArgs& x,
2145  IntRelType r, int c,
2146  IntConLevel icl=ICL_DEF);
2150  GECODE_INT_EXPORT void
2151  linear(Home home, const IntVarArgs& x,
2152  IntRelType r, IntVar y,
2153  IntConLevel icl=ICL_DEF);
2157  GECODE_INT_EXPORT void
2158  linear(Home home, const IntVarArgs& x,
2159  IntRelType r, int c, BoolVar b,
2160  IntConLevel icl=ICL_DEF);
2164  GECODE_INT_EXPORT void
2165  linear(Home home, const IntVarArgs& x,
2166  IntRelType r, IntVar y, BoolVar b,
2167  IntConLevel icl=ICL_DEF);
2174  GECODE_INT_EXPORT void
2175  linear(Home home, const IntArgs& a, const IntVarArgs& x,
2176  IntRelType r, int c,
2177  IntConLevel icl=ICL_DEF);
2184  GECODE_INT_EXPORT void
2185  linear(Home home, const IntArgs& a, const IntVarArgs& x,
2186  IntRelType r, IntVar y,
2187  IntConLevel icl=ICL_DEF);
2194  GECODE_INT_EXPORT void
2195  linear(Home home, const IntArgs& a, const IntVarArgs& x,
2196  IntRelType r, int c, BoolVar b,
2197  IntConLevel icl=ICL_DEF);
2204  GECODE_INT_EXPORT void
2205  linear(Home home, const IntArgs& a, const IntVarArgs& x,
2206  IntRelType r, IntVar y, BoolVar b,
2207  IntConLevel icl=ICL_DEF);
2208 
2209 
2237  GECODE_INT_EXPORT void
2238  linear(Home home, const BoolVarArgs& x,
2239  IntRelType r, int c,
2240  IntConLevel icl=ICL_DEF);
2244  GECODE_INT_EXPORT void
2245  linear(Home home, const BoolVarArgs& x,
2246  IntRelType r, int c, BoolVar b,
2247  IntConLevel icl=ICL_DEF);
2251  GECODE_INT_EXPORT void
2252  linear(Home home, const BoolVarArgs& x,
2253  IntRelType r, IntVar y,
2254  IntConLevel icl=ICL_DEF);
2258  GECODE_INT_EXPORT void
2259  linear(Home home, const BoolVarArgs& x,
2260  IntRelType r, IntVar y, BoolVar b,
2261  IntConLevel icl=ICL_DEF);
2268  GECODE_INT_EXPORT void
2269  linear(Home home, const IntArgs& a, const BoolVarArgs& x,
2270  IntRelType r, int c,
2271  IntConLevel icl=ICL_DEF);
2278  GECODE_INT_EXPORT void
2279  linear(Home home, const IntArgs& a, const BoolVarArgs& x,
2280  IntRelType r, int c, BoolVar b,
2281  IntConLevel icl=ICL_DEF);
2288  GECODE_INT_EXPORT void
2289  linear(Home home, const IntArgs& a, const BoolVarArgs& x,
2290  IntRelType r, IntVar y,
2291  IntConLevel icl=ICL_DEF);
2298  GECODE_INT_EXPORT void
2299  linear(Home home, const IntArgs& a, const BoolVarArgs& x,
2300  IntRelType r, IntVar y, BoolVar b,
2301  IntConLevel icl=ICL_DEF);
2302 
2303 
2330  GECODE_INT_EXPORT void
2331  binpacking(Home home,
2332  const IntVarArgs& l,
2333  const IntVarArgs& b, const IntArgs& s,
2334  IntConLevel icl=ICL_DEF);
2354  GECODE_INT_EXPORT void
2355  nooverlap(Home home,
2356  const IntVarArgs& x, const IntArgs& w,
2357  const IntVarArgs& y, const IntArgs& h,
2358  IntConLevel icl=ICL_DEF);
2374  GECODE_INT_EXPORT void
2375  nooverlap(Home home,
2376  const IntVarArgs& x, const IntArgs& w,
2377  const IntVarArgs& y, const IntArgs& h,
2378  const BoolVarArgs& o,
2379  IntConLevel icl=ICL_DEF);
2398  GECODE_INT_EXPORT void
2399  nooverlap(Home home,
2400  const IntVarArgs& x0, const IntVarArgs& w, const IntVarArgs& x1,
2401  const IntVarArgs& y0, const IntVarArgs& h, const IntVarArgs& y1,
2402  IntConLevel icl=ICL_DEF);
2422  GECODE_INT_EXPORT void
2423  nooverlap(Home home,
2424  const IntVarArgs& x0, const IntVarArgs& w, const IntVarArgs& x1,
2425  const IntVarArgs& y0, const IntVarArgs& h, const IntVarArgs& y1,
2426  const BoolVarArgs& o,
2427  IntConLevel icl=ICL_DEF);
2428 
2429 
2435 
2478  GECODE_INT_EXPORT void
2479  cumulatives(Home home, const IntVarArgs& m,
2480  const IntVarArgs& s, const IntVarArgs& p,
2481  const IntVarArgs& e, const IntVarArgs& u,
2482  const IntArgs& c, bool at_most,
2483  IntConLevel icl=ICL_DEF);
2488  GECODE_INT_EXPORT void
2489  cumulatives(Home home, const IntArgs& m,
2490  const IntVarArgs& s, const IntVarArgs& p,
2491  const IntVarArgs& e, const IntVarArgs& u,
2492  const IntArgs& c, bool at_most,
2493  IntConLevel icl=ICL_DEF);
2498  GECODE_INT_EXPORT void
2499  cumulatives(Home home, const IntVarArgs& m,
2500  const IntVarArgs& s, const IntArgs& p,
2501  const IntVarArgs& e, const IntVarArgs& u,
2502  const IntArgs& c, bool at_most,
2503  IntConLevel icl=ICL_DEF);
2508  GECODE_INT_EXPORT void
2509  cumulatives(Home home, const IntArgs& m,
2510  const IntVarArgs& s, const IntArgs& p,
2511  const IntVarArgs& e, const IntVarArgs& u,
2512  const IntArgs& c, bool at_most,
2513  IntConLevel icl=ICL_DEF);
2518  GECODE_INT_EXPORT void
2519  cumulatives(Home home, const IntVarArgs& m,
2520  const IntVarArgs& s, const IntVarArgs& p,
2521  const IntVarArgs& e, const IntArgs& u,
2522  const IntArgs& c, bool at_most,
2523  IntConLevel icl=ICL_DEF);
2528  GECODE_INT_EXPORT void
2529  cumulatives(Home home, const IntArgs& m,
2530  const IntVarArgs& s, const IntVarArgs& p,
2531  const IntVarArgs& e, const IntArgs& u,
2532  const IntArgs& c, bool at_most,
2533  IntConLevel icl=ICL_DEF);
2538  GECODE_INT_EXPORT void
2539  cumulatives(Home home, const IntVarArgs& m,
2540  const IntVarArgs& s, const IntArgs& p,
2541  const IntVarArgs& e, const IntArgs& u,
2542  const IntArgs& c, bool at_most,
2543  IntConLevel icl=ICL_DEF);
2548  GECODE_INT_EXPORT void
2549  cumulatives(Home home, const IntArgs& m,
2550  const IntVarArgs& s, const IntArgs& p,
2551  const IntVarArgs& e, const IntArgs& u,
2552  const IntArgs& c, bool at_most,
2553  IntConLevel icl=ICL_DEF);
2554 
2573  GECODE_INT_EXPORT void
2574  unary(Home home, const IntVarArgs& s, const IntArgs& p,
2575  IntConLevel icl=ICL_DEF);
2576 
2597  GECODE_INT_EXPORT void
2598  unary(Home home, const IntVarArgs& s, const IntArgs& p,
2599  const BoolVarArgs& m, IntConLevel icl=ICL_DEF);
2600 
2629  GECODE_INT_EXPORT void
2630  unary(Home home, const TaskTypeArgs& t,
2631  const IntVarArgs& flex, const IntArgs& fix, IntConLevel icl=ICL_DEF);
2632 
2663  GECODE_INT_EXPORT void
2664  unary(Home home, const TaskTypeArgs& t,
2665  const IntVarArgs& flex, const IntArgs& fix,
2666  const BoolVarArgs& m, IntConLevel icl=ICL_DEF);
2667 
2687  GECODE_INT_EXPORT void
2688  unary(Home home, const IntVarArgs& s, const IntVarArgs& p,
2689  const IntVarArgs& e, IntConLevel icl=ICL_DEF);
2690 
2712  GECODE_INT_EXPORT void
2713  unary(Home home, const IntVarArgs& s, const IntVarArgs& p,
2714  const IntVarArgs& e, const BoolVarArgs& m, IntConLevel icl=ICL_DEF);
2715 
2750  GECODE_INT_EXPORT void
2751  cumulative(Home home, int c, const TaskTypeArgs& t,
2752  const IntVarArgs& flex, const IntArgs& fix, const IntArgs& u,
2753  IntConLevel icl=ICL_DEF);
2754 
2755 
2760  GECODE_INT_EXPORT void
2761  cumulative(Home home, IntVar c, const TaskTypeArgs& t,
2762  const IntVarArgs& flex, const IntArgs& fix, const IntArgs& u,
2763  IntConLevel icl=ICL_DEF);
2764 
2801  GECODE_INT_EXPORT void
2802  cumulative(Home home, int c, const TaskTypeArgs& t,
2803  const IntVarArgs& flex, const IntArgs& fix, const IntArgs& u,
2804  const BoolVarArgs& m, IntConLevel icl=ICL_DEF);
2805 
2809  GECODE_INT_EXPORT void
2810  cumulative(Home home, IntVar c, const TaskTypeArgs& t,
2811  const IntVarArgs& flex, const IntArgs& fix, const IntArgs& u,
2812  const BoolVarArgs& m, IntConLevel icl=ICL_DEF);
2813 
2838  GECODE_INT_EXPORT void
2839  cumulative(Home home, int c, const IntVarArgs& s, const IntArgs& p,
2840  const IntArgs& u, IntConLevel icl=ICL_DEF);
2841 
2845  GECODE_INT_EXPORT void
2846  cumulative(Home home, IntVar c, const IntVarArgs& s, const IntArgs& p,
2847  const IntArgs& u, IntConLevel icl=ICL_DEF);
2848 
2875  GECODE_INT_EXPORT void
2876  cumulative(Home home, int c, const IntVarArgs& s, const IntArgs& p,
2877  const IntArgs& u, const BoolVarArgs& m, IntConLevel icl=ICL_DEF);
2878 
2882  GECODE_INT_EXPORT void
2883  cumulative(Home home, IntVar c, const IntVarArgs& s, const IntArgs& p,
2884  const IntArgs& u, const BoolVarArgs& m, IntConLevel icl=ICL_DEF);
2885 
2914  GECODE_INT_EXPORT void
2915  cumulative(Home home, int c, const IntVarArgs& s, const IntVarArgs& p,
2916  const IntVarArgs& e, const IntArgs& u, IntConLevel icl=ICL_DEF);
2917 
2921  GECODE_INT_EXPORT void
2922  cumulative(Home home, IntVar c, const IntVarArgs& s, const IntVarArgs& p,
2923  const IntVarArgs& e, const IntArgs& u, IntConLevel icl=ICL_DEF);
2924 
2955  GECODE_INT_EXPORT void
2956  cumulative(Home home, int c, const IntVarArgs& s, const IntVarArgs& p,
2957  const IntVarArgs& e, const IntArgs& u, const BoolVarArgs& m,
2958  IntConLevel icl=ICL_DEF);
2959 
2963  GECODE_INT_EXPORT void
2964  cumulative(Home home, IntVar c, const IntVarArgs& s, const IntVarArgs& p,
2965  const IntVarArgs& e, const IntArgs& u, const BoolVarArgs& m,
2966  IntConLevel icl=ICL_DEF);
2968 
2969 
2989  GECODE_INT_EXPORT void
2990  circuit(Home home, const IntVarArgs& x,
2991  IntConLevel icl=ICL_DEF);
3007  GECODE_INT_EXPORT void
3008  circuit(Home home, int offset, const IntVarArgs& x,
3009  IntConLevel icl=ICL_DEF);
3031  GECODE_INT_EXPORT void
3032  circuit(Home home,
3033  const IntArgs& c,
3034  const IntVarArgs& x, const IntVarArgs& y, IntVar z,
3035  IntConLevel icl=ICL_DEF);
3058  GECODE_INT_EXPORT void
3059  circuit(Home home,
3060  const IntArgs& c, int offset,
3061  const IntVarArgs& x, const IntVarArgs& y, IntVar z,
3062  IntConLevel icl=ICL_DEF);
3081  GECODE_INT_EXPORT void
3082  circuit(Home home,
3083  const IntArgs& c,
3084  const IntVarArgs& x, IntVar z,
3085  IntConLevel icl=ICL_DEF);
3106  GECODE_INT_EXPORT void
3107  circuit(Home home,
3108  const IntArgs& c, int offset,
3109  const IntVarArgs& x, IntVar z,
3110  IntConLevel icl=ICL_DEF);
3126  GECODE_INT_EXPORT void
3127  path(Home home, const IntVarArgs& x, IntVar s, IntVar e,
3128  IntConLevel icl=ICL_DEF);
3146  GECODE_INT_EXPORT void
3147  path(Home home, int offset, const IntVarArgs& x, IntVar s, IntVar e,
3148  IntConLevel icl=ICL_DEF);
3171  GECODE_INT_EXPORT void
3172  path(Home home,
3173  const IntArgs& c,
3174  const IntVarArgs& x, IntVar s, IntVar e, const IntVarArgs& y, IntVar z,
3175  IntConLevel icl=ICL_DEF);
3200  GECODE_INT_EXPORT void
3201  path(Home home,
3202  const IntArgs& c, int offset,
3203  const IntVarArgs& x, IntVar s, IntVar e, const IntVarArgs& y, IntVar z,
3204  IntConLevel icl=ICL_DEF);
3225  GECODE_INT_EXPORT void
3226  path(Home home,
3227  const IntArgs& c,
3228  const IntVarArgs& x, IntVar s, IntVar e, IntVar z,
3229  IntConLevel icl=ICL_DEF);
3252  GECODE_INT_EXPORT void
3253  path(Home home,
3254  const IntArgs& c, int offset,
3255  const IntVarArgs& x, IntVar s, IntVar e, IntVar z,
3256  IntConLevel icl=ICL_DEF);
3258 
3259 
3260 
3269 
3270  GECODE_INT_EXPORT void
3271  wait(Home home, IntVar x, void (*c)(Space& home),
3272  IntConLevel icl=ICL_DEF);
3274  GECODE_INT_EXPORT void
3275  wait(Home home, BoolVar x, void (*c)(Space& home),
3276  IntConLevel icl=ICL_DEF);
3278  GECODE_INT_EXPORT void
3279  wait(Home home, const IntVarArgs& x, void (*c)(Space& home),
3280  IntConLevel icl=ICL_DEF);
3282  GECODE_INT_EXPORT void
3283  wait(Home home, const BoolVarArgs& x, void (*c)(Space& home),
3284  IntConLevel icl=ICL_DEF);
3286  GECODE_INT_EXPORT void
3287  when(Home home, BoolVar x,
3288  void (*t)(Space& home), void (*e)(Space& home)= NULL,
3289  IntConLevel icl=ICL_DEF);
3291 
3292 
3317  GECODE_INT_EXPORT void
3318  unshare(Home home, IntVarArgs& x,
3319  IntConLevel icl=ICL_DEF);
3321  GECODE_INT_EXPORT void
3322  unshare(Home home, BoolVarArgs& x,
3323  IntConLevel icl=ICL_DEF);
3325 
3326 
3332 
3350 
3374  };
3375 
3388  };
3389 
3391  GECODE_INT_EXPORT void
3392  branch(Home home, const IntVarArgs& x,
3393  IntVarBranch vars, IntValBranch vals,
3394  const VarBranchOptions& o_vars = VarBranchOptions::def,
3395  const ValBranchOptions& o_vals = ValBranchOptions::def);
3397  GECODE_INT_EXPORT void
3398  branch(Home home, const IntVarArgs& x,
3399  const TieBreakVarBranch<IntVarBranch>& vars, IntValBranch vals,
3400  const TieBreakVarBranchOptions& o_vars = TieBreakVarBranchOptions::def,
3401  const ValBranchOptions& o_vals = ValBranchOptions::def);
3403  GECODE_INT_EXPORT void
3404  branch(Home home, IntVar x, IntValBranch vals,
3405  const ValBranchOptions& o_vals = ValBranchOptions::def);
3407  GECODE_INT_EXPORT void
3408  branch(Home home, const BoolVarArgs& x,
3409  IntVarBranch vars, IntValBranch vals,
3410  const VarBranchOptions& o_vars = VarBranchOptions::def,
3411  const ValBranchOptions& o_vals = ValBranchOptions::def);
3413  GECODE_INT_EXPORT void
3414  branch(Home home, const BoolVarArgs& x,
3415  const TieBreakVarBranch<IntVarBranch>& vars, IntValBranch vals,
3416  const TieBreakVarBranchOptions& o_vars = TieBreakVarBranchOptions::def,
3417  const ValBranchOptions& o_vals = ValBranchOptions::def);
3419  GECODE_INT_EXPORT void
3420  branch(Home home, BoolVar x, IntValBranch vals,
3421  const ValBranchOptions& o_vals = ValBranchOptions::def);
3422 
3424 
3430 
3431  enum IntAssign {
3436  };
3437 
3439  GECODE_INT_EXPORT void
3440  assign(Home home, const IntVarArgs& x, IntAssign vals,
3441  const ValBranchOptions& o_vals = ValBranchOptions::def);
3443  GECODE_INT_EXPORT void
3444  assign(Home home, IntVar x, IntAssign vals,
3445  const ValBranchOptions& o_vals = ValBranchOptions::def);
3447  GECODE_INT_EXPORT void
3448  assign(Home home, const BoolVarArgs& x, IntAssign vals,
3449  const ValBranchOptions& o_vals = ValBranchOptions::def);
3451  GECODE_INT_EXPORT void
3452  assign(Home home, BoolVar x, IntAssign vals,
3453  const ValBranchOptions& o_vals = ValBranchOptions::def);
3454 
3456 
3460  template<class Char, class Traits>
3461  std::basic_ostream<Char,Traits>&
3462  operator <<(std::basic_ostream<Char,Traits>& os, const DFA& d);
3463 
3467  template<class Char, class Traits>
3468  std::basic_ostream<Char,Traits>&
3469  operator <<(std::basic_ostream<Char,Traits>& os, const TupleSet& ts);
3470 
3471 }
3472 
3473 #endif
3474 
3475 // IFDEF: GECODE_HAS_INT_VARS
3476 // STATISTICS: int-post
3477