Current section

Files

Jump to
vec src vec@vec2.erl
Raw

src/vec@vec2.erl

-module(vec@vec2).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/vec/vec2.gleam").
-export([splat/1, from_tuple/1, to_tuple/1, to_list/1, x/1, y/1, replace_x/2, replace_y/2, map_x/2, map_y/2, swap/1, map/2, map2/3, map3/4, result/1]).
-export_type([vec2/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type vec2(GRA) :: {vec2, GRA, GRA}.
-file("src/vec/vec2.gleam", 17).
?DOC(
" Creates a vector with all elements set to a value.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" splat(12)\n"
" // -> Vec2(12, 12)\n"
" ```\n"
).
-spec splat(GRC) -> vec2(GRC).
splat(Value) ->
{vec2, Value, Value}.
-file("src/vec/vec2.gleam", 30).
?DOC(
" Converts a tuple of the contained elements into a vector.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" #(12, -34) |> from_tuple\n"
" // -> Vec2(12, -34)\n"
" ```\n"
).
-spec from_tuple({GRE, GRE}) -> vec2(GRE).
from_tuple(Tuple) ->
{vec2, erlang:element(1, Tuple), erlang:element(2, Tuple)}.
-file("src/vec/vec2.gleam", 43).
?DOC(
" Converts the vector into a tuple of the contained elements.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> to_tuple\n"
" // -> #(12, -34)\n"
" ```\n"
).
-spec to_tuple(vec2(GRG)) -> {GRG, GRG}.
to_tuple(Vector) ->
{erlang:element(2, Vector), erlang:element(3, Vector)}.
-file("src/vec/vec2.gleam", 56).
?DOC(
" Converts the vector into a list of the contained elements.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> to_list\n"
" // -> [12, -34]\n"
" ```\n"
).
-spec to_list(vec2(GRI)) -> list(GRI).
to_list(Vector) ->
[erlang:element(2, Vector), erlang:element(3, Vector)].
-file("src/vec/vec2.gleam", 69).
?DOC(
" Returns the x element in a vector.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> x\n"
" // -> 12\n"
" ```\n"
).
-spec x(vec2(GRL)) -> GRL.
x(Vector) ->
erlang:element(2, Vector).
-file("src/vec/vec2.gleam", 82).
?DOC(
" Returns the y element in a vector.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> y\n"
" // -> -34\n"
" ```\n"
).
-spec y(vec2(GRN)) -> GRN.
y(Vector) ->
erlang:element(3, Vector).
-file("src/vec/vec2.gleam", 95).
?DOC(
" Returns a new vector with the x element replace with `value`.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> replace_x(777)\n"
" // -> Vec2(777, -34)\n"
" ```\n"
).
-spec replace_x(vec2(GRP), GRP) -> vec2(GRP).
replace_x(Vector, Value) ->
{vec2, Value, erlang:element(3, Vector)}.
-file("src/vec/vec2.gleam", 108).
?DOC(
" Returns a new vector with the y element replace with `value`.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> replace_y(777)\n"
" // -> Vec2(12, 777)\n"
" ```\n"
).
-spec replace_y(vec2(GRS), GRS) -> vec2(GRS).
replace_y(Vector, Value) ->
{vec2, erlang:element(2, Vector), Value}.
-file("src/vec/vec2.gleam", 121).
?DOC(
" Returns a new vector with the x element having had `with` applied to it.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> map_x(fn(n) { n * 2 })\n"
" // -> Vec2(24, -34)\n"
" ```\n"
).
-spec map_x(vec2(GRV), fun((GRV) -> GRV)) -> vec2(GRV).
map_x(Vector, Fun) ->
{vec2, Fun(erlang:element(2, Vector)), erlang:element(3, Vector)}.
-file("src/vec/vec2.gleam", 134).
?DOC(
" Returns a new vector with the y element having had `with` applied to it.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> map_y(fn(n) { n * 2 })\n"
" // -> Vec2(12, -68)\n"
" ```\n"
).
-spec map_y(vec2(GRY), fun((GRY) -> GRY)) -> vec2(GRY).
map_y(Vector, Fun) ->
{vec2, erlang:element(2, Vector), Fun(erlang:element(3, Vector))}.
-file("src/vec/vec2.gleam", 147).
?DOC(
" Returns a new vector with the x and y elements swaped.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> swap\n"
" // -> Vec2(-34, 12)\n"
" ```\n"
).
-spec swap(vec2(GSB)) -> vec2(GSB).
swap(Vector) ->
{vec2, erlang:element(3, Vector), erlang:element(2, Vector)}.
-file("src/vec/vec2.gleam", 161).
?DOC(
" Returns a new vector containing only the elements of the first vector after\n"
" the function has been applied to each one.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> map(fn(x) { x * 2 })\n"
" // -> Vec2(24, -68)\n"
" ```\n"
).
-spec map(vec2(GSE), fun((GSE) -> GSG)) -> vec2(GSG).
map(Vector, Fun) ->
{vec2, Fun(erlang:element(2, Vector)), Fun(erlang:element(3, Vector))}.
-file("src/vec/vec2.gleam", 174).
?DOC(
" Combines two vectors into a single vector using the given function.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(12, -34) |> map2(Vec2(420, 69), fn(x, y) { x + y })\n"
" // -> Vec2(432, 35)\n"
" ```\n"
).
-spec map2(vec2(GSI), vec2(GSK), fun((GSI, GSK) -> GSM)) -> vec2(GSM).
map2(A, B, Fun) ->
{vec2,
Fun(erlang:element(2, A), erlang:element(2, B)),
Fun(erlang:element(3, A), erlang:element(3, B))}.
-file("src/vec/vec2.gleam", 191).
?DOC(
" Combines three vectors into a single vector using the given function.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" fn linear_interpolation(weight: Float, a: Float, b: Float) -> Float {\n"
" a +. { b -. a } *. weight\n"
" }\n"
"\n"
" 0.6 |> splat |> map3(Vec2(1.2, -3.4), Vec2(1.0, 2.1), linear_interpolation)\n"
" // -> Vec2(1.08, -0.1)\n"
" ```\n"
).
-spec map3(vec2(GSO), vec2(GSQ), vec2(GSS), fun((GSO, GSQ, GSS) -> GSS)) -> vec2(GSS).
map3(A, B, C, Fun) ->
{vec2,
Fun(erlang:element(2, A), erlang:element(2, B), erlang:element(2, C)),
Fun(erlang:element(3, A), erlang:element(3, B), erlang:element(3, C))}.
-file("src/vec/vec2.gleam", 216).
?DOC(
" Combines a vector of results into a single result. If all elements in the\n"
" vector are `Ok` then returns an `Ok` holding the vector of values. If any\n"
" element is `Error` then returns the first error.\n"
"\n"
" ## Examples\n"
"\n"
" ```gleam\n"
" Vec2(Ok(12), Ok(-34)) |> result\n"
" // -> Ok(Vec2(12, -34))\n"
" ```\n"
"\n"
" ```gleam\n"
" Vec2(Ok(12), Error(\"foo\")) |> result\n"
" // -> Error(\"foo\")\n"
" ```\n"
).
-spec result(vec2({ok, GSV} | {error, GSW})) -> {ok, vec2(GSV)} | {error, GSW}.
result(Vector) ->
case Vector of
{vec2, {ok, X}, {ok, Y}} ->
{ok, {vec2, X, Y}};
{vec2, {error, Error}, _} ->
{error, Error};
{vec2, _, {error, Error@1}} ->
{error, Error@1}
end.