struct Graph::AutGroup {
struct Gens {
class iterator : public boost::iterator_facade<iterator, Aut, std::random_access_iterator_tag, Aut> {
friend class Gens;
iterator() = default;
iterator(std::shared_ptr<Graph> g, LabelType lt, bool withStereo, std::size_t i);
private:
friend class boost::iterator_core_access;
bool equal(const iterator &other) const;
void increment();
Aut dereference() const;
std::size_t distance_to(const iterator &other) const;
void advance(std::size_t n);
private:
std::shared_ptr<Graph> g;
LabelType lt = LabelType::String;
bool withStereo = false;
std::size_t i = 0;
};
using const_iterator = iterator;
private:
friend class AutGroup;
Gens(std::shared_ptr<Graph> g, LabelType lt, bool withStereo);
public:
iterator begin() const;
iterator end() const;
Aut operator[](std::size_t i) const;
std::size_t size() const;
private:
std::shared_ptr<Graph> g;
LabelType lt;
bool withStereo;
};
public:
AutGroup(std::shared_ptr<Graph> g, LabelSettings labelSettings);
Gens gens() const;
MOD_DECL friend std::ostream &operator<<(std::ostream &s, const AutGroup &a);
private:
std::shared_ptr<Graph> g;
LabelType lt;
bool withStereo;
};