diff --git a/include/pd/core/vec2.hpp b/include/pd/core/vec2.hpp index 64dbd12..91ed461 100755 --- a/include/pd/core/vec2.hpp +++ b/include/pd/core/vec2.hpp @@ -23,7 +23,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -// This file is generated by lazyvec 2.0.0 +// This file is generated by lazyvec 2.1.0 #include @@ -54,117 +54,117 @@ class vec2 { // Operations template - vec2& operator+=(T1 v) { + constexpr vec2& operator+=(T1 v) { x += (T)v; y += (T)v; return *this; } template - vec2& operator+=(const vec2& v) { + constexpr vec2& operator+=(const vec2& v) { x += (T)v.x; y += (T)v.y; return *this; } template - vec2 operator+(T1 v) const { + constexpr vec2 operator+(T1 v) const { return vec2(x + (T)v, y + (T)v); } template - vec2 operator+(const vec2& v) const { + constexpr vec2 operator+(const vec2& v) const { return vec2(x + (T)v.x, y + (T)v.y); } template - vec2& operator-=(T1 v) { + constexpr vec2& operator-=(T1 v) { x -= (T)v; y -= (T)v; return *this; } template - vec2& operator-=(const vec2& v) { + constexpr vec2& operator-=(const vec2& v) { x -= (T)v.x; y -= (T)v.y; return *this; } template - vec2 operator-(T1 v) const { + constexpr vec2 operator-(T1 v) const { return vec2(x - (T)v, y - (T)v); } template - vec2 operator-(const vec2& v) const { + constexpr vec2 operator-(const vec2& v) const { return vec2(x - (T)v.x, y - (T)v.y); } template - vec2& operator*=(T1 v) { + constexpr vec2& operator*=(T1 v) { x *= (T)v; y *= (T)v; return *this; } template - vec2& operator*=(const vec2& v) { + constexpr vec2& operator*=(const vec2& v) { x *= (T)v.x; y *= (T)v.y; return *this; } template - vec2 operator*(T1 v) const { + constexpr vec2 operator*(T1 v) const { return vec2(x * (T)v, y * (T)v); } template - vec2 operator*(const vec2& v) const { + constexpr vec2 operator*(const vec2& v) const { return vec2(x * (T)v.x, y * (T)v.y); } template - vec2& operator/=(T1 v) { + constexpr vec2& operator/=(T1 v) { x /= (T)v; y /= (T)v; return *this; } template - vec2& operator/=(const vec2& v) { + constexpr vec2& operator/=(const vec2& v) { x /= (T)v.x; y /= (T)v.y; return *this; } template - vec2 operator/(T1 v) const { + constexpr vec2 operator/(T1 v) const { return vec2(x / (T)v, y / (T)v); } template - vec2 operator/(const vec2& v) const { + constexpr vec2 operator/(const vec2& v) const { return vec2(x / (T)v.x, y / (T)v.y); } // Generic Operations - vec2 operator-() const { return vec2(-x, -y); } + constexpr vec2 operator-() const { return vec2(-x, -y); } template - bool operator==(const vec2& v) const { + constexpr bool operator==(const vec2& v) const { return x == (T)v.x && y == (T)v.y; } template - bool operator!=(const vec2& v) const { + constexpr bool operator!=(const vec2& v) const { return !(*this == v); } // Functions double Len() const { return std::sqrt(SqLen()); } - double SqLen() const { return x * x + y * y; } + constexpr double SqLen() const { return x * x + y * y; } template double Distance(const vec2& v) const { @@ -180,12 +180,12 @@ class vec2 { } template - T Dot(const vec2& v) const { + constexpr T Dot(const vec2& v) const { return x * (T)v.x + y * (T)v.y; } // Swap Functions - void SwapXY() { + constexpr void SwapXY() { T t = x; x = y; y = t; diff --git a/include/pd/core/vec3.hpp b/include/pd/core/vec3.hpp index 6346eb0..b452e99 100755 --- a/include/pd/core/vec3.hpp +++ b/include/pd/core/vec3.hpp @@ -23,7 +23,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -// This file is generated by lazyvec 2.0.0 +// This file is generated by lazyvec 2.1.0 #include // Extended includes (rename if you use other filenames/paths) @@ -69,7 +69,7 @@ class vec3 { // Operations template - vec3& operator+=(T1 v) { + constexpr vec3& operator+=(T1 v) { x += (T)v; y += (T)v; z += (T)v; @@ -77,7 +77,7 @@ class vec3 { } template - vec3& operator+=(const vec3& v) { + constexpr vec3& operator+=(const vec3& v) { x += (T)v.x; y += (T)v.y; z += (T)v.z; @@ -85,17 +85,17 @@ class vec3 { } template - vec3 operator+(T1 v) const { + constexpr vec3 operator+(T1 v) const { return vec3(x + (T)v, y + (T)v, z + (T)v); } template - vec3 operator+(const vec3& v) const { + constexpr vec3 operator+(const vec3& v) const { return vec3(x + (T)v.x, y + (T)v.y, z + (T)v.z); } template - vec3& operator-=(T1 v) { + constexpr vec3& operator-=(T1 v) { x -= (T)v; y -= (T)v; z -= (T)v; @@ -103,7 +103,7 @@ class vec3 { } template - vec3& operator-=(const vec3& v) { + constexpr vec3& operator-=(const vec3& v) { x -= (T)v.x; y -= (T)v.y; z -= (T)v.z; @@ -111,17 +111,17 @@ class vec3 { } template - vec3 operator-(T1 v) const { + constexpr vec3 operator-(T1 v) const { return vec3(x - (T)v, y - (T)v, z - (T)v); } template - vec3 operator-(const vec3& v) const { + constexpr vec3 operator-(const vec3& v) const { return vec3(x - (T)v.x, y - (T)v.y, z - (T)v.z); } template - vec3& operator*=(T1 v) { + constexpr vec3& operator*=(T1 v) { x *= (T)v; y *= (T)v; z *= (T)v; @@ -129,7 +129,7 @@ class vec3 { } template - vec3& operator*=(const vec3& v) { + constexpr vec3& operator*=(const vec3& v) { x *= (T)v.x; y *= (T)v.y; z *= (T)v.z; @@ -137,17 +137,17 @@ class vec3 { } template - vec3 operator*(T1 v) const { + constexpr vec3 operator*(T1 v) const { return vec3(x * (T)v, y * (T)v, z * (T)v); } template - vec3 operator*(const vec3& v) const { + constexpr vec3 operator*(const vec3& v) const { return vec3(x * (T)v.x, y * (T)v.y, z * (T)v.z); } template - vec3& operator/=(T1 v) { + constexpr vec3& operator/=(T1 v) { x /= (T)v; y /= (T)v; z /= (T)v; @@ -155,7 +155,7 @@ class vec3 { } template - vec3& operator/=(const vec3& v) { + constexpr vec3& operator/=(const vec3& v) { x /= (T)v.x; y /= (T)v.y; z /= (T)v.z; @@ -163,31 +163,31 @@ class vec3 { } template - vec3 operator/(T1 v) const { + constexpr vec3 operator/(T1 v) const { return vec3(x / (T)v, y / (T)v, z / (T)v); } template - vec3 operator/(const vec3& v) const { + constexpr vec3 operator/(const vec3& v) const { return vec3(x / (T)v.x, y / (T)v.y, z / (T)v.z); } // Generic Operations - vec3 operator-() const { return vec3(-x, -y, -z); } + constexpr vec3 operator-() const { return vec3(-x, -y, -z); } template - bool operator==(const vec3& v) const { + constexpr bool operator==(const vec3& v) const { return x == (T)v.x && y == (T)v.y && z == (T)v.z; } template - bool operator!=(const vec3& v) const { + constexpr bool operator!=(const vec3& v) const { return !(*this == v); } // Functions double Len() const { return std::sqrt(SqLen()); } - double SqLen() const { return x * x + y * y + z * z; } + constexpr double SqLen() const { return x * x + y * y + z * z; } template double Distance(const vec3& v) const { @@ -203,27 +203,27 @@ class vec3 { } template - T Dot(const vec3& v) const { + constexpr T Dot(const vec3& v) const { return x * (T)v.x + y * (T)v.y + z * (T)v.z; } template - vec3 Cross(const vec3& v) const { + constexpr vec3 Cross(const vec3& v) const { return vec3(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); } // Swap Functions - void SwapXY() { + constexpr void SwapXY() { T t = x; x = y; y = t; } - void SwapXZ() { + constexpr void SwapXZ() { T t = x; x = z; z = t; } - void SwapYZ() { + constexpr void SwapYZ() { T t = y; y = z; z = t; diff --git a/include/pd/core/vec4.hpp b/include/pd/core/vec4.hpp index edc4357..3a7a380 100755 --- a/include/pd/core/vec4.hpp +++ b/include/pd/core/vec4.hpp @@ -23,7 +23,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -// This file is generated by lazyvec 2.0.0 +// This file is generated by lazyvec 2.1.0 #include // Extended includes (rename if you use other filenames/paths) @@ -84,7 +84,7 @@ class vec4 { // Operations template - vec4& operator+=(T1 v) { + constexpr vec4& operator+=(T1 v) { x += (T)v; y += (T)v; z += (T)v; @@ -93,7 +93,7 @@ class vec4 { } template - vec4& operator+=(const vec4& v) { + constexpr vec4& operator+=(const vec4& v) { x += (T)v.x; y += (T)v.y; z += (T)v.z; @@ -102,17 +102,17 @@ class vec4 { } template - vec4 operator+(T1 v) const { + constexpr vec4 operator+(T1 v) const { return vec4(x + (T)v, y + (T)v, z + (T)v, w + (T)v); } template - vec4 operator+(const vec4& v) const { + constexpr vec4 operator+(const vec4& v) const { return vec4(x + (T)v.x, y + (T)v.y, z + (T)v.z, w + (T)v.w); } template - vec4& operator-=(T1 v) { + constexpr vec4& operator-=(T1 v) { x -= (T)v; y -= (T)v; z -= (T)v; @@ -121,7 +121,7 @@ class vec4 { } template - vec4& operator-=(const vec4& v) { + constexpr vec4& operator-=(const vec4& v) { x -= (T)v.x; y -= (T)v.y; z -= (T)v.z; @@ -130,17 +130,17 @@ class vec4 { } template - vec4 operator-(T1 v) const { + constexpr vec4 operator-(T1 v) const { return vec4(x - (T)v, y - (T)v, z - (T)v, w - (T)v); } template - vec4 operator-(const vec4& v) const { + constexpr vec4 operator-(const vec4& v) const { return vec4(x - (T)v.x, y - (T)v.y, z - (T)v.z, w - (T)v.w); } template - vec4& operator*=(T1 v) { + constexpr vec4& operator*=(T1 v) { x *= (T)v; y *= (T)v; z *= (T)v; @@ -149,7 +149,7 @@ class vec4 { } template - vec4& operator*=(const vec4& v) { + constexpr vec4& operator*=(const vec4& v) { x *= (T)v.x; y *= (T)v.y; z *= (T)v.z; @@ -158,17 +158,17 @@ class vec4 { } template - vec4 operator*(T1 v) const { + constexpr vec4 operator*(T1 v) const { return vec4(x * (T)v, y * (T)v, z * (T)v, w * (T)v); } template - vec4 operator*(const vec4& v) const { + constexpr vec4 operator*(const vec4& v) const { return vec4(x * (T)v.x, y * (T)v.y, z * (T)v.z, w * (T)v.w); } template - vec4& operator/=(T1 v) { + constexpr vec4& operator/=(T1 v) { x /= (T)v; y /= (T)v; z /= (T)v; @@ -177,7 +177,7 @@ class vec4 { } template - vec4& operator/=(const vec4& v) { + constexpr vec4& operator/=(const vec4& v) { x /= (T)v.x; y /= (T)v.y; z /= (T)v.z; @@ -186,31 +186,31 @@ class vec4 { } template - vec4 operator/(T1 v) const { + constexpr vec4 operator/(T1 v) const { return vec4(x / (T)v, y / (T)v, z / (T)v, w / (T)v); } template - vec4 operator/(const vec4& v) const { + constexpr vec4 operator/(const vec4& v) const { return vec4(x / (T)v.x, y / (T)v.y, z / (T)v.z, w / (T)v.w); } // Generic Operations - vec4 operator-() const { return vec4(-x, -y, -z, -w); } + constexpr vec4 operator-() const { return vec4(-x, -y, -z, -w); } template - bool operator==(const vec4& v) const { + constexpr bool operator==(const vec4& v) const { return x == (T)v.x && y == (T)v.y && z == (T)v.z && w == (T)v.w; } template - bool operator!=(const vec4& v) const { + constexpr bool operator!=(const vec4& v) const { return !(*this == v); } // Functions double Len() const { return std::sqrt(SqLen()); } - double SqLen() const { return x * x + y * y + z * z + w * w; } + constexpr double SqLen() const { return x * x + y * y + z * z + w * w; } template double Distance(const vec4& v) const { @@ -226,37 +226,37 @@ class vec4 { } template - T Dot(const vec4& v) const { + constexpr T Dot(const vec4& v) const { return x * (T)v.x + y * (T)v.y + z * (T)v.z + w * (T)v.w; } // Swap Functions - void SwapXY() { + constexpr void SwapXY() { T t = x; x = y; y = t; } - void SwapXZ() { + constexpr void SwapXZ() { T t = x; x = z; z = t; } - void SwapXW() { + constexpr void SwapXW() { T t = x; x = w; w = t; } - void SwapYZ() { + constexpr void SwapYZ() { T t = y; y = z; z = t; } - void SwapYW() { + constexpr void SwapYW() { T t = y; y = w; w = t; } - void SwapZW() { + constexpr void SwapZW() { T t = z; z = w; w = t; diff --git a/include/pd/lithium/rect.hpp b/include/pd/lithium/rect.hpp index ae61f0a..48bc45d 100644 --- a/include/pd/lithium/rect.hpp +++ b/include/pd/lithium/rect.hpp @@ -29,14 +29,14 @@ namespace PD { namespace Li { class Rect { public: - Rect() : Top(0), Bot(0) {} + constexpr Rect() : Top(0), Bot(0) {} ~Rect() = default; /** * Constructor that initializes the rectangle using top and bottom positions. * @param t Top left and right corner positions. * @param b Bottom left and right corner positions. */ - Rect(const fvec4& t, const fvec4& b) { + constexpr Rect(const fvec4& t, const fvec4& b) { Top = t; Bot = b; } @@ -48,7 +48,8 @@ class Rect { * @param bl Bottom left corner position. * @param br Bottom right corner position. */ - Rect(const fvec2& tl, const fvec2& tr, const fvec2& bl, const fvec2& br) { + constexpr Rect(const fvec2& tl, const fvec2& tr, const fvec2& bl, + const fvec2& br) { Top = fvec4(tl, tr); Bot = fvec4(bl, br); } @@ -61,7 +62,7 @@ class Rect { * * @param uv Vec4 UV map. */ - Rect(const fvec4& uv) { + constexpr Rect(const fvec4& uv) { Top = vec4(uv.x, uv.y, uv.z, uv.y); Bot = vec4(uv.x, uv.w, uv.z, uv.w); } @@ -70,29 +71,29 @@ class Rect { * Get the top-left corner position. * @return Top-left position as vec2. */ - fvec2 TopLeft() const { return fvec2(Top.x, Top.y); } + constexpr fvec2 TopLeft() const { return fvec2(Top.x, Top.y); } /** * Get the top-right corner position. * @return Top-right position as vec2. */ - fvec2 TopRight() const { return fvec2(Top.z, Top.w); } + constexpr fvec2 TopRight() const { return fvec2(Top.z, Top.w); } /** * Get the bottom-left corner position. * @return Bottom-left position as vec2. */ - fvec2 BotLeft() const { return fvec2(Bot.x, Bot.y); } + constexpr fvec2 BotLeft() const { return fvec2(Bot.x, Bot.y); } /** * Get the bottom-right corner position. * @return Bottom-right position as vec2. */ - fvec2 BotRight() const { return fvec2(Bot.z, Bot.w); } + constexpr fvec2 BotRight() const { return fvec2(Bot.z, Bot.w); } /** * Set the top-left corner position. * @param v New top-left position. * @return Reference to the updated Rect. */ - Rect& TopLeft(const fvec2& v) { + constexpr Rect& TopLeft(const fvec2& v) { Top.x = v.x; Top.y = v.y; return *this; @@ -103,7 +104,7 @@ class Rect { * @param v New top-right position. * @return Reference to the updated Rect. */ - Rect& TopRight(const fvec2& v) { + constexpr Rect& TopRight(const fvec2& v) { Top.z = v.x; Top.w = v.y; return *this; @@ -114,7 +115,7 @@ class Rect { * @param v New bottom-left position. * @return Reference to the updated Rect. */ - Rect& BotLeft(const fvec2& v) { + constexpr Rect& BotLeft(const fvec2& v) { Bot.x = v.x; Bot.y = v.y; return *this; @@ -125,15 +126,17 @@ class Rect { * @param v New bottom-right position. * @return Reference to the updated Rect. */ - Rect& BotRight(const fvec2& v) { + constexpr Rect& BotRight(const fvec2& v) { Bot.z = v.x; Bot.w = v.y; return *this; } - bool operator==(const Rect& r) const { return Top == r.Top && Bot == r.Bot; } + constexpr bool operator==(const Rect& r) const { + return Top == r.Top && Bot == r.Bot; + } - void SwapVec2XY() { + constexpr void SwapVec2XY() { Top.SwapXY(); Top.SwapZW(); Bot.SwapXY(); diff --git a/tools/lazyvec/CMakeLists.txt b/tools/lazyvec/CMakeLists.txt index f564a06..97045bb 100755 --- a/tools/lazyvec/CMakeLists.txt +++ b/tools/lazyvec/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.22) -project(lazyvec LANGUAGES CXX VERSION 2.0.0) +project(lazyvec LANGUAGES CXX VERSION 2.1.0) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED true) diff --git a/tools/lazyvec/source/lazyfuncs.cpp b/tools/lazyvec/source/lazyfuncs.cpp index f9dcef9..5cb2f25 100644 --- a/tools/lazyvec/source/lazyfuncs.cpp +++ b/tools/lazyvec/source/lazyfuncs.cpp @@ -25,7 +25,7 @@ SOFTWARE. constexpr std::string_view _funcs = R"text( double Len() const {{ return std::sqrt(SqLen()); }} - double SqLen() const {{ return {1}; }} + constexpr double SqLen() const {{ return {1}; }} template double Distance(const vec{0}& v) const {{ @@ -41,14 +41,14 @@ constexpr std::string_view _funcs = R"text( }} template - T Dot(const vec{0}&v) const {{ + constexpr T Dot(const vec{0}&v) const {{ return {2}; }} )text"; constexpr std::string_view _cross = R"text( template - vec3 Cross(const vec3& v) const { + constexpr vec3 Cross(const vec3& v) const { return vec3(y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); } )text"; diff --git a/tools/lazyvec/source/lazyoperation.cpp b/tools/lazyvec/source/lazyoperation.cpp index 6caea47..0147611 100644 --- a/tools/lazyvec/source/lazyoperation.cpp +++ b/tools/lazyvec/source/lazyoperation.cpp @@ -25,24 +25,24 @@ SOFTWARE. constexpr std::string_view _op_template = R"text( template - vec{0}& operator{1}=(T1 v) {{ + constexpr vec{0}& operator{1}=(T1 v) {{ {2} return *this; }} template - vec{0}& operator{1}=(const vec{0}& v) {{ + constexpr vec{0}& operator{1}=(const vec{0}& v) {{ {3} return *this; }} template - vec{0} operator{1}(T1 v) const {{ + constexpr vec{0} operator{1}(T1 v) const {{ return vec{0}({4}); }} template - vec{0} operator{1}(const vec{0}& v) const {{ + constexpr vec{0} operator{1}(const vec{0}& v) const {{ return vec{0}({5}); }} )text"; diff --git a/tools/lazyvec/source/lazyops.cpp b/tools/lazyvec/source/lazyops.cpp index 0208951..1362b70 100644 --- a/tools/lazyvec/source/lazyops.cpp +++ b/tools/lazyvec/source/lazyops.cpp @@ -30,11 +30,11 @@ SOFTWARE. */ constexpr std::string_view _generic_ops = R"text( - vec{0} operator-() const {{ return vec{0}({1}); }} + constexpr vec{0} operator-() const {{ return vec{0}({1}); }} template - bool operator==(const vec{0}& v) const {{ return {2}; }} + constexpr bool operator==(const vec{0}& v) const {{ return {2}; }} template - bool operator!=(const vec{0}& v) const {{ return !(*this == v); }} + constexpr bool operator!=(const vec{0}& v) const {{ return !(*this == v); }} )text"; namespace LVec { diff --git a/tools/lazyvec/source/lazyswap.cpp b/tools/lazyvec/source/lazyswap.cpp index ab9a505..9a59db2 100644 --- a/tools/lazyvec/source/lazyswap.cpp +++ b/tools/lazyvec/source/lazyswap.cpp @@ -36,7 +36,7 @@ std::string MakeSwap(int n) { if (a == b || done.count(b + a)) { continue; } - s << " void Swap" << (char)toupper(a[0]) << (char)toupper(b[0]) + s << " constexpr void Swap" << (char)toupper(a[0]) << (char)toupper(b[0]) << "() {\n"; s << " T t = " << a << ";\n " << a << " = " << b << ";\n"; s << " " << b << " = t;\n }\n"; diff --git a/tools/lazyvec/source/lazytemplate.cpp b/tools/lazyvec/source/lazytemplate.cpp index 579de71..2fa08f3 100644 --- a/tools/lazyvec/source/lazytemplate.cpp +++ b/tools/lazyvec/source/lazytemplate.cpp @@ -48,9 +48,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -// This file is generated by lazyvec 2.0.0 +// This file is generated by lazyvec 2.1.0 -#include +#include {7} namespace PD {{