1 #ifndef CASM_EnumEquivalents
2 #define CASM_EnumEquivalents
19 template <
typename ObjectType,
typename SymOpIterator,
typename SymOpType,
20 typename SymOpCompare>
21 class EnumEquivalents;
23 template <
typename ObjectType,
typename SymOpIterator,
typename SymOpType,
24 typename SymOpCompare>
27 static const std::string
name;
39 template <
typename ObjectType,
typename SymOpIterator,
41 typename std::iterator_traits<SymOpIterator>::value_type,
42 typename SymOpCompare = std::less<SymOpType> >
64 template <
typename MakeInvariantSubgroup>
67 MakeInvariantSubgroup f = MakeInvariantSubgroup(),
68 SymOpCompare
compare = SymOpCompare())
125 [&](
const SymOpType &Bi) {
return m_compare(X * Bi, X); });
136 template <
typename ObjectType,
typename SymOpIterator,
typename SymOpType,
137 typename SymOpCompare>
Enumerate over all equivalents.
bool valid() const
Returns false if enumeration is complete.
void _invalidate()
Call if enumeration complete.
void _increment_step()
Increment current step value.
void _set_step(step_type val)
Set current step value.
const SymOpType & sym_op() const
const ObjectType & generator() const
SymOpIterator m_symop_end
EnumEquivalents(const ObjectType &generating_obj, SymOpIterator begin, SymOpIterator end, MakeInvariantSubgroup f=MakeInvariantSubgroup(), SymOpCompare compare=SymOpCompare())
Constructor.
void increment() override
Implement increment.
bool _check(const SymOpType &X) const
notstd::cloneable_ptr< ObjectType > m_initial
std::vector< SymOpType > m_invariant_subgroup
notstd::cloneable_ptr< ObjectType > m_current
const std::vector< SymOpType > & invariant_subgroup() const
static const std::string name
bool compare(ClusterInvariants const &A, ClusterInvariants const &B, double tol)
Compare ClusterInvariants.
MappingNode copy_apply(PermuteIterator const &_it, MappingNode const &_node, bool transform_cost_mat=true)
Reorders the permutation and compounds the spatial isometry (rotation.
GenericDatumFormatter< std::string, DataObject > name()
Non-std smart pointer classes and functions.
std::unique_ptr< T > clone(const T &obj)