From 40ccdabeb29a3a67814a8a6ddf73bdf5adf177bb Mon Sep 17 00:00:00 2001 From: David Allemang Date: Tue, 28 Jan 2020 19:15:40 -0500 Subject: [PATCH] make combo_iterator more std::iterator-y --- vis/include/combo_iterator.hpp | 42 ++++++++++++++++++++++++++-------- vis/src/main.cpp | 20 ++++++++++++---- 2 files changed, 47 insertions(+), 15 deletions(-) diff --git a/vis/include/combo_iterator.hpp b/vis/include/combo_iterator.hpp index c9238c4..f7aa005 100644 --- a/vis/include/combo_iterator.hpp +++ b/vis/include/combo_iterator.hpp @@ -6,6 +6,13 @@ template struct ComboIterator { + typedef ComboIterator self_type; + typedef const std::vector value_type;; + typedef const std::vector *pointer; + typedef const std::vector &reference; + typedef size_t difference_type; + typedef std::forward_iterator_tag iterator_category; + const std::vector &vals; const size_t k; size_t n; @@ -23,28 +30,43 @@ struct ComboIterator { set_curr(); } + ~ComboIterator() = default; + void set_curr() { for (size_t i = 0, j = 0; i < vals.size(); ++i) { if (bits[i]) curr[j++] = vals[i]; } } - const std::vector &operator*() const { - return curr; - } - - void operator++() { - std::next_permutation(bits.begin(), bits.end()); - set_curr(); - ++n; + [[nodiscard]] bool operator==(const ComboIterator &o) const { + return n == o.n; } [[nodiscard]] bool operator!=(const ComboIterator &o) const { return n != o.n; } - [[nodiscard]] bool operator==(const ComboIterator &o) const { - return n == o.n; + reference operator*() const { + return curr; + } + + pointer operator->() const { + return &curr; + } + + self_type operator++(int) { + std::next_permutation(bits.begin(), bits.end()); + set_curr(); + ++n; + return *this; + } + + self_type operator++() { + self_type r = *this; + std::next_permutation(bits.begin(), bits.end()); + set_curr(); + ++n; + return r; } }; diff --git a/vis/src/main.cpp b/vis/src/main.cpp index 41b3326..a9a4c6c 100644 --- a/vis/src/main.cpp +++ b/vis/src/main.cpp @@ -113,8 +113,16 @@ int main(int argc, char *argv[]) { std::vector ibos; std::vector counts; - for (auto sg_gens : Combos(g_gens, 3)) { - const std::vector data = gg.tile(g_gens, sg_gens, gg.triangulate(sg_gens)).vals; + auto combos = Combos(g_gens, 3); + std::vector> chosen = { + {1, 2, 3}, + {0, 2, 3}, + }; +// chosen = std::vector>(combos.begin(), combos.end()); + + for (auto sg_gens : chosen) { + auto s = gg.tile(g_gens, sg_gens, gg.triangulate(sg_gens)); + const std::vector data = s.vals; GLuint vao = utilCreateVertexArray(); GLuint ibo = utilCreateBuffer(); @@ -162,9 +170,11 @@ int main(int argc, char *argv[]) { for (int i = 0; i < vaos.size(); ++i) { auto c = glm::mix( - glm::vec3(.3, .2, .5), - glm::vec3(.9, .9, .95), - (float) (i + 1) / vaos.size() + glm::vec3(1,0,0), + glm::vec3(.2,.2,.3), +// glm::vec3(.3, .2, .5), +// glm::vec3(.9, .9, .95), + (float) (i) / (vaos.size()-1.f) ); glBindProgramPipeline(pipe);