From 02611be11a6816d698da3b81942e5e30d42d9ba2 Mon Sep 17 00:00:00 2001 From: allem Date: Mon, 16 Sep 2019 00:49:18 -0400 Subject: [PATCH] drop templates in favor of vector sizes --- CMakeLists.txt | 5 +++++ cosets/CMakeLists.txt | 2 -- cosets/include/coxeter.hpp | 3 +++ cosets/src/main.cpp | 11 ++++++----- cosets/src/util/coxeter.cpp | 6 ++++++ cosets/src/util/mesh.hpp | 16 +++++++--------- cosets/src/util/mirrors.hpp | 3 +-- 7 files changed, 28 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cf1940..96d9750 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,3 +14,8 @@ option(GLM_TEST_ENABLE OFF) add_subdirectory(vendor/glm) add_subdirectory(cosets) + +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif () +set(CMAKE_CXX_FLAGS_RELEASE "-O3") diff --git a/cosets/CMakeLists.txt b/cosets/CMakeLists.txt index bfb586b..6717418 100644 --- a/cosets/CMakeLists.txt +++ b/cosets/CMakeLists.txt @@ -17,5 +17,3 @@ add_dependencies(cosets shaders) target_link_libraries(${PROJECT_NAME} PRIVATE glad glm glfw) - -target_compile_options(${PROJECT_NAME} PRIVATE -O3) diff --git a/cosets/include/coxeter.hpp b/cosets/include/coxeter.hpp index 29c07e6..c6b4504 100644 --- a/cosets/include/coxeter.hpp +++ b/cosets/include/coxeter.hpp @@ -9,8 +9,11 @@ struct Table; struct IRow; struct Mults { + int num_gens; std::map, int> mults; + Mults(); + void set(int a, int b, int mult); [[nodiscard]] int get(int a, int b) const; diff --git a/cosets/src/main.cpp b/cosets/src/main.cpp index c8d592a..d52c1f7 100644 --- a/cosets/src/main.cpp +++ b/cosets/src/main.cpp @@ -45,23 +45,24 @@ public: u_view = glGetUniformLocation(program, "view"); u_color = glGetUniformLocation(program, "color"); - const int N = 4; - const Mults &mults = schlafli({3, 4, 3}); + const Mults &mults = schlafli({4, 3}); + std::cout << mults.num_gens << std::endl; + std::cout << "Generation times: " << std::endl; auto gen_start = std::chrono::high_resolution_clock::now(); - vert_data = vertices(mults, {5, .1, .1}); + vert_data = vertices(mults, {1, .1, .1, .1}); auto gen_vert = std::chrono::high_resolution_clock::now(); std::chrono::duration vert_time = gen_vert - gen_start; std::cout << "Vertices: " << vert_time.count() << std::endl; - edge_data = edges(mults); + edge_data = edges(mults); auto gen_edge = std::chrono::high_resolution_clock::now(); std::chrono::duration edge_time = gen_edge - gen_vert; std::cout << " Edges: " << edge_time.count() << std::endl; - face_data = faces(mults); + face_data = faces(mults); auto gen_face = std::chrono::high_resolution_clock::now(); std::chrono::duration face_time = gen_face - gen_edge; std::cout << " Faces: " << face_time.count() << std::endl; diff --git a/cosets/src/util/coxeter.cpp b/cosets/src/util/coxeter.cpp index f03fb15..d2ae079 100644 --- a/cosets/src/util/coxeter.cpp +++ b/cosets/src/util/coxeter.cpp @@ -1,7 +1,13 @@ #include "coxeter.hpp" +Mults::Mults() { + num_gens = 0; + mults = std::map, int>(); +} + void Mults::set(int a, int b, int mult) { if (a > b) std::swap(a, b); + if (b + 1 > num_gens) num_gens = b + 1; mults[std::make_tuple(a, b)] = mult; } diff --git a/cosets/src/util/mesh.hpp b/cosets/src/util/mesh.hpp index 5f5c3b5..7511bf6 100644 --- a/cosets/src/util/mesh.hpp +++ b/cosets/src/util/mesh.hpp @@ -13,20 +13,18 @@ std::vector> coxeter_rels() { return rels; } -template -glm::vec4 identity(const std::vector &normals, const float(&coords)[N]) { +glm::vec4 identity(const std::vector &normals, const std::vector &coords) { const std::vector corners = plane_intersections(normals); - const std::vector coords_vec(coords, coords + N); - const glm::vec4 identity = barycentric(corners, coords_vec); + const glm::vec4 identity = barycentric(corners, coords); return glm::normalize(identity); } -template std::vector -vertices(const Mults &mults, const float (&coords)[N]) { +vertices(const Mults &mults, std::vector coords) { + int N = mults.num_gens; Table *table = solve(all_gens(N), {}, mults); - const std::vector normals = mirror(mults); + const std::vector normals = mirror(mults); glm::vec4 ident = identity(normals, coords); std::vector verts{}; @@ -41,10 +39,10 @@ vertices(const Mults &mults, const float (&coords)[N]) { return verts; } -template std::vector edges(const Mults &mults) { std::vector res{}; + int N = mults.num_gens; Table *t_vert = solve(all_gens(N), {}, mults); for (const auto &subgens : combinations(N, 1)) { @@ -64,9 +62,9 @@ std::vector edges(const Mults &mults) { return res; } -template std::vector faces(const Mults &mults) { std::vector res{}; + int N = mults.num_gens; Table *t_vert = solve(all_gens(N), {}, mults); diff --git a/cosets/src/util/mirrors.hpp b/cosets/src/util/mirrors.hpp index 9551a26..4a20be2 100644 --- a/cosets/src/util/mirrors.hpp +++ b/cosets/src/util/mirrors.hpp @@ -10,9 +10,8 @@ #include "numeric.hpp" #include "coxeter.hpp" -template std::vector mirror(const Mults &mults) { - static_assert(1 <= N and N <= 4, "Vector size is unsupported"); + int N = mults.num_gens; std::vector mirrors{}; for (int p = 0; p < N; ++p) {