Updated some namespaces, finished some todos. v5 should be cancelled probably as the code is too intertwined to make it modular

This commit is contained in:
Kwoth
2023-11-11 05:22:52 +00:00
parent a28be0d343
commit bc77783820
224 changed files with 308 additions and 317 deletions

View File

@@ -3,7 +3,7 @@ using System.Security.Cryptography;
namespace Nadeko.Common;
public class NadekoRandom : Random
public sealed class NadekoRandom : Random
{
private readonly RandomNumberGenerator _rng;
@@ -16,27 +16,25 @@ public class NadekoRandom : Random
_rng.GetBytes(bytes);
return Math.Abs(BitConverter.ToInt32(bytes, 0));
}
/// <summary>
/// Generates a random integer between 0 (inclusive) and
/// a specified exclusive upper bound using a cryptographically strong random number generator.
/// </summary>
/// <param name="maxValue">Exclusive max value</param>
/// <returns>A random number</returns>
public override int Next(int maxValue)
{
if (maxValue <= 0)
throw new ArgumentOutOfRangeException(nameof(maxValue));
var bytes = new byte[sizeof(int)];
_rng.GetBytes(bytes);
return Math.Abs(BitConverter.ToInt32(bytes, 0)) % maxValue;
}
=> RandomNumberGenerator.GetInt32(maxValue);
/// <summary>
/// Generates a random integer between a specified inclusive lower bound and a
/// specified exclusive upper bound using a cryptographically strong random number generator.
/// </summary>
/// <param name="minValue">Inclusive min value</param>
/// <param name="maxValue">Exclusive max value</param>
/// <returns>A random number</returns>
public override int Next(int minValue, int maxValue)
{
if (minValue > maxValue)
throw new ArgumentOutOfRangeException(nameof(maxValue));
if (minValue == maxValue)
return minValue;
var bytes = new byte[sizeof(int)];
_rng.GetBytes(bytes);
var sign = Math.Sign(BitConverter.ToInt32(bytes, 0));
return (sign * BitConverter.ToInt32(bytes, 0) % (maxValue - minValue)) + minValue;
}
=> RandomNumberGenerator.GetInt32(minValue, maxValue);
public long NextLong(long minValue, long maxValue)
{