forked from nanoframework/nanoFramework.IoT.Device
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MathExtensions.cs
143 lines (127 loc) · 3.97 KB
/
MathExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Runtime.CompilerServices;
namespace Iot.Device
{
/// <summary>
/// Implementations of some functions missing in older .NET versions.
/// </summary>
internal static class MathExtensions
{
/// <summary>
/// Returns val, limited to the range min-max (inclusive).
/// </summary>
/// <param name="val">The value to restrict.</param>
/// <param name="min">The min value to compare against.</param>
/// <param name="max">The max value to compare against.</param>
/// <returns>Value between min and max values.</returns>
public static double Clamp(double val, double min, double max)
{
#if !NET5_0_OR_GREATER
if (val < min)
{
return min;
}
if (val > max)
{
return max;
}
return val;
#else
return Math.Clamp(val, min, max);
#endif
}
/// <summary>
/// Returns val, limited to the range min-max (inclusive).
/// </summary>
/// <param name="val">The value to restrict.</param>
/// <param name="min">The min value to compare against.</param>
/// <param name="max">The max value to compare against.</param>
/// <returns>Value between min and max values.</returns>
public static int Clamp(int val, int min, int max)
{
#if !NET5_0_OR_GREATER
if (val < min)
{
return min;
}
if (val > max)
{
return max;
}
return val;
#else
return Math.Clamp(val, min, max);
#endif
}
/// <summary>
/// Returns val, limited to the range min-max (inclusive).
/// </summary>
/// <param name="val">The value to restrict.</param>
/// <param name="min">The min value to compare against.</param>
/// <param name="max">The max value to compare against.</param>
/// <returns>Value between min and max values.</returns>
public static byte Clamp(byte val, byte min, byte max)
{
#if !NET5_0_OR_GREATER
if (val < min)
{
return min;
}
if (val > max)
{
return max;
}
return val;
#else
return Math.Clamp(val, min, max);
#endif
}
/// <summary>
/// Returns val, limited to the range min-max (inclusive).
/// </summary>
/// <param name="val">The value to restrict.</param>
/// <param name="min">The min value to compare against.</param>
/// <param name="max">The max value to compare against.</param>
/// <returns>Value between min and max values.</returns>
public static long Clamp(long val, long min, long max)
{
#if !NET5_0_OR_GREATER
if (val < min)
{
return min;
}
if (val > max)
{
return max;
}
return val;
#else
return Math.Clamp(val, min, max);
#endif
}
/// <summary>
/// Returns val, limited to the range min-max (inclusive).
/// </summary>
/// <param name="val">The value to restrict.</param>
/// <param name="min">The min value to compare against.</param>
/// <param name="max">The max value to compare against.</param>
/// <returns>Value between min and max values.</returns>
public static uint Clamp(uint val, uint min, uint max)
{
#if !NET5_0_OR_GREATER
if (val < min)
{
return min;
}
if (val > max)
{
return max;
}
return val;
#else
return Math.Clamp(val, min, max);
#endif
}
}
}