diff --git a/src/data/dv_util.hpp b/src/data/dv_util.hpp index e016edb0..3f09ffde 100644 --- a/src/data/dv_util.hpp +++ b/src/data/dv_util.hpp @@ -6,7 +6,7 @@ namespace dv { template - inline dv::value to_value(glm::vec vec) { + dv::value to_value(const glm::vec& vec) { auto list = dv::list(); for (size_t i = 0; i < n; i++) { list.add(vec[i]); @@ -15,7 +15,7 @@ namespace dv { } template - inline dv::value to_value(glm::mat mat) { + dv::value to_value(const glm::mat& mat) { auto list = dv::list(); for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < m; j++) { @@ -25,6 +25,15 @@ namespace dv { return list; } + template + dv::value to_value(const std::vector& vec) { + auto values = dv::list(); + for (const auto& value : vec) { + values.add(value); + } + return values; + } + template void get_vec(const dv::value& list, glm::vec& vec) { for (size_t i = 0; i < n; i++) { @@ -68,11 +77,24 @@ namespace dv { if (!map.has(key)) { return; } - auto& list = map[key]; + auto& arr = map[key]; for (size_t y = 0; y < n; y++) { for (size_t x = 0; x < m; x++) { - mat[y][x] = list[y * m + x].asNumber(); + mat[y][x] = arr[y * m + x].asNumber(); } } } + + template + void get(const dv::value& map, const std::string& key, std::vector& vec) { + if (!map.has(key)) { + return; + } + const auto& arr = map[key]; + for (size_t i = 0; i < arr.size(); i++) { + T value; + arr.at(i).get(value); + vec.emplace_back(std::move(value)); + } + } }