add dv::to_value for std::vector

This commit is contained in:
MihailRis 2025-04-22 19:30:25 +03:00
parent 3498af6be9
commit 1bdb5c3145

View File

@ -6,7 +6,7 @@
namespace dv { namespace dv {
template <int n, typename T> template <int n, typename T>
inline dv::value to_value(glm::vec<n, T> vec) { dv::value to_value(const glm::vec<n, T>& vec) {
auto list = dv::list(); auto list = dv::list();
for (size_t i = 0; i < n; i++) { for (size_t i = 0; i < n; i++) {
list.add(vec[i]); list.add(vec[i]);
@ -15,7 +15,7 @@ namespace dv {
} }
template <int n, int m, typename T> template <int n, int m, typename T>
inline dv::value to_value(glm::mat<n, m, T> mat) { dv::value to_value(const glm::mat<n, m, T>& mat) {
auto list = dv::list(); auto list = dv::list();
for (size_t i = 0; i < n; i++) { for (size_t i = 0; i < n; i++) {
for (size_t j = 0; j < m; j++) { for (size_t j = 0; j < m; j++) {
@ -25,6 +25,15 @@ namespace dv {
return list; return list;
} }
template <typename T>
dv::value to_value(const std::vector<T>& vec) {
auto values = dv::list();
for (const auto& value : vec) {
values.add(value);
}
return values;
}
template <int n> template <int n>
void get_vec(const dv::value& list, glm::vec<n, float>& vec) { void get_vec(const dv::value& list, glm::vec<n, float>& vec) {
for (size_t i = 0; i < n; i++) { for (size_t i = 0; i < n; i++) {
@ -68,11 +77,24 @@ namespace dv {
if (!map.has(key)) { if (!map.has(key)) {
return; return;
} }
auto& list = map[key]; auto& arr = map[key];
for (size_t y = 0; y < n; y++) { for (size_t y = 0; y < n; y++) {
for (size_t x = 0; x < m; x++) { 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 <typename T>
void get(const dv::value& map, const std::string& key, std::vector<T>& 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));
}
}
} }