#pragma once
namespace bliss {
class Orbit
{
class OrbitEntry
{
public:
unsigned int element;
OrbitEntry *next;
unsigned int size;
};
OrbitEntry *orbits;
OrbitEntry **in_orbit;
unsigned int nof_elements;
unsigned int _nof_orbits;
void merge_orbits(OrbitEntry *o1, OrbitEntry *o2);
public:
Orbit();
~Orbit();
void init(const unsigned int N);
void reset();
void merge_orbits(unsigned int e1, unsigned int e2);
bool is_minimal_representative(unsigned int e) const;
unsigned int get_minimal_representative(unsigned int e) const;
unsigned int orbit_size(unsigned int e) const;
unsigned int nof_orbits() const {return _nof_orbits; }
};
}