This commit is contained in:
Alexander 2021-12-15 15:52:29 +03:00
parent 6be103f92f
commit ac2909084d
6 changed files with 208 additions and 94 deletions

View File

@ -3,31 +3,46 @@
/// <summary> /// <summary>
/// Форматирует число элементов в понятную строку /// Форматирует число элементов в понятную строку
/// </summary> /// </summary>
public class CountFormatter: IValueFormatter public sealed class CountFormatter : IValueFormatter
{ {
#region ойства класса #region ойства класса
/// <summary> /// <summary>
/// Имена чисел (тысяч, миллионов, миллиардов и т.п.) /// Имена чисел (тысяч, миллионов, миллиардов и т.п.)
/// </summary> /// </summary>
public string[] CountNames { get; set; } = {"", "тыс.", "млн.", "млрд."}; public string[] CountNames { get; set; } = {"", "тыс.", "млн.", "млрд."};
/// <summary> /// <summary>
/// Знаков после запятой /// Знаков после запятой
/// </summary> /// </summary>
public byte DecimalPlaces { get; set; } = 1; public byte DecimalPlaces { get; set; } = 1;
/// <summary> /// <summary>
/// Делители чисел /// Делители чисел
/// </summary> /// </summary>
public long[] Delimeters { get; set; } = {1000, 1000000, 1000000000}; public long[] Delimeters { get; set; } = {1000, 1000000, 1000000000};
#endregion #endregion
#region Реализация интерфейса #region Реализация интерфейса
/// <summary> /// <summary>
/// Реализация интерфейса /// Реализация интерфейса
/// </summary> /// </summary>
public string[] ValueNames { get => CountNames; set => CountNames = value; } public string[] ValueNames
{
get => CountNames;
set => CountNames = value;
}
/// <summary> /// <summary>
/// Реализация интерфейса /// Реализация интерфейса
/// </summary> /// </summary>
public long[] MaxSizes { get => Delimeters; set => Delimeters = value; } public long[] MaxSizes
{
get => Delimeters;
set => Delimeters = value;
}
#endregion #endregion
} }

View File

@ -6,43 +6,56 @@
public class FileSizeFormatter : IValueFormatter public class FileSizeFormatter : IValueFormatter
{ {
#region ойства класса #region ойства класса
/// <summary> /// <summary>
/// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт) /// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт)
/// </summary> /// </summary>
public string[] SizeNames { get; set; } = {"Байт", "Кб", "Мб", "Гб", "Тб"}; public string[] SizeNames { get; set; } = {"Байт", "Кб", "Мб", "Гб", "Тб"};
/// <summary> /// <summary>
/// Знаков после запятой /// Знаков после запятой
/// </summary> /// </summary>
public byte DecimalPlaces { get; set; } = 2; public byte DecimalPlaces { get; set; } = 2;
/// <summary> /// <summary>
/// Максимально байт (далее идут Кбайты) /// Максимально байт (далее идут Кбайты)
/// </summary> /// </summary>
public long ByteMax { get; set; } = 1024; public long ByteMax { get; set; } = 1024;
/// <summary> /// <summary>
/// Максимально Кбайт (далее идут Мбайты) /// Максимально Кбайт (далее идут Мбайты)
/// </summary> /// </summary>
public long KByteMax { get; set; } = 1048576; public long KByteMax { get; set; } = 1048576;
/// <summary> /// <summary>
/// Максимально Мбайт (далее идут Гбайты) /// Максимально Мбайт (далее идут Гбайты)
/// </summary> /// </summary>
public long MByteMax { get; set; } = 1073741824; public long MByteMax { get; set; } = 1073741824;
/// <summary> /// <summary>
/// Максимально Гбайт (далее идут Тбайты) /// Максимально Гбайт (далее идут Тбайты)
/// </summary> /// </summary>
public long GByteMax { get; set; } = 1099511627776; public long GByteMax { get; set; } = 1099511627776;
#endregion #endregion
#region Реализация интерфейса #region Реализация интерфейса
/// <summary> /// <summary>
/// Реализация интерфейса /// Реализация интерфейса
/// </summary> /// </summary>
public string[] ValueNames { get => SizeNames; set => SizeNames = value; } public string[] ValueNames
{
get => SizeNames;
set => SizeNames = value;
}
/// <summary> /// <summary>
/// Реализация интерфейса /// Реализация интерфейса
/// </summary> /// </summary>
public long[] MaxSizes public long[] MaxSizes
{ {
get => new long[] { ByteMax, KByteMax, MByteMax, GByteMax }; get => new[] {ByteMax, KByteMax, MByteMax, GByteMax};
set set
{ {
ByteMax = value[0]; ByteMax = value[0];
@ -51,5 +64,6 @@ public class FileSizeFormatter: IValueFormatter
GByteMax = value[3]; GByteMax = value[3];
} }
} }
#endregion #endregion
} }

