00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _CSP_CACHES_MinDomainSizes_H
00031 #define _CSP_CACHES_MinDomainSizes_H
00032
00033
00034 CSP_NAMESPACE_BEGIN(csp);
00035 CSP_NAMESPACE_BEGIN(caches);
00036
00037
00042 class CSP_API MinDomainSizes
00043 {
00044 public:
00046 MinDomainSizes(Decomposition& decomposition) :
00047 m_decomposition(decomposition),
00048 m_variable(0) {}
00049
00052 void init(const vlist_type& uninstantiatedVariables);
00053
00062 void init(Variable& variable, Domain& domain);
00063
00065 void done();
00066
00072 void setVariable(const Variable& variable)
00073 {
00074 m_variable = &variable;
00075 }
00076
00086 size_t minDomainSize(const Value& value) const;
00087
00095 const hash_map<const Value*, size_t>& minDomainSizes(
00096 const Variable& variable) const;
00097
00106 bool contains(const Variable& variable) const
00107 {
00108 return m_minDomainSizes.find(&variable) != m_minDomainSizes.end();
00109 }
00110
00112 void clear() { m_minDomainSizes.clear(); }
00113
00115 bool empty() { return m_minDomainSizes.empty(); }
00116
00117 private:
00119 MinDomainSizes(const MinDomainSizes&);
00120
00122 MinDomainSizes& operator=(const MinDomainSizes&);
00123
00126 typedef hash_map<const Variable*, hash_map<const Value*, size_t> > mds_type;
00127
00129 Decomposition& m_decomposition;
00130
00132 mds_type m_minDomainSizes;
00133
00135 const Variable* m_variable;
00136 };
00137
00138
00139 CSP_NAMESPACE_END(caches);
00140 CSP_NAMESPACE_END(csp);
00141
00142
00143 #endif // _CSP_KERNEL_MinDomainSizes_H
00144
00145
00146
00147