130 template<
class IntegerType = boost::u
int64_t>
138 :
GroupType(Anonymous, realDegree_, true), m_order(order_) { }
142 o <<
"anonymous(" <<
m_realDegree <<
", " << m_order <<
")";
160 o << m_name <<
"_" << m_typeDegree;
164 const char*
name()
const {
return m_name; }
169 unsigned int m_typeDegree;
176 NamedGroupType(
const char* name_,
unsigned int typeDegree_,
unsigned int realDegree_)
177 :
GroupType(Named, realDegree_, typeDegree_ == realDegree_), m_name(name_), m_typeDegree(typeDegree_) { }
181 return namedType->m_typeDegree == this->m_typeDegree && std::strcmp(namedType->m_name, this->m_name) == 0;
229 :
GroupType(WreathSymmetric, realDegree_, realDegree_ == degreeG_ * degreeH_), m_degreeG(degreeG_), m_degreeH(degreeH_) { }
232 o <<
"S_" << m_degreeG <<
" wr S_" << m_degreeH;
235 unsigned int degreeG()
const {
return m_degreeG; }
236 unsigned int degreeH()
const {
return m_degreeH; }
238 unsigned int m_degreeG;
239 unsigned int m_degreeH;
243 return wreathType->m_degreeG == m_degreeG && wreathType->m_degreeH == m_degreeH;
258 m_components[0] = GroupTypePtr(type1);
259 m_components[1] = GroupTypePtr(type2);
263 for (
unsigned int i = 0; i < m_components.size(); ++i) {
266 m_components[i]->writeToStream(o);
271 typedef boost::shared_ptr<const GroupType> GroupTypePtr;
272 std::vector<GroupTypePtr> m_components;
276 if (m_components.size() != directType->m_components.size())
278 std::vector<GroupTypePtr>::const_iterator itMe = m_components.begin();
279 std::vector<GroupTypePtr>::const_iterator itOther = directType->m_components.begin();
280 while (itMe != m_components.end()) {
281 if ( ! (*itMe)->equals((*itOther).get()) )
virtual void writeTypeToStream(std::ostream &o) const =0
writes type specific string to output stream
Type m_type
group type
Definition: group_type.h:92
Group type for alternating groups.
Definition: group_type.h:199
Group type for cyclic groups.
Definition: group_type.h:211
virtual void writeTypeToStream(std::ostream &o) const
writes type specific string to output stream
Definition: group_type.h:159
Group type for a direct product of two groups.
Definition: group_type.h:248
AlternatingGroupType(unsigned int typeDegree_, unsigned int realDegree_)
Definition: group_type.h:205
virtual void writeTypeToStream(std::ostream &o) const
writes type specific string to output stream
Definition: group_type.h:121
GroupType(Type type_, unsigned int realDegree_, bool naturalAction)
protected constructor
Definition: group_type.h:99
abstract base class for named groups (such as cyclic and symmetric groups)
Definition: group_type.h:157
virtual void writeTypeToStream(std::ostream &o) const
writes type specific string to output stream
Definition: group_type.h:140
bool isNaturalAction() const
returns true iff action is natural
Definition: group_type.h:67
virtual void writeTypeToStream(std::ostream &o) const
writes type specific string to output stream
Definition: group_type.h:262
virtual ~GroupType()
destructor
Definition: group_type.h:89
virtual bool equalsType(const GroupType *type_) const
checks if two group types represent the same permutation group
Definition: group_type.h:125
Group type for symmetric groups.
Definition: group_type.h:187
const char * name() const
the name of the group
Definition: group_type.h:164
bool equals(const GroupType *type_) const
checks if two group types represent the same permutation group
Definition: group_type.h:72
bool m_naturalAction
stores whether action is natural
Definition: group_type.h:96
virtual bool equalsType(const GroupType *type_) const
checks if two group types represent the same permutation group
Definition: group_type.h:179
SymmetricGroupType(unsigned int typeDegree_, unsigned int realDegree_)
Definition: group_type.h:193
Group type for a permutation group whose type could not be determined.
Definition: group_type.h:131
Group type for a trivial permutation group.
Definition: group_type.h:114
virtual void writeTypeToStream(std::ostream &o) const
writes type specific string to output stream
Definition: group_type.h:231
virtual bool equalsType(const GroupType *type_) const
checks if two group types represent the same permutation group
Definition: group_type.h:149
virtual bool equalsType(const GroupType *type_) const
checks if two group types represent the same permutation group
Definition: group_type.h:274
unsigned int m_realDegree
degree of the permutation group
Definition: group_type.h:94
AnonymousGroupType(unsigned int realDegree_, IntegerType order_=0)
Definition: group_type.h:137
void setNonNaturalAction(unsigned int realDegree_)
stores the information that this group acts non-naturally on realDegree many elements ...
Definition: group_type.h:83
Group type for a wreath product of symmetric groups.
Definition: group_type.h:226
DirectProductGroupType(const GroupType *type1, const GroupType *type2, unsigned int realDegree_)
Definition: group_type.h:255
NamedGroupType(const char *name_, unsigned int typeDegree_, unsigned int realDegree_)
Definition: group_type.h:176
void writeToStream(std::ostream &o) const
writes a human readable identifier to the given output stream
Definition: group_type.h:53
abstract base class for permutation group types
Definition: group_type.h:40
virtual bool equalsType(const GroupType *type_) const
checks if two group types represent the same permutation group
Definition: group_type.h:241
TrivialGroupType(unsigned int realDegree_)
Definition: group_type.h:119
Type
types for which an implementation of GroupType exists
Definition: group_type.h:43
CyclicGroupType(unsigned int typeDegree_, unsigned int realDegree_)
Definition: group_type.h:217
virtual bool equalsType(const GroupType *type_) const
checks if two group types represent the same permutation group
Definition: group_type.h:107
Type type() const
the type of this the group
Definition: group_type.h:69
unsigned int typeDegree() const
the degree of the named group to which the real action is isomorphic to
Definition: group_type.h:166
unsigned int realDegree() const
the degree of the group as permutation group
Definition: group_type.h:62
Definition: abstract_bsgs.h:49