19 #ifndef LIBSEMIGROUPS_SRC_PARTITION_H_ 20 #define LIBSEMIGROUPS_SRC_PARTITION_H_ 25 #include "libsemigroups-debug.h" 41 : _parts(new std::vector<std::vector<T*>*>()) {
42 for (
size_t i = 0; i < nr_parts; i++) {
43 _parts->push_back(
new std::vector<T*>());
52 explicit Partition(std::vector<std::vector<T*>*>* parts) : _parts(parts) {}
59 for (std::vector<T*>* block : *_parts) {
60 for (T* elm : *block) {
78 inline size_t size()
const {
79 return _parts->size();
86 inline std::vector<T*>*
operator[](
size_t part_index)
const {
87 LIBSEMIGROUPS_ASSERT(part_index <
size());
88 return (*_parts)[part_index];
95 inline std::vector<T*>*
at(
size_t part_index)
const {
96 return _parts->at(part_index);
100 T*
at(
size_t part_index,
size_t elm_nr)
const {
101 return _parts->at(part_index)->at(elm_nr);
105 std::vector<std::vector<T*>*>* _parts;
108 #endif // LIBSEMIGROUPS_SRC_PARTITION_H_ std::vector< T * > * operator[](size_t part_index) const
Returns the part with index part_index.
Definition: partition.h:86
std::vector< T * > * at(size_t part_index) const
Returns the part with index part_index.
Definition: partition.h:95
~Partition()
A default destructor.
Definition: partition.h:58
Partition(size_t nr_parts=0)
A constructor.
Definition: partition.h:40
Class for partitions of a set used by Congruence::nontrivial_classes.
Definition: partition.h:33
T * at(size_t part_index, size_t elm_nr) const
Returns the element with index elm_nr in part part_index.
Definition: partition.h:100
Namespace for everything in the libsemigroups library.
Definition: blocks.cc:32
Partition & operator=(Partition const &part)=delete
The assignment operator is deleted for Partition to avoid unintended copying.
Partition(std::vector< std::vector< T *> *> *parts)
A constructor.
Definition: partition.h:52
size_t size() const
Returns the number of parts in the partition.
Definition: partition.h:78