mirror of
https://github.com/tribufu/ServerManagers
synced 2026-05-06 15:17:34 +00:00
49 lines
1.4 KiB
C#
49 lines
1.4 KiB
C#
using ServerManagerTool.Common.Utils;
|
|
using System;
|
|
using System.Globalization;
|
|
using System.Numerics;
|
|
using System.Windows.Data;
|
|
|
|
namespace ServerManagerTool.Common.Converters
|
|
{
|
|
public class ProcessorAffinityConverter : IValueConverter
|
|
{
|
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
if (!BigInteger.TryParse(value.ToString(), out BigInteger affinity))
|
|
return "Invalid";
|
|
|
|
if (!ProcessUtils.IsProcessorAffinityValid(affinity))
|
|
return "Invalid";
|
|
|
|
if (affinity == BigInteger.Zero)
|
|
return "All";
|
|
|
|
var result = string.Empty;
|
|
var delimiter = string.Empty;
|
|
|
|
var index = 0;
|
|
while (true)
|
|
{
|
|
var cpuValue = (BigInteger)Math.Pow(2, index);
|
|
if (cpuValue > affinity)
|
|
break;
|
|
|
|
if ((affinity & cpuValue) == cpuValue)
|
|
{
|
|
result = $"{result}{delimiter}{index}";
|
|
delimiter = ", ";
|
|
}
|
|
|
|
index++;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
{
|
|
throw new InvalidOperationException("ProcessorAffinityConverter can only be used OneWay.");
|
|
}
|
|
}
|
|
}
|