Fixed vector indexed access

This commit is contained in:
Simon Lübeß
2021-05-22 15:08:14 +02:00
parent b19dd60e52
commit 0f2c481616
3 changed files with 114 additions and 18 deletions
+47 -4
View File
@@ -29,6 +29,21 @@ namespace GlitchyEngine.Math
} }
public ref float this[int index] public ref float this[int index]
{
[Checked]
get mut
{
if(index < 0 || index >= Length)
Internal.ThrowIndexOutOfRange(1);
return ref (&X)[index];
}
[Inline]
get mut => ref (&X)[index];
}
public float this[int index]
{ {
[Checked] [Checked]
get get
@@ -36,13 +51,41 @@ namespace GlitchyEngine.Math
if(index < 0 || index >= Length) if(index < 0 || index >= Length)
Internal.ThrowIndexOutOfRange(1); Internal.ThrowIndexOutOfRange(1);
#unwarn if(index == 0)
return ref (&X)[index]; return X;
else
return Y;
} }
[Inline] [Inline]
#unwarn get
get => ref (&X)[index]; {
if(index == 0)
return X;
else
return Y;
}
[Checked]
set mut
{
if(index < 0 || index >= Length)
Internal.ThrowIndexOutOfRange(1);
if(index == 0)
X = value;
else
Y = value;
}
[Inline]
set mut
{
if(index == 0)
X = value;
else
Y = value;
}
} }
/** /**
+32 -7
View File
@@ -17,6 +17,8 @@ namespace GlitchyEngine.Math
public const Vector3 Right = .(1f, 0f, 0f); public const Vector3 Right = .(1f, 0f, 0f);
public const Vector3 Up = .(0f, 1f, 0f); public const Vector3 Up = .(0f, 1f, 0f);
public const Vector3 Down = .(0f, -1f, 0f); public const Vector3 Down = .(0f, -1f, 0f);
public const int Length = 3;
public float X, Y, Z; public float X, Y, Z;
@@ -42,22 +44,45 @@ namespace GlitchyEngine.Math
Y = y; Y = y;
Z = z; Z = z;
} }
public ref float this[int index] public ref float this[int index]
{ {
[Checked] [Checked]
get get mut
{ {
if(index < 0 || index > 2) if(index < 0 || index >= Length)
Internal.ThrowIndexOutOfRange(); Internal.ThrowIndexOutOfRange(1);
#unwarn
return ref (&X)[index]; return ref (&X)[index];
} }
[Inline] [Inline]
#unwarn get mut => ref (&X)[index];
get => ref (&X)[index]; }
public float this[int index]
{
get
{
switch(index)
{
case 0: return X;
case 1: return Y;
case 2: return Z;
default: Internal.ThrowIndexOutOfRange();
}
}
set mut
{
switch(index)
{
case 0: X = value;
case 1: Y = value;
case 2: Z = value;
default: Internal.ThrowIndexOutOfRange();
}
}
} }
/** /**
+35 -7
View File
@@ -11,6 +11,8 @@ namespace GlitchyEngine.Math
public const Vector4 UnitZ = .(0f, 0f, 1f, 0f); public const Vector4 UnitZ = .(0f, 0f, 1f, 0f);
public const Vector4 UnitW = .(0f, 0f, 0f, 1f); public const Vector4 UnitW = .(0f, 0f, 0f, 1f);
public const Vector4 One = .(1f, 1f, 1f, 1f); public const Vector4 One = .(1f, 1f, 1f, 1f);
public const int Length = 4;
public float X, Y, Z, W; public float X, Y, Z, W;
@@ -55,21 +57,47 @@ namespace GlitchyEngine.Math
Z = z; Z = z;
W = w; W = w;
} }
public ref float this[int index] public ref float this[int index]
{ {
[Checked] [Checked]
get get mut
{ {
if(index < 0 || index > 3) if(index < 0 || index >= Length)
Internal.ThrowIndexOutOfRange(); Internal.ThrowIndexOutOfRange(1);
#unwarn
return ref (&X)[index]; return ref (&X)[index];
} }
[Inline] [Inline]
#unwarn get mut => ref (&X)[index];
get => ref (&X)[index]; }
public float this[int index]
{
get
{
switch(index)
{
case 0: return X;
case 1: return Y;
case 2: return Z;
case 3: return W;
default: Internal.ThrowIndexOutOfRange();
}
}
set mut
{
switch(index)
{
case 0: X = value;
case 1: Y = value;
case 2: Z = value;
case 3: W = value;
default: Internal.ThrowIndexOutOfRange();
}
}
} }
/** /**