20221224-1

This commit is contained in:
Alexander
2022-12-24 15:01:07 +03:00
parent 2ea36fe8a0
commit af7a5dd299
11 changed files with 177 additions and 13 deletions

View File

@@ -0,0 +1,20 @@
namespace anbs_cp.Classes;
/// <summary>
/// Конвертер количества элементов
/// </summary>
public sealed class CountConverter : ValueConverter
{
/// <summary>
/// Имена размеров файлов по умолчанию
/// </summary>
public static readonly string[] DefaultNames = {"", "тыс.", "млн."};
/// <summary>
/// Конструктор класса
/// </summary>
/// <param name="valueNames">Массив имён размерностей</param>
public CountConverter (string[] valueNames) : base(valueNames, 1000)
{
}
}

View File

@@ -1,4 +1,6 @@
namespace anbs_cp.Classes;
using anbs_cp.Interfaces;
namespace anbs_cp.Classes;
/// <summary>
/// Форматирует число элементов в понятную строку

View File

@@ -0,0 +1,20 @@
namespace anbs_cp.Classes;
/// <summary>
/// Конвертер размеров файлов
/// </summary>
public sealed class FileSizeConverter : ValueConverter
{
/// <summary>
/// Имена размеров файлов по умолчанию
/// </summary>
public static readonly string[] DefaultNames = {"байт", "Кб", "Мб", "Гб", "Тб"};
/// <summary>
/// Конструктор класса
/// </summary>
/// <param name="valueNames">Массив имён размерностей</param>
public FileSizeConverter (string[] valueNames) : base(valueNames, 1024)
{
}
}

View File

@@ -1,4 +1,6 @@
namespace anbs_cp.Classes;
using anbs_cp.Interfaces;
namespace anbs_cp.Classes;
/// <summary>
/// Форматирует размер файла/папки в понятную строку

View File

@@ -0,0 +1,72 @@
using anbs_cp.Interfaces;
namespace anbs_cp.Classes;
/// <summary>
/// Абстрактный класс конвертера величин для отображения (улучшенный аналог ValueFormatter)
/// </summary>
public abstract class ValueConverter: IValueConverter
{
/// <summary>
/// Конструктор
/// </summary>
/// <param name="valueNames">Массив имён размерностей</param>
/// <param name="divider">Делитель</param>
protected ValueConverter (string[] valueNames, long divider)
{
ValueNames = valueNames;
Divider = divider;
}
#region Реализация интерфейса
/// <summary>
/// Массив имён размерностей
/// </summary>
public string[] ValueNames { get; init; }
/// <summary>
/// Делитель
/// </summary>
public long Divider { get; init; }
#endregion
#region Методы
/// <summary>
/// Функция конвертирования в строку
/// </summary>
/// <param name="value">Значение</param>
/// <returns>Конвертирование значение в строку</returns>
public string Convert (long value)
{
(decimal, int) result = DivideIt(value, 0);
return $"{result.Item1:F2} {ValueNames[result.Item2]}";
}
/// <summary>
/// Рекурсивная функция деления
/// </summary>
/// <param name="value">Число</param>
/// <param name="count">Счётчик вызова рекурсии</param>
/// <returns>Число в остатке и количество вызовов рекурсии</returns>
private (decimal, int) DivideIt (decimal value, int count)
{
//Если счёт уже больше количества названий
if (count > ValueNames.Length)
return (value, count);
//Если частное уже меньше делителя, то прерываем цикл
if (value < Divider)
return (value, count);
//Увеличиваем счётчик...
count++;
//... и продолжаем цикл
return DivideIt(value / Divider, count);
}
#endregion
}

View File

@@ -0,0 +1,17 @@
namespace anbs_cp.Interfaces;
/// <summary>
/// Интерфейс конвертера величин для отображения (улучшенный аналог IValueFormatter)
/// </summary>
public interface IValueConverter
{
/// <summary>
/// Массив имён размерностей
/// </summary>
public string[] ValueNames { get; init; }
/// <summary>
/// Делитель
/// </summary>
public long Divider { get; init; }
}

View File

@@ -1,4 +1,4 @@
namespace anbs_cp.Classes;
namespace anbs_cp.Interfaces;
/// <summary>
/// Форматирует размерности в понятную строку

View File

@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Version>2022.1224.0</Version>
<Version>2022.1224.1</Version>
<Authors>Alexander Babaev</Authors>
<Product>ANB Software Components Pack</Product>
<Description>Library of some useful functions in C# language.</Description>
@@ -15,8 +15,8 @@
<SignAssembly>True</SignAssembly>
<PackageProjectUrl>https://git.babaev-an.ru/babaev-an/anbsoftware_componentspack</PackageProjectUrl>
<RepositoryUrl>https://git.babaev-an.ru/babaev-an/anbsoftware_componentspack</RepositoryUrl>
<AssemblyVersion>2022.1224.0</AssemblyVersion>
<FileVersion>2022.1224.0</FileVersion>
<AssemblyVersion>2022.1224.1</AssemblyVersion>
<FileVersion>2022.1224.1</FileVersion>
<PackageId>ANBSoftware.ComponentsPack</PackageId>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<AnalysisLevel>6.0</AnalysisLevel>