33#ifndef SETIMAGEPREDICATE_H_
34#define SETIMAGEPREDICATE_H_
36#include <permlib/predicate/subgroup_predicate.h>
38#include <boost/foreach.hpp>
56 template<
class InputIterator>
57 SetImagePredicate(InputIterator deltaBegin, InputIterator deltaEnd, InputIterator gammaBegin, InputIterator gammaEnd);
60 virtual bool childRestriction(
const PERM &h,
unsigned int i,
unsigned long beta_i)
const;
61 virtual unsigned int limit()
const;
64 std::vector<unsigned long> m_delta;
65 std::vector<unsigned long> m_gamma;
73template<
class InputIterator>
75 : m_delta(deltaBegin, deltaEnd), m_gamma(gammaBegin, gammaEnd)
77 BOOST_ASSERT(m_delta.size() == m_gamma.size());
83 BOOST_FOREACH(
unsigned long delta_i, m_delta) {
84 if (std::find(m_gamma.begin(), m_gamma.end(), p / delta_i) == m_gamma.end())
92 if (std::find(m_gamma.begin(), m_gamma.end(), h / beta_i) == m_gamma.end())
99 return m_delta.size();
coset-type predicate for group elements that map one set of points onto another given set of points
Definition: set_image_predicate.h:47
virtual bool childRestriction(const PERM &h, unsigned int i, unsigned long beta_i) const
checks if a given group element should not be followed in backtrack search
Definition: set_image_predicate.h:91
SetImagePredicate(InputIterator deltaBegin, InputIterator deltaEnd, InputIterator gammaBegin, InputIterator gammaEnd)
constructor
Definition: set_image_predicate.h:74
virtual bool operator()(const PERM &p) const
true iff group element fulfills predicate
Definition: set_image_predicate.h:82
virtual unsigned int limit() const
limit of recursion depth in backtrack search
Definition: set_image_predicate.h:98
abstract base class for subgroup (and coset) predicates
Definition: subgroup_predicate.h:45