91 lines
3.3 KiB
Text
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 %}
|