00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _CSP_FILTERS_FP_H
00025 #define _CSP_FILTERS_FP_H
00026
00027
00028 CSP_NAMESPACE_BEGIN(csp);
00029 CSP_NAMESPACE_BEGIN(filters);
00030
00031
00040 class CSP_API FP :
00041 public Filter
00042 {
00043 public:
00044 FP(Problem& problem, Retraction& retraction) :
00045 Filter(L"Forward Pruning", L"FP", problem, retraction) {}
00046 virtual ~FP() {}
00047
00048 virtual bool restoresArcConsistency() const { return false; }
00049
00050 virtual bool propagate(
00051 const vlist_type& uninstantiatedVariables,
00052 const vlist_type& modifiedVariables,
00053 const bool keepChanges = true);
00054
00055 virtual bool init(
00056 const vlist_type& uninstantiatedVariables,
00057 bool propagate = true);
00058 virtual void done() { Filter::done(); }
00059
00060 private:
00061
00062 Domain m_diffs;
00063
00065 FP(const FP&);
00066
00068 FP& operator=(const FP&);
00069
00070 bool prune(Constraint& constraint, Variable& variable);
00071 };
00072
00073
00074 CSP_NAMESPACE_END(filters);
00075 CSP_NAMESPACE_END(csp);
00076
00077
00078 #endif // _CSP_FILTERS_FP_H
00079
00080
00081
00082