#pragma once #include #include "dynamic.hpp" namespace dynamic { template inline dynamic::List_sptr to_value(glm::vec vec) { auto list = dynamic::create_list(); for (size_t i = 0; i < n; i++) { list->put(vec[i]); } return list; } template inline dynamic::List_sptr to_value(glm::mat mat) { auto list = dynamic::create_list(); for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < m; j++) { list->put(mat[i][j]); } } return list; } template void get_vec( const dynamic::Map_sptr& root, const std::string& name, glm::vec& vec ) { if (const auto& list = root->list(name)) { for (size_t i = 0; i < n; i++) { vec[i] = list->num(i); } } } /// TODO: remove raw pointer overloads template void get_vec( const dynamic::Map* root, const std::string& name, glm::vec& vec ) { if (const auto& list = root->list(name)) { for (size_t i = 0; i < n; i++) { vec[i] = list->integer(i); } } } template void get_vec( const dynamic::List_sptr& root, size_t index, glm::vec& vec ) { if (const auto& list = root->list(index)) { for (size_t i = 0; i < n; i++) { vec[i] = list->num(i); } } } template void get_vec( const dynamic::List_sptr& root, size_t index, glm::vec& vec ) { if (const auto& list = root->list(index)) { for (size_t i = 0; i < n; i++) { vec[i] = list->integer(i); } } } template void get_mat( const dynamic::Map_sptr& root, const std::string& name, glm::mat& mat ) { if (const auto& list = root->list(name)) { for (size_t y = 0; y < n; y++) { for (size_t x = 0; x < m; x++) { mat[y][x] = list->num(y * m + x); } } } } template void get_mat( const dynamic::List_sptr& root, size_t index, glm::mat& mat ) { if (const auto& list = root->list(index)) { for (size_t y = 0; y < n; y++) { for (size_t x = 0; x < m; x++) { mat[y][x] = list->num(y * m + x); } } } } }