152 lines
4.2 KiB
Ada
152 lines
4.2 KiB
Ada
package body c_math_c.Conversion
|
|
is
|
|
|
|
function "+" (Self : in Integer) return C.int
|
|
is
|
|
begin
|
|
return C.int (Self);
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in C.int) return Integer
|
|
is
|
|
begin
|
|
return Integer (Self);
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in math.Real) return c_math_c.Real
|
|
is
|
|
begin
|
|
return c_math_c.Real (Self);
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in c_math_c.Real) return math.Real
|
|
is
|
|
begin
|
|
return math.Real (Self);
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in math.Vector_2) return c_math_c.Vector_2.item
|
|
is
|
|
Result : c_math_c.Vector_2.item;
|
|
begin
|
|
begin
|
|
Result.x := c_math_c.Real (Self (1));
|
|
exception
|
|
when constraint_Error =>
|
|
if Self (1) > 0.0
|
|
then Result.x := c_math_c.Real'Last;
|
|
else Result.x := c_math_c.Real'First;
|
|
end if;
|
|
end;
|
|
|
|
begin
|
|
Result.y := c_math_c.Real (Self (2));
|
|
exception
|
|
when constraint_Error =>
|
|
if Self (2) > 0.0
|
|
then Result.x := c_math_c.Real'Last;
|
|
else Result.x := c_math_c.Real'First;
|
|
end if;
|
|
end;
|
|
|
|
return Result;
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in c_math_c.Vector_2.item) return math.Vector_2
|
|
is
|
|
begin
|
|
return [math.Real (Self.x),
|
|
math.Real (Self.y)];
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in math.Vector_3) return c_math_c.Vector_3.item
|
|
is
|
|
Result : c_math_c.Vector_3.item;
|
|
begin
|
|
begin
|
|
Result.x := c_math_c.Real (Self (1));
|
|
exception
|
|
when constraint_Error =>
|
|
if Self (1) > 0.0
|
|
then Result.x := c_math_c.Real'Last;
|
|
else Result.x := c_math_c.Real'First;
|
|
end if;
|
|
end;
|
|
|
|
begin
|
|
Result.y := c_math_c.Real (Self (2));
|
|
exception
|
|
when constraint_Error =>
|
|
if Self (2) > 0.0
|
|
then Result.x := c_math_c.Real'Last;
|
|
else Result.x := c_math_c.Real'First;
|
|
end if;
|
|
end;
|
|
|
|
begin
|
|
Result.z := c_math_c.Real (Self (3));
|
|
exception
|
|
when constraint_Error =>
|
|
if Self (3) > 0.0
|
|
then Result.x := c_math_c.Real'Last;
|
|
else Result.x := c_math_c.Real'First;
|
|
end if;
|
|
end;
|
|
|
|
return Result;
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in c_math_c.Vector_3.item) return math.Vector_3
|
|
is
|
|
begin
|
|
return [math.Real (Self.x), math.Real (Self.y), math.Real (Self.z)];
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in math.Matrix_3x3) return c_math_c.Matrix_3x3.item
|
|
is
|
|
begin
|
|
return (Real (Self (1,1)), Real (Self (1,2)), Real (Self (1,3)),
|
|
Real (Self (2,1)), Real (Self (2,2)), Real (Self (2,3)),
|
|
Real (Self (3,1)), Real (Self (3,2)), Real (Self (3,3)));
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in c_math_c.Matrix_3x3.item) return math.Matrix_3x3
|
|
is
|
|
begin
|
|
return [1 => [math.Real (Self.m00), math.Real (Self.m01), math.Real (Self.m02)],
|
|
2 => [math.Real (Self.m10), math.Real (Self.m11), math.Real (Self.m12)],
|
|
3 => [math.Real (Self.m20), math.Real (Self.m21), math.Real (Self.m22)]];
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in math .Matrix_4x4 ) return c_math_c.Matrix_4x4.item
|
|
is
|
|
begin
|
|
return (Real (Self (1,1)), Real (Self (1,2)), Real (Self (1,3)), Real (Self (1,4)),
|
|
Real (Self (2,1)), Real (Self (2,2)), Real (Self (2,3)), Real (Self (2,4)),
|
|
Real (Self (3,1)), Real (Self (3,2)), Real (Self (3,3)), Real (Self (3,4)),
|
|
Real (Self (4,1)), Real (Self (4,2)), Real (Self (4,3)), Real (Self (4,4)));
|
|
end "+";
|
|
|
|
|
|
function "+" (Self : in c_math_c.Matrix_4x4.item) return math.Matrix_4x4
|
|
is
|
|
begin
|
|
return [1 => [math.Real (Self.m00), math.Real (Self.m01), math.Real (Self.m02), math.Real (Self.m03)],
|
|
2 => [math.Real (Self.m10), math.Real (Self.m11), math.Real (Self.m12), math.Real (Self.m13)],
|
|
3 => [math.Real (Self.m20), math.Real (Self.m21), math.Real (Self.m22), math.Real (Self.m23)],
|
|
4 => [math.Real (Self.m30), math.Real (Self.m31), math.Real (Self.m32), math.Real (Self.m33)]];
|
|
|
|
end "+";
|
|
|
|
end c_math_c.Conversion;
|