View File

@ -5,23 +5,27 @@
/// </summary> /// </summary>
public interface IValueFormatter public interface IValueFormatter
{ {
#region Определения интерфейса #region Определения интерфейса
/// <summary> /// <summary>
/// Имена размерностей /// Имена размерностей
/// </summary> /// </summary>
public string[] ValueNames { get; set; } public string[] ValueNames { get; set; }
/// <summary> /// <summary>
/// Знаков после запятой /// Знаков после запятой
/// </summary> /// </summary>
public byte DecimalPlaces { get; set; } public byte DecimalPlaces { get; set; }
/// <summary> /// <summary>
/// Максимальные размеры (массив ulong[4]) /// Максимальные размеры (массив ulong[4])
/// </summary> /// </summary>
public long[] MaxSizes { get; set; } public long[] MaxSizes { get; set; }
#endregion #endregion
#region Методы интерфейса #region Методы интерфейса
/// <summary> /// <summary>
/// Форматирование размерности /// Форматирование размерности
/// </summary> /// </summary>
@ -40,13 +44,13 @@ public interface IValueFormatter
rightnum = i == MaxSizes.Length ? long.MaxValue : MaxSizes[i]; rightnum = i == MaxSizes.Length ? long.MaxValue : MaxSizes[i];
if ((value >= leftnum) && (value < rightnum)) if (value >= leftnum && value < rightnum)
return $"{FormatValue(value, leftnum)} {ValueNames[i]}"; return $"{FormatValue(value, leftnum)} {ValueNames[i]}";
} }
return value.ToString(); return value.ToString();
} }
/// <summary> /// <summary>
/// Деление числа на число с DecimalPlaces знаками после запятой /// Деление числа на число с DecimalPlaces знаками после запятой
/// </summary> /// </summary>
@ -55,21 +59,16 @@ public interface IValueFormatter
/// <returns>Частное (с DecimalPlaces знаками после запятой)</returns> /// <returns>Частное (с DecimalPlaces знаками после запятой)</returns>
private string FormatValue(long dividend, long divider) private string FormatValue(long dividend, long divider)
{ {
if (divider == 0) if (divider == 0) return $"{dividend}";
{
return $"{dividend}";
}
long delim = 1; long delim = 1;
for (int i = 0; i <= DecimalPlaces; i++) for (int i = 0; i <= DecimalPlaces; i++) delim *= 10;
{
delim *= 10;
}
decimal value = Math.Round((decimal) (dividend * delim / divider)) / delim; decimal value = Math.Round((decimal) (dividend * delim / divider)) / delim;
return $"{value}"; return $"{value}";
} }
#endregion #endregion
} }

View File

@ -14,12 +14,10 @@ public static class LikeDelphi
{ {
string result = path; string result = path;
int Index = path.Length - 1; int Index = path.Length - 1;
if (path[Index] != '\\') if (path[Index] != '\\') result = $"{path}\\";
{
result = $"{path}\\";
}
return result; return result;
} }
/// <summary> /// <summary>
/// Парсер строки в множество строк /// Парсер строки в множество строк
/// </summary> /// </summary>
@ -41,6 +39,7 @@ public static class LikeDelphi
result.Add(astring[from..(to - from)]); result.Add(astring[from..(to - from)]);
from = to; from = to;
} while (to != astring.Length); } while (to != astring.Length);
return result; return result;
} }
} }

View File

