#ifndef __FORENSICS_INTERDOMAINSUBSETPROPAGATOR_HH__
#define __FORENSICS_INTERDOMAINSUBSETPROPAGATOR_HH__

#include "forensics-gecode.hh"


class InterDomainSubset : public Gecode::Propagator
{
protected:
  Gecode::Int::IntView x0;
  Gecode::Int::IntView x1;
  Gecode::IntSet m_domain_restriction_complement;

public:
  InterDomainSubset (Gecode::Space& home, Gecode::Int::IntView x0, Gecode::Int::IntView x1, Gecode::IntSet domain_restriction_complement);

  InterDomainSubset (Gecode::Space& home, bool share, InterDomainSubset& p);

  virtual Gecode::Propagator* copy (Gecode::Space& home, bool share);

  virtual size_t dispose (Gecode::Space& home);

  virtual Gecode::PropCost cost (const Gecode::Space& home, const Gecode::ModEventDelta& med) const;
  
  virtual Gecode::ExecStatus propagate (Gecode::Space& home, const Gecode::ModEventDelta& med);

  static Gecode::ExecStatus post (Gecode::Space& home, Gecode::Int::IntView x0, Gecode::Int::IntView x1, Gecode::IntSet domain_restriction_complement);
};

void inter_domain_subset (Gecode::Space& home, Gecode::IntVar x0, Gecode::IntVar x1, Gecode::IntSet domain_restriction);

#endif

