00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "FirstFailValueHeuristic.hh"
00025
00026 int** FirstFailValue::subSet(Implicative* home,int var,int* nbRanges) {
00027 switch (home->type_of_v[var]) {
00028 case VTYPE_INT : {
00029 IntVar* curVar = getIntVar(home,whichSpaceOwns(home,var),var);
00030 for (int scope=whichSpaceOwns(home,var)+1;scope<nbSpaces(home);scope++) {
00031 if (!scopeDefined(home,scope)) {
00032 int zeValue = getIntVar(home,whichSpaceOwns(home,var),var)->min();
00033 *nbRanges = 1;
00034 int** ret = new int*[2];
00035 ret[0]=new int[1];
00036 ret[1]=new int[1];
00037 ret[0][0]=zeValue;
00038 ret[1][0]=zeValue;
00039 return ret;
00040 }
00041
00042 IntVarValues it(*curVar);
00043 for (;it();++it) {
00044 int val = it.val();
00045 if (!getIntVar(home,scope,var)->in(val)) {
00046 int zeValue = val;
00047 *nbRanges = 1;
00048 int** ret = new int*[2];
00049 ret[0]=new int[1];
00050 ret[1]=new int[1];
00051 ret[0][0]=zeValue;
00052 ret[1][0]=zeValue;
00053 return ret;
00054 }
00055 }
00056 }
00057
00058 int zeValue = getIntVar(home,whichSpaceOwns(home,var),var)->min();
00059 *nbRanges = 1;
00060 int** ret = new int*[2];
00061 ret[0]=new int[1];
00062 ret[1]=new int[1];
00063 ret[0][0]=zeValue;
00064 ret[1][0]=zeValue;
00065 return ret;
00066 }
00067 break;
00068 case VTYPE_BOOL: {
00069 int zeValue = getBoolVar(home,whichSpaceOwns(home,var),var)->min();
00070 *nbRanges = 1;
00071 int** ret = new int*[2];
00072 ret[0]=new int[1];
00073 ret[1]=new int[1];
00074 ret[0][0]=zeValue;
00075 ret[1][0]=zeValue;
00076 return ret;
00077 }
00078 break;
00079
00080 }
00081 }
00082