@ -0,0 +1,90 @@
namespace anbs_cp;
/// <summary>
/// Класс проверки временного интервала
/// </summary>
public static class TimestampValidator
{
/// <summary>
/// Проверка попадания в заданный интервал (в мс)
/// </summary>
/// <param name="timestamp">Временной интервал</param>
/// <param name="checkedstamp">Проверяемый временной интервал</param>
/// <param name="deltams">Временная дельта в миллисекундах</param>
/// <returns>
/// Попал ли <paramref name="checkedstamp" /> в промежуток <paramref name="timestamp" /> +
/// <paramref name="deltams" />
/// </returns>
public static bool Validate(long timestamp, long checkedstamp, ulong deltams) =>
new TimeSpan(timestamp) + TimeSpan.FromMilliseconds(deltams) > new TimeSpan(checkedstamp);
/// <summary>
/// Проверка попадания текущего времени в заданный интервал (в мс)
/// </summary>
/// <param name="timestamp">Временной интервал</param>
/// <param name="deltams">Временная дельта в миллисекундах</param>
/// <returns>Попадает ли текущее время в промежуток <paramref name="timestamp" /> + <paramref name="deltams" /></returns>
public static bool ValidateNow(long timestamp, ulong deltams) =>
Validate(timestamp, DateTime.UtcNow.Ticks, deltams);
/// <summary>
/// Проверка временного интервала (в сек)
/// </summary>
/// <param name="timestamp">Временной интервал</param>
/// <param name="checkedstamp">Проверяемый временной интервал</param>
/// <param name="deltasec">Временная дельта в секундах</param>
/// <returns>Попал ли <see cref="checkedstamp" /> в промежуток</returns>
public static bool ValidateFromSec(long timestamp, long checkedstamp, ulong deltasec) =>
Validate(timestamp, checkedstamp, checked(deltasec * 1000UL));
/// <summary>
/// Проверка попадания текущего времени в заданный интервал (в сек)
/// </summary>
/// <param name="timestamp">Временной интервал</param>
/// <param name="deltasec">Временная дельта в секундах</param>
/// <returns>Попадает ли текущее время в промежуток <paramref name="timestamp" /> + <paramref name="deltasec" /></returns>
public static bool ValidateFromSecNow(long timestamp, ulong deltasec) =>
ValidateFromSec(timestamp, DateTime.UtcNow.Ticks, deltasec);
/// <summary>
/// Проверка временного интервала (в мин)
/// </summary>
/// <param name="timestamp">Временной интервал</param>
/// <param name="checkedstamp">Проверяемый временной интервал</param>
/// <param name="deltamin">Временная дельта в минутах</param>
/// <returns>
/// Попал ли <see cref="checkedstamp" /> в промежуток <paramref name="timestamp" /> + <paramref name="deltamin" />
/// </returns>
public static bool ValidateFromMin(long timestamp, long checkedstamp, ulong deltamin) =>
Validate(timestamp, checkedstamp, checked(deltamin * 60000UL));
/// <summary>
/// Проверка попадания текущего времени в заданный интервал (в мин)
/// </summary>
/// <param name="timestamp">Временной интервал</param>
/// <param name="deltamin">Временная дельта в минутах</param>
/// <returns>Попадает ли текущее время в промежуток <paramref name="timestamp" /> + <paramref name="deltamin" /></returns>
public static bool ValidateFromMinNow(long timestamp, ulong deltamin) =>
ValidateFromMin(timestamp, DateTime.UtcNow.Ticks, deltamin);
/// <summary>
/// Проверка временного интервала (в час)
/// </summary>
/// <param name="timestamp">Временной интервал</param>
/// <param name="checkedstamp">Проверяемый временной интервал</param>
/// <param name="deltahr">Временная дельта в часах</param>
/// <returns>
/// Попал ли <see cref="checkedstamp" /> в промежуток <paramref name="timestamp" /> + <paramref name="deltahr" />
/// </returns>
public static bool ValidateFromHour(long timestamp, long checkedstamp, ulong deltahr) =>
Validate(timestamp, checkedstamp, checked(deltahr * 3600000UL));
/// <summary>
/// Проверка попадания текущего времени в заданный интервал (в час)
/// </summary>
/// <param name="timestamp">Временной интервал</param>
/// <param name="deltahr">Временная дельта в часах</param>
/// <returns>Попадает ли текущее время в промежуток <paramref name="timestamp" /> + <paramref name="deltahr" /></returns>
public static bool ValidateFromHourNow(long timestamp, ulong deltahr) =>
ValidateFromHour(timestamp, DateTime.UtcNow.Ticks, deltahr);
}

View File

