1 #ifndef CASM_EnumEquivalents
2 #define CASM_EnumEquivalents
21 typename SymOpIterator,
23 typename SymOpCompare >
30 typename SymOpIterator,
32 typename SymOpCompare >
34 static const std::string
name;
50 typename SymOpIterator,
51 typename SymOpType =
typename std::iterator_traits<SymOpIterator>::value_type,
52 typename SymOpCompare = std::less<SymOpType> >
76 template<
typename MakeInvariantSubgroup>
80 MakeInvariantSubgroup f = MakeInvariantSubgroup(),
81 SymOpCompare
compare = SymOpCompare()) :
150 [&](
const SymOpType & Bi) {
167 typename SymOpIterator,
169 typename SymOpCompare >
bool compare(const T &A, const T &B, double tol)
Floating point comparison with tol, return A < B.
Object copy_apply(const Transform &f, Object obj, Args &&...args)
void increment() override
Implement increment.
EnumEquivalents(const ObjectType &generating_obj, SymOpIterator begin, SymOpIterator end, MakeInvariantSubgroup f=MakeInvariantSubgroup(), SymOpCompare compare=SymOpCompare())
Constructor.
const ObjectType & generator() const
std::vector< SymOpType > m_invariant_subgroup
SymOpIterator m_symop_end
notstd::cloneable_ptr< ObjectType > m_initial
void _invalidate()
Call if enumeration complete.
std::unique_ptr< T > clone(const T &obj, typename std::enable_if< has_clone< T >::value, T >::type *=nullptr)
const std::vector< SymOpType > & invariant_subgroup() const
bool valid() const
Returns false if enumeration is complete.
Non-std smart pointer classes and functions.
const SymOpType & sym_op() const
void _set_step(step_type val)
Set current step value.
Enumerate over all equivalents.
static const std::string name
void _increment_step()
Increment current step value.
bool _check(const SymOpType &X) const
notstd::cloneable_ptr< ObjectType > m_current