makepad/libs/rapier/vendor/glam/templates/swizzle_traits.rs.tera
2026-03-15 09:52:45 +01:00

91 lines
3.3 KiB
Text

// Generated from {{template_path}} template. Edit the template, not the generated file.
{% set components = ["x", "y", "z", "w"] %}
{% set dimensions = [2, 3, 4] %}
{% for dim in dimensions %}
{% set vec2_t = "Self::Vec2" %}
{% set vec3_t = "Self::Vec3" %}
{% set vec4_t = "Self::Vec4" %}
{% if dim == 4 %}
{% set vec4_t = "Self" %}
{% elif dim == 3 %}
{% set vec3_t = "Self" %}
{% elif dim == 2 %}
{% set vec2_t = "Self" %}
{% endif %}
pub trait Vec{{ dim }}Swizzles: Sized + Copy + Clone {
{% if dim != 2 %}
type Vec2;
{% endif %}
{% if dim != 3 %}
type Vec3;
{% endif %}
{% if dim != 4 %}
type Vec4;
{% endif %}
{% if dim == 4 %}
#[inline]
#[must_use]
fn xyzw(self) -> Self {
self
}
{% elif dim == 3 %}
#[inline]
#[must_use]
fn xyz(self) -> Self {
self
}
{% elif dim == 2 %}
#[inline]
#[must_use]
fn xy(self) -> Self {
self
}
{% endif %}
{% for i in dimensions %}
{% for e0 in components | slice(end=dim) %}
{% for e1 in components | slice(end=dim) %}
{% if i == 2 %}
{% set skip = dim == 2 and e0 == "x" and e1 == "y" %}
{% if not skip %}
#[must_use]
fn {{e0}}{{e1}}(self) -> {{ vec2_t }};
{% endif %}
{% set skip = dim == 2 or e0 == e1 %}
{% if not skip %}
#[must_use]
fn with_{{e0}}{{e1}}(self, rhs: {{ vec2_t }}) -> Self;
{% endif %}
{% else %}
{% for e2 in components | slice(end=dim) %}
{% if i == 3 %}
{% set skip = dim == 3 and e0 == "x" and e1 == "y" and e2 == "z" %}
{% if not skip %}
#[must_use]
fn {{e0}}{{e1}}{{e2}}(self) -> {{ vec3_t }};
{% endif %}
{% set skip = dim == 3 or e0 == e1 or e0 == e2 or e1 == e2 %}
{% if not skip %}
#[must_use]
fn with_{{e0}}{{e1}}{{e2}}(self, rhs: {{ vec3_t }}) -> Self;
{% endif %}
{% else %}
{% for e3 in components | slice(end=dim) %}
{% set skip = dim == 4 and e0 == "x" and e1 == "y" and e2 == "z" and e3 == "w" %}
{% if not skip %}
#[must_use]
fn {{e0}}{{e1}}{{e2}}{{e3}}(self) -> {{ vec4_t }};
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
}
{% endfor %}