#pragma once
#include <cstdio>
#include "bliss/abstractgraph.hh"
#include "bliss/bignum.hh"
namespace bliss {
class Stats
{
friend class AbstractGraph;
BigNum group_size;
long double group_size_approx;
long unsigned int nof_nodes;
long unsigned int nof_leaf_nodes;
long unsigned int nof_bad_nodes;
long unsigned int nof_canupdates;
long unsigned int nof_generators;
unsigned long int max_level;
void reset()
{
group_size.assign(1);
group_size_approx = 1.0;
nof_nodes = 0;
nof_leaf_nodes = 0;
nof_bad_nodes = 0;
nof_canupdates = 0;
nof_generators = 0;
max_level = 0;
}
public:
Stats() { reset(); }
size_t print(FILE* const fp) const
{
size_t r = 0;
r += fprintf(fp, "Nodes: %lu\n", nof_nodes);
r += fprintf(fp, "Leaf nodes: %lu\n", nof_leaf_nodes);
r += fprintf(fp, "Bad nodes: %lu\n", nof_bad_nodes);
r += fprintf(fp, "Canrep updates: %lu\n", nof_canupdates);
r += fprintf(fp, "Generators: %lu\n", nof_generators);
r += fprintf(fp, "Max level: %lu\n", max_level);
r += fprintf(fp, "|Aut|: ")+group_size.print(fp)+fprintf(fp, "\n");
fflush(fp);
return r;
}
const BigNum& get_group_size() const {return group_size;}
long double get_group_size_approx() const {return group_size_approx;}
long unsigned int get_nof_nodes() const {return nof_nodes;}
long unsigned int get_nof_leaf_nodes() const {return nof_leaf_nodes;}
long unsigned int get_nof_bad_nodes() const {return nof_bad_nodes;}
long unsigned int get_nof_canupdates() const {return nof_canupdates;}
long unsigned int get_nof_generators() const {return nof_generators;}
unsigned long int get_max_level() const {return max_level;}
};
}