use lookup table instead of std::find
This commit is contained in:
@@ -44,9 +44,9 @@ public:
|
|||||||
u_view = glGetUniformLocation(program, "view");
|
u_view = glGetUniformLocation(program, "view");
|
||||||
u_color = glGetUniformLocation(program, "color");
|
u_color = glGetUniformLocation(program, "color");
|
||||||
|
|
||||||
const int N = 3;
|
const int N = 4;
|
||||||
const Mults &mults = schlafli<N>({5, 3});
|
const Mults &mults = schlafli<N>({5, 3, 3});
|
||||||
vert_data = vertices<N>(mults, {10, 1, 1});
|
vert_data = vertices<N>(mults, {10, });
|
||||||
edge_data = edges<N>(mults);
|
edge_data = edges<N>(mults);
|
||||||
face_data = faces<N>(mults);
|
face_data = faces<N>(mults);
|
||||||
|
|
||||||
|
|||||||
@@ -62,19 +62,26 @@ Mults schlafli(const int (&symbol)[N - 1]) {
|
|||||||
|
|
||||||
struct Table {
|
struct Table {
|
||||||
const std::vector<int> gens;
|
const std::vector<int> gens;
|
||||||
|
std::vector<int> gen_inds;
|
||||||
std::vector<std::vector<int>> fwd{};
|
std::vector<std::vector<int>> fwd{};
|
||||||
std::vector<std::vector<int>> rev{};
|
std::vector<std::vector<int>> rev{};
|
||||||
|
|
||||||
explicit Table(const std::vector<int> gens) : gens(gens) {
|
explicit Table(const std::vector<int> gens) : gens(gens) {
|
||||||
add_row();
|
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 {
|
[[nodiscard]] int gen_index(int gen) const {
|
||||||
for (unsigned i = 0; i < gens.size(); ++i)
|
if (gen >= gen_inds.size())
|
||||||
if (gens[i] == gen)
|
throw std::logic_error("Referencing nonexistant generator (too large)");
|
||||||
return i;
|
int i = gen_inds[gen];
|
||||||
|
if (i < 0)
|
||||||
throw std::logic_error("Referencing nonexistant generator");
|
throw std::logic_error("Referencing nonexistant generator (not present)");
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_row() {
|
void add_row() {
|
||||||
|
|||||||
Reference in New Issue
Block a user