| 952 | */ |
| 953 | template<class View> |
| 954 | ExecStatus |
| 955 | postnegcompact(Home home, ViewArray<View>& x, const TupleSet& ts) { |
| 956 | if (ts.tuples() == 0) |
| 957 | return ES_OK; |
| 958 | |
| 959 | // Check whether a variable does not overlap with supported values |
| 960 | for (int i=0; i<x.size(); i++) { |
| 961 | TupleSet::Ranges rs(ts,i); |
| 962 | ViewRanges<View> rx(x[i]); |
| 963 | if (Iter::Ranges::disjoint(rs,rx)) |
| 964 | return ES_OK; |
| 965 | } |
| 966 | |
| 967 | // Choose the right bit set implementation |
| 968 | switch (ts.words()) { |
| 969 | case 0U: |
| 970 | GECODE_NEVER; return ES_OK; |
| 971 | case 1U: |
| 972 | return NegCompact<View,TinyBitSet<1U>>::post(home,x,ts); |
| 973 | case 2U: |
| 974 | return NegCompact<View,TinyBitSet<2U>>::post(home,x,ts); |
| 975 | case 3U: |
| 976 | return NegCompact<View,TinyBitSet<3U>>::post(home,x,ts); |
| 977 | case 4U: |
| 978 | return NegCompact<View,TinyBitSet<4U>>::post(home,x,ts); |
| 979 | default: |
| 980 | switch (Gecode::Support::u_type(ts.words())) { |
| 981 | case Gecode::Support::IT_CHAR: |
| 982 | return NegCompact<View,BitSet<unsigned char>> |
| 983 | ::post(home,x,ts); |
| 984 | case Gecode::Support::IT_SHRT: |
| 985 | return NegCompact<View,BitSet<unsigned short int>> |
| 986 | ::post(home,x,ts); |
| 987 | case Gecode::Support::IT_INT: |
| 988 | return NegCompact<View,BitSet<unsigned int>> |
| 989 | ::post(home,x,ts); |
| 990 | default: GECODE_NEVER; |
| 991 | } |
| 992 | } |
| 993 | GECODE_NEVER; |
| 994 | return ES_OK; |
| 995 | } |
| 996 | |
| 997 | |
| 998 | /* |