@ -6,39 +6,46 @@
public static class TypeConverter public static class TypeConverter
{ {
#region Конвертация числа в строку #region Конвертация числа в строку
/// <summary> /// <summary>
/// Преобразование int в string /// Преобразование int в string
/// </summary> /// </summary>
/// <param name="AInt">Число</param> /// <param name="AInt">Число</param>
/// <returns>Строка</returns> /// <returns>Строка</returns>
public static string IntToStr(int AInt) => AInt.ToString(); public static string IntToStr(int AInt) => AInt.ToString();
/// <summary> /// <summary>
/// Преобразование uint в string /// Преобразование uint в string
/// </summary> /// </summary>
/// <param name="AInt">Число</param> /// <param name="AInt">Число</param>
/// <returns>Строка</returns> /// <returns>Строка</returns>
public static string IntToStr(uint AInt) => AInt.ToString(); public static string IntToStr(uint AInt) => AInt.ToString();
/// <summary> /// <summary>
/// Преобразование long в string /// Преобразование long в string
/// </summary> /// </summary>
/// <param name="AInt">Число</param> /// <param name="AInt">Число</param>
/// <returns>Строка</returns> /// <returns>Строка</returns>
public static string IntToStr(long AInt) => AInt.ToString(); public static string IntToStr(long AInt) => AInt.ToString();
/// <summary> /// <summary>
/// Преобразование ulong в string /// Преобразование ulong в string
/// </summary> /// </summary>
/// <param name="AInt">Число</param> /// <param name="AInt">Число</param>
/// <returns>Строка</returns> /// <returns>Строка</returns>
public static string IntToStr(ulong AInt) => AInt.ToString(); public static string IntToStr(ulong AInt) => AInt.ToString();
/// <summary> /// <summary>
/// Преобразование byte в string /// Преобразование byte в string
/// </summary> /// </summary>
/// <param name="AInt">Число</param> /// <param name="AInt">Число</param>
/// <returns>Строка</returns> /// <returns>Строка</returns>
public static string IntToStr(byte AInt) => AInt.ToString(); public static string IntToStr(byte AInt) => AInt.ToString();
#endregion #endregion
#region Конвертация строки в число #region Конвертация строки в число
/// <summary> /// <summary>
/// Преобразование строки в число /// Преобразование строки в число
/// </summary> /// </summary>
@ -47,12 +54,10 @@ public static class TypeConverter
/// <returns>Число</returns> /// <returns>Число</returns>
public static int StrToInt(string AStr, int ADefault = 0) public static int StrToInt(string AStr, int ADefault = 0)
{ {
if (!int.TryParse(AStr, out int result)) if (!int.TryParse(AStr, out int result)) result = ADefault;
{
result = ADefault;
}
return result; return result;
} }
/// <summary> /// <summary>
/// Преобразование строки в число /// Преобразование строки в число
/// </summary> /// </summary>
@ -61,12 +66,10 @@ public static class TypeConverter
/// <returns>Число</returns> /// <returns>Число</returns>
public static uint StrToUInt(string AStr, uint ADefault = 0) public static uint StrToUInt(string AStr, uint ADefault = 0)
{ {
if (!uint.TryParse(AStr, out uint result)) if (!uint.TryParse(AStr, out uint result)) result = ADefault;
{
result = ADefault;
}
return result; return result;
} }
/// <summary> /// <summary>
/// Преобразование строки в число /// Преобразование строки в число
/// </summary> /// </summary>
@ -75,12 +78,10 @@ public static class TypeConverter
/// <returns>Число</returns> /// <returns>Число</returns>
public static long StrToInt64(string AStr, long ADefault = 0) public static long StrToInt64(string AStr, long ADefault = 0)
{ {
if (!long.TryParse(AStr, out long result)) if (!long.TryParse(AStr, out long result)) result = ADefault;
{
result = ADefault;
}
return result; return result;
} }
/// <summary> /// <summary>
/// Преобразование строки в число /// Преобразование строки в число
/// </summary> /// </summary>
@ -89,12 +90,10 @@ public static class TypeConverter
/// <returns>Число</returns> /// <returns>Число</returns>
public static ulong StrToUInt64(string AStr, ulong ADefault = 0) public static ulong StrToUInt64(string AStr, ulong ADefault = 0)
{ {
if (!ulong.TryParse(AStr, out ulong result)) if (!ulong.TryParse(AStr, out ulong result)) result = ADefault;
{
result = ADefault;
}
return result; return result;
} }
/// <summary> /// <summary>
/// Преобразование строки в число /// Преобразование строки в число
/// </summary> /// </summary>
@ -103,11 +102,9 @@ public static class TypeConverter
/// <returns>Число</returns> /// <returns>Число</returns>
public static byte StrToByte(string AStr, byte ADefault = 0) public static byte StrToByte(string AStr, byte ADefault = 0)
{ {
if (!byte.TryParse(AStr, out byte result)) if (!byte.TryParse(AStr, out byte result)) result = ADefault;
{
result = ADefault;
}
return result; return result;
} }
#endregion #endregion
} }