Added FisheryLib.Collections.FishTable and Mono.Cecil extension methods
A bit of refactoring has been done too
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
// Copyright (c) 2023 bradson
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
namespace FisheryLib.Utility;
|
||||
|
||||
public static class FishMath
|
||||
{
|
||||
public const double PHI
|
||||
= 1.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475;
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public static int TrailingZeroCount(uint value)
|
||||
=> value == 0
|
||||
? 32
|
||||
: _trailingZeroCountDeBruijn[(int)(((value & unchecked(0 - value)) * 125613361) >> 27)];
|
||||
|
||||
public static int NextPowerOfTwo(int value)
|
||||
{
|
||||
#if NETCORE
|
||||
return 1L << (63 - BitOperations.LeadingZeroCount(value));
|
||||
#else
|
||||
value--;
|
||||
value |= value >> 1;
|
||||
value |= value >> 2;
|
||||
value |= value >> 4;
|
||||
value |= value >> 8;
|
||||
value |= value >> 16;
|
||||
value++;
|
||||
return value;
|
||||
#endif
|
||||
}
|
||||
|
||||
private static byte[] _trailingZeroCountDeBruijn
|
||||
= {
|
||||
0, 1, 28, 2, 29, 14, 24, 3, 30, 22,
|
||||
20, 15, 25, 17, 4, 8, 31, 27, 13, 23,
|
||||
21, 19, 16, 7, 26, 12, 18, 6, 11, 5,
|
||||
10, 9
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user