98 lines
2.7 KiB
C++
98 lines
2.7 KiB
C++
/*
|
|
MIT License
|
|
Copyright (c) 2024 - 2026 René Amthor (tobid7)
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|
|
*/
|
|
|
|
#include <lazyvec.hpp>
|
|
|
|
constexpr std::string_view _construct = R"text(
|
|
constexpr vec{0}() : {1} {{}}
|
|
template <typename T1>
|
|
constexpr vec{0}(T1 v) {{
|
|
{2}
|
|
}}
|
|
|
|
template <typename T1>
|
|
constexpr vec{0}(const vec{0}<T1>& v) {{
|
|
{3}
|
|
}}
|
|
|
|
constexpr explicit vec{0}({4}) : {5} {{}}{6}
|
|
)text";
|
|
|
|
constexpr std::string_view _extended3 = R"(
|
|
|
|
// Extended Constructors
|
|
template <typename T1>
|
|
constexpr explicit vec3(const vec2<T1>& xy, T1 z) {{
|
|
x = (T)xy.x;
|
|
y = (T)xy.y;
|
|
this->z = (T)z;
|
|
}}
|
|
)";
|
|
|
|
constexpr std::string_view _extended4 = R"(
|
|
|
|
// Extended Constructors
|
|
template <typename T1>
|
|
constexpr explicit vec4(const vec2<T1>& xy, const vec2<T1>& zw) {{
|
|
x = (T)xy.x;
|
|
y = (T)xy.y;
|
|
z = (T)zw.x;
|
|
w = (T)zw.y;
|
|
}}
|
|
|
|
template <typename T1>
|
|
constexpr explicit vec4(const vec3<T1>& xyz, T1 w) {{
|
|
x = (T)xyz.x;
|
|
y = (T)xyz.y;
|
|
z = (T)xyz.z;
|
|
this->w = (T)w;
|
|
}}
|
|
)";
|
|
|
|
namespace LVec {
|
|
std::string MakeConstructors(int n) {
|
|
std::stringstream s1, s2, s3, s4, s5;
|
|
for (int i = 0; i < n; i++) {
|
|
s1 << elems[i] << "(0)";
|
|
s2 << " " << elems[i] << " = (T)v;";
|
|
s3 << " " << elems[i] << " = (T)v." << elems[i] << ";";
|
|
s4 << "T " << elems[i];
|
|
s5 << elems[i] << "(" << elems[i] << ")";
|
|
if (i != n - 1) {
|
|
s1 << ", ";
|
|
s2 << std::endl;
|
|
s3 << std::endl;
|
|
s4 << ", ";
|
|
s5 << ", ";
|
|
}
|
|
}
|
|
std::string extended;
|
|
if (n == 3) {
|
|
extended = _extended3;
|
|
} else if (n == 4) {
|
|
extended = _extended4;
|
|
}
|
|
return std::format(_construct, n, s1.str(), s2.str(), s3.str(), s4.str(),
|
|
s5.str(), extended);
|
|
}
|
|
} // namespace LVec
|