Skip to content

Commit 6683cc9

Browse files
authored
Merge pull request #113 from linksplatform/issue-90-bdd0703d
Fix LGTM alerts
2 parents cf63836 + f2a97c0 commit 6683cc9

3 files changed

Lines changed: 50 additions & 9 deletions

File tree

csharp/Platform.Numbers/Bit[T].cs

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,74 @@ public static class Bit<T> where T : INumberBase<T>, IShiftOperators<T, int, T>
1818
private static int BitsSize = NumericType<T>.BitsSize;
1919

2020
/// <summary>
21-
///
21+
/// <para>Writes a portion of the source value into the target value at the specified bit position.</para>
22+
/// <para>Записывает часть исходного значения в целевое значение в указанной битовой позиции.</para>
2223
/// </summary>
23-
/// <returns></returns>
24+
/// <param name="target">
25+
/// <para>The target value to write to.</para>
26+
/// <para>Целевое значение для записи.</para>
27+
/// </param>
28+
/// <param name="source">
29+
/// <para>The source value to read from.</para>
30+
/// <para>Исходное значение для чтения.</para>
31+
/// </param>
32+
/// <param name="shift">
33+
/// <para>The bit position to start writing at.</para>
34+
/// <para>Битовая позиция для начала записи.</para>
35+
/// </param>
36+
/// <param name="limit">
37+
/// <para>The number of bits to write.</para>
38+
/// <para>Количество битов для записи.</para>
39+
/// </param>
40+
/// <returns>
41+
/// <para>The target value with the specified bits updated.</para>
42+
/// <para>Целевое значение с обновленными указанными битами.</para>
43+
/// </returns>
2444
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2545
public static T PartialWrite(T target, T source, int shift, int limit)
2646
{
2747
if (shift < 0)
2848
{
29-
shift = 32 + shift;
49+
shift = BitsSize + shift;
3050
}
3151
if (limit < 0)
3252
{
33-
limit = 32 + limit;
53+
limit = BitsSize + limit;
3454
}
3555
var sourceMask = ~(T.MaxValue << limit) & T.MaxValue;
3656
var targetMask = ~(sourceMask << shift);
3757
return target & targetMask | (source & sourceMask) << shift;
3858
}
59+
60+
/// <summary>
61+
/// <para>Reads a portion of bits from the target value at the specified bit position.</para>
62+
/// <para>Читает часть битов из целевого значения в указанной битовой позиции.</para>
63+
/// </summary>
64+
/// <param name="target">
65+
/// <para>The target value to read from.</para>
66+
/// <para>Целевое значение для чтения.</para>
67+
/// </param>
68+
/// <param name="shift">
69+
/// <para>The bit position to start reading from.</para>
70+
/// <para>Битовая позиция для начала чтения.</para>
71+
/// </param>
72+
/// <param name="limit">
73+
/// <para>The number of bits to read.</para>
74+
/// <para>Количество битов для чтения.</para>
75+
/// </param>
76+
/// <returns>
77+
/// <para>The extracted bits as a value.</para>
78+
/// <para>Извлеченные биты в виде значения.</para>
79+
/// </returns>
3980
public static T PartialRead(T target, int shift, int limit)
4081
{
4182
if (shift < 0)
4283
{
43-
shift = 32 + shift;
84+
shift = BitsSize + shift;
4485
}
4586
if (limit < 0)
4687
{
47-
limit = 32 + limit;
88+
limit = BitsSize + limit;
4889
}
4990
var sourceMask = ~(T.MaxValue << limit) & T.MaxValue;
5091
var targetMask = sourceMask << shift;

csharp/Platform.Numbers/Math.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ public static TLinkAddress Catalan<TLinkAddress>(TLinkAddress n) where TLinkAddr
101101
[MethodImpl(MethodImplOptions.AggressiveInlining)]
102102
public static bool IsPowerOfTwo<TLinkAddress>(TLinkAddress x) where TLinkAddress : IUnsignedNumber<TLinkAddress>, IBitwiseOperators<TLinkAddress, TLinkAddress, TLinkAddress>, IComparisonOperators<TLinkAddress, TLinkAddress, bool>
103103
{
104-
return (x & x - TLinkAddress.One) == TLinkAddress.Zero;
104+
return x > TLinkAddress.Zero && (x & (x - TLinkAddress.One)) == TLinkAddress.Zero;
105105
}
106106
}
107107
}

csharp/Platform.Numbers/Platform.Numbers.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<Description>LinksPlatform's Platform.Numbers Class Library</Description>
55
<Copyright>Konstantin Diachenko</Copyright>
66
<AssemblyTitle>Platform.Numbers</AssemblyTitle>
7-
<VersionPrefix>0.9.0</VersionPrefix>
7+
<VersionPrefix>0.9.1</VersionPrefix>
88
<Authors>Konstantin Diachenko</Authors>
99
<TargetFramework>net8</TargetFramework>
1010
<AssemblyName>Platform.Numbers</AssemblyName>
@@ -23,7 +23,7 @@
2323
<IncludeSymbols>true</IncludeSymbols>
2424
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
2525
<LangVersion>latest</LangVersion>
26-
<PackageReleaseNotes>Update target framework from net7 to net8.</PackageReleaseNotes>
26+
<PackageReleaseNotes>Fix LGTM alerts: add missing XML documentation, fix hardcoded bit size constants, fix IsPowerOfTwo method for zero values, fix incorrect MaximumCatalanIndex usage in Factorial method.</PackageReleaseNotes>
2727
<Nullable>enable</Nullable>
2828
</PropertyGroup>
2929

0 commit comments

Comments
 (0)