From ab900540e746e079cd6a134885bac45ea4aa871c Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Wed, 3 Jul 2024 13:36:39 +0200 Subject: [PATCH] Add converter for math types to ryml --- openVulkanoCpp/Extensions/RymlConverters.hpp | 111 +++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 openVulkanoCpp/Extensions/RymlConverters.hpp diff --git a/openVulkanoCpp/Extensions/RymlConverters.hpp b/openVulkanoCpp/Extensions/RymlConverters.hpp new file mode 100644 index 0000000..6261a5e --- /dev/null +++ b/openVulkanoCpp/Extensions/RymlConverters.hpp @@ -0,0 +1,111 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "Math/Math.hpp" +#include +#include +#include + +namespace c4 +{ + template + size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Vector2& v) + { return ryml::format(buf, "({},{})", v.x, v.y); } + + template + size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Vector3& v) + { return ryml::format(buf, "({},{},{})", v.x, v.y, v.z); } + + template + size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Vector4& v) + { return ryml::format(buf, "({},{},{},{})", v.x, v.y, v.z, v.w); } + + template + size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Vector2_SIMD& v) + { return ryml::format(buf, "({},{})", v.x, v.y); } + + template + size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Vector3_SIMD& v) + { return ryml::format(buf, "({},{},{})", v.x, v.y, v.z); } + + template + size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Matrix3& m) + { + return ryml::format(buf, "({},{},{}),({},{},{}),({},{},{})", m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]); } + + template + size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Matrix3_SIMD& m) + { return ryml::format(buf, "({},{},{}),({},{},{}),({},{},{})", m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]); } + + template + size_t to_chars(ryml::substr buf, const OpenVulkano::Math::Matrix4& m) + { + return ryml::format(buf, "({},{},{},{}),({},{},{},{}),({},{},{},{}),({},{},{},{})", m[0][0], m[1][0], m[2][0], m[3][0], m[0][1], m[1][1], m[2][1], m[3][1], m[0][2], m[1][2], m[2][2], m[3][2], m[0][3], + m[1][3], m[2][3], m[3][3]); + } + + template + bool from_chars(ryml::csubstr buf, OpenVulkano::Math::Vector2* v) + { + size_t ret = ryml::unformat(buf, "({},{})", v->x, v->y); + return ret != ryml::yml::npos; + } + + template + bool from_chars(ryml::csubstr buf, OpenVulkano::Math::Vector3* v) + { + size_t ret = ryml::unformat(buf, "({},{},{})", v->x, v->y, v->z); + return ret != ryml::yml::npos; + } + + template + bool from_chars(ryml::csubstr buf, OpenVulkano::Math::Vector4* v) + { + size_t ret = ryml::unformat(buf, "({},{},{},{})", v->x, v->y, v->z, v->w); + return ret != ryml::yml::npos; + } + + template + bool from_chars(ryml::csubstr buf, OpenVulkano::Math::Vector2_SIMD* v) + { + size_t ret = ryml::unformat(buf, "({},{})", v->x, v->y); + return ret != ryml::yml::npos; + } + + template + bool from_chars(ryml::csubstr buf, OpenVulkano::Math::Vector3_SIMD* v) + { + size_t ret = ryml::unformat(buf, "({},{},{})", v->x, v->y, v->z); + return ret != ryml::yml::npos; + } + + template + size_t from_chars(ryml::csubstr buf, OpenVulkano::Math::Matrix3* mp) + { + auto& m = *mp; + size_t ret = ryml::unformat(buf, "({},{},{}),({},{},{}),({},{},{})", m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]); + return ret != ryml::yml::npos; + } + + template + size_t from_chars(ryml::csubstr buf, OpenVulkano::Math::Matrix3_SIMD* mp) + { + auto& m = *mp; + size_t ret = ryml::unformat(buf, "({},{},{}),({},{},{}),({},{},{})", m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2]); + return ret != ryml::yml::npos; + } + + template + size_t from_chars(ryml::csubstr buf, OpenVulkano::Math::Matrix4* mp) + { + auto& m = *mp; + size_t ret = ryml::unformat(buf, "({},{},{},{}),({},{},{},{}),({},{},{},{}),({},{},{},{})", m[0][0], m[1][0], m[2][0], m[3][0], m[0][1], m[1][1], m[2][1], m[3][1], m[0][2], m[1][2], m[2][2], m[3][2], m[0][3], + m[1][3], m[2][3], m[3][3]); + return ret != ryml::yml::npos; + } +} \ No newline at end of file