use lookup table instead of std::find

This commit is contained in:
2019-09-15 20:24:08 -04:00
parent 5ef6a55e92
commit bd3fbf49bd
2 changed files with 15 additions and 8 deletions

View File

@@ -44,9 +44,9 @@ public:
u_view = glGetUniformLocation(program, "view");
u_color = glGetUniformLocation(program, "color");
const int N = 3;
const Mults &mults = schlafli<N>({5, 3});
vert_data = vertices<N>(mults, {10, 1, 1});
const int N = 4;
const Mults &mults = schlafli<N>({5, 3, 3});
vert_data = vertices<N>(mults, {10, });
edge_data = edges<N>(mults);
face_data = faces<N>(mults);

View File

@@ -62,19 +62,26 @@ Mults schlafli(const int (&symbol)[N - 1]) {
struct Table {
const std::vector<int> gens;
std::vector<int> gen_inds;
std::vector<std::vector<int>> fwd{};
std::vector<std::vector<int>> rev{};
explicit Table(const std::vector<int> gens) : gens(gens) {
add_row();
gen_inds = std::vector<int>(gens[gens.size() - 1] + 1, -1);
for (int i = 0; i < gens.size(); i++) {
gen_inds[gens[i]] = i;
}
}
[[nodiscard]] int gen_index(int gen) const {
for (unsigned i = 0; i < gens.size(); ++i)
if (gens[i] == gen)
return i;
throw std::logic_error("Referencing nonexistant generator");
if (gen >= gen_inds.size())
throw std::logic_error("Referencing nonexistant generator (too large)");
int i = gen_inds[gen];
if (i < 0)
throw std::logic_error("Referencing nonexistant generator (not present)");
return i;
}
void add_row() {