diff --git a/anbs_cp/CountFormatter.cs b/anbs_cp/CountFormatter.cs
index 569e748..b152fd8 100644
--- a/anbs_cp/CountFormatter.cs
+++ b/anbs_cp/CountFormatter.cs
@@ -1,33 +1,48 @@
namespace anbs_cp;
///
-/// Форматирует число элементов в понятную строку
+/// Форматирует число элементов в понятную строку
///
-public class CountFormatter: IValueFormatter
+public sealed class CountFormatter : IValueFormatter
{
#region Cвойства класса
+
///
- /// Имена чисел (тысяч, миллионов, миллиардов и т.п.)
+ /// Имена чисел (тысяч, миллионов, миллиардов и т.п.)
///
- public string[] CountNames { get; set; } = { "", "тыс.", "млн.", "млрд." };
+ public string[] CountNames { get; set; } = {"", "тыс.", "млн.", "млрд."};
+
///
- /// Знаков после запятой
+ /// Знаков после запятой
///
public byte DecimalPlaces { get; set; } = 1;
+
///
- /// Делители чисел
+ /// Делители чисел
///
- public long[] Delimeters { get; set; } = { 1000, 1000000, 1000000000 };
+ public long[] Delimeters { get; set; } = {1000, 1000000, 1000000000};
+
#endregion
#region Реализация интерфейса
+
///
- /// Реализация интерфейса
+ /// Реализация интерфейса
///
- public string[] ValueNames { get => CountNames; set => CountNames = value; }
+ public string[] ValueNames
+ {
+ get => CountNames;
+ set => CountNames = value;
+ }
+
///
- /// Реализация интерфейса
+ /// Реализация интерфейса
///
- public long[] MaxSizes { get => Delimeters; set => Delimeters = value; }
+ public long[] MaxSizes
+ {
+ get => Delimeters;
+ set => Delimeters = value;
+ }
+
#endregion
}
\ No newline at end of file
diff --git a/anbs_cp/FileSizeFormatter.cs b/anbs_cp/FileSizeFormatter.cs
index d7bc608..b2f5efd 100644
--- a/anbs_cp/FileSizeFormatter.cs
+++ b/anbs_cp/FileSizeFormatter.cs
@@ -1,48 +1,61 @@
namespace anbs_cp;
///
-/// Форматирует размер файла/папки в понятную строку
+/// Форматирует размер файла/папки в понятную строку
///
-public class FileSizeFormatter: IValueFormatter
+public class FileSizeFormatter : IValueFormatter
{
#region Cвойства класса
+
///
- /// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт)
+ /// Имена размеров (байт, килобайт, мегабайт, гигабайт и террабайт)
///
- public string[] SizeNames { get; set; } = { "Байт", "Кб", "Мб", "Гб", "Тб" };
+ public string[] SizeNames { get; set; } = {"Байт", "Кб", "Мб", "Гб", "Тб"};
+
///
- /// Знаков после запятой
+ /// Знаков после запятой
///
public byte DecimalPlaces { get; set; } = 2;
+
///
- /// Максимально байт (далее идут Кбайты)
+ /// Максимально байт (далее идут Кбайты)
///
public long ByteMax { get; set; } = 1024;
+
///
- /// Максимально Кбайт (далее идут Мбайты)
+ /// Максимально Кбайт (далее идут Мбайты)
///
public long KByteMax { get; set; } = 1048576;
+
///
- /// Максимально Мбайт (далее идут Гбайты)
+ /// Максимально Мбайт (далее идут Гбайты)
///
public long MByteMax { get; set; } = 1073741824;
+
///
- /// Максимально Гбайт (далее идут Тбайты)
+ /// Максимально Гбайт (далее идут Тбайты)
///
public long GByteMax { get; set; } = 1099511627776;
+
#endregion
#region Реализация интерфейса
+
///
- /// Реализация интерфейса
+ /// Реализация интерфейса
///
- public string[] ValueNames { get => SizeNames; set => SizeNames = value; }
+ public string[] ValueNames
+ {
+ get => SizeNames;
+ set => SizeNames = value;
+ }
+
///
- /// Реализация интерфейса
+ /// Реализация интерфейса
///
public long[] MaxSizes
{
- get => new long[] { ByteMax, KByteMax, MByteMax, GByteMax };
+ get => new[] {ByteMax, KByteMax, MByteMax, GByteMax};
set
{
ByteMax = value[0];
@@ -51,5 +64,6 @@ public class FileSizeFormatter: IValueFormatter
GByteMax = value[3];
}
}
+
#endregion
}
\ No newline at end of file
diff --git a/anbs_cp/IValueFormatter.cs b/anbs_cp/IValueFormatter.cs
index ec2cd98..a58a225 100644
--- a/anbs_cp/IValueFormatter.cs
+++ b/anbs_cp/IValueFormatter.cs
@@ -1,33 +1,37 @@
namespace anbs_cp;
///
-/// Форматирует размерности в понятную строку
+/// Форматирует размерности в понятную строку
///
public interface IValueFormatter
{
-
#region Определения интерфейса
+
///
- /// Имена размерностей
+ /// Имена размерностей
///
public string[] ValueNames { get; set; }
+
///
- /// Знаков после запятой
+ /// Знаков после запятой
///
public byte DecimalPlaces { get; set; }
+
///
- /// Максимальные размеры (массив ulong[4])
+ /// Максимальные размеры (массив ulong[4])
///
public long[] MaxSizes { get; set; }
+
#endregion
#region Методы интерфейса
+
///
- /// Форматирование размерности
+ /// Форматирование размерности
///
/// Размерность, требующая форматирования
/// Форматированная размерность (например, 20 Мб)
- public string Format (long value)
+ public string Format(long value)
{
//Левая граница
long leftnum;
@@ -40,36 +44,31 @@ public interface IValueFormatter
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 value.ToString();
}
+
///
- /// Деление числа на число с DecimalPlaces знаками после запятой
+ /// Деление числа на число с DecimalPlaces знаками после запятой
///
/// Делимое число
/// Число-делитель
/// Частное (с DecimalPlaces знаками после запятой)
- private string FormatValue (long dividend, long divider)
+ private string FormatValue(long dividend, long divider)
{
- if (divider == 0)
- {
- return $"{dividend}";
- }
+ if (divider == 0) return $"{dividend}";
long delim = 1;
- for (int i = 0; i <= DecimalPlaces; i++)
- {
- delim *= 10;
- }
+ for (int i = 0; i <= DecimalPlaces; i++) delim *= 10;
- decimal value = Math.Round((decimal)(dividend * delim / divider)) / delim;
+ decimal value = Math.Round((decimal) (dividend * delim / divider)) / delim;
return $"{value}";
}
+
#endregion
}
\ No newline at end of file
diff --git a/anbs_cp/LikeDelphi.cs b/anbs_cp/LikeDelphi.cs
index 59d694b..962b8fc 100644
--- a/anbs_cp/LikeDelphi.cs
+++ b/anbs_cp/LikeDelphi.cs
@@ -1,32 +1,30 @@
namespace anbs_cp;
///
-/// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.
+/// Класс, добавляющий реализацию некоторых методов Delphi, которые упрощают работу в C#.
///
public static class LikeDelphi
{
///
- /// Аналог функции IncludeTrailingBackslash
+ /// Аналог функции IncludeTrailingBackslash
///
/// Путь, к которому нужно добавить slash
/// Путь со slash в конце
- public static string IncludeTrailingBackslash (string path)
+ public static string IncludeTrailingBackslash(string path)
{
string result = path;
int Index = path.Length - 1;
- if (path[Index] != '\\')
- {
- result = $"{path}\\";
- }
+ if (path[Index] != '\\') result = $"{path}\\";
return result;
}
+
///
- /// Парсер строки в множество строк
+ /// Парсер строки в множество строк
///
/// Строка, которую нужно разбить
/// Символ-делитель строки
/// Массив строк
- public static List ParseString (string astring, char delim)
+ public static List ParseString(string astring, char delim)
{
int from = -1;
int to;
@@ -41,6 +39,7 @@ public static class LikeDelphi
result.Add(astring[from..(to - from)]);
from = to;
} while (to != astring.Length);
+
return result;
}
}
\ No newline at end of file
diff --git a/anbs_cp/TimestampValidator.cs b/anbs_cp/TimestampValidator.cs
new file mode 100644
index 0000000..ebe29bd
--- /dev/null
+++ b/anbs_cp/TimestampValidator.cs
@@ -0,0 +1,90 @@
+namespace anbs_cp;
+
+///
+/// Класс проверки временного интервала
+///
+public static class TimestampValidator
+{
+ ///
+ /// Проверка попадания в заданный интервал (в мс)
+ ///
+ /// Временной интервал
+ /// Проверяемый временной интервал
+ /// Временная дельта в миллисекундах
+ ///
+ /// Попал ли в промежуток +
+ ///
+ ///
+ public static bool Validate(long timestamp, long checkedstamp, ulong deltams) =>
+ new TimeSpan(timestamp) + TimeSpan.FromMilliseconds(deltams) > new TimeSpan(checkedstamp);
+
+ ///
+ /// Проверка попадания текущего времени в заданный интервал (в мс)
+ ///
+ /// Временной интервал
+ /// Временная дельта в миллисекундах
+ /// Попадает ли текущее время в промежуток +
+ public static bool ValidateNow(long timestamp, ulong deltams) =>
+ Validate(timestamp, DateTime.UtcNow.Ticks, deltams);
+
+ ///
+ /// Проверка временного интервала (в сек)
+ ///
+ /// Временной интервал
+ /// Проверяемый временной интервал
+ /// Временная дельта в секундах
+ /// Попал ли в промежуток
+ public static bool ValidateFromSec(long timestamp, long checkedstamp, ulong deltasec) =>
+ Validate(timestamp, checkedstamp, checked(deltasec * 1000UL));
+
+ ///
+ /// Проверка попадания текущего времени в заданный интервал (в сек)
+ ///
+ /// Временной интервал
+ /// Временная дельта в секундах
+ /// Попадает ли текущее время в промежуток +
+ public static bool ValidateFromSecNow(long timestamp, ulong deltasec) =>
+ ValidateFromSec(timestamp, DateTime.UtcNow.Ticks, deltasec);
+
+ ///
+ /// Проверка временного интервала (в мин)
+ ///
+ /// Временной интервал
+ /// Проверяемый временной интервал
+ /// Временная дельта в минутах
+ ///
+ /// Попал ли в промежуток +
+ ///
+ public static bool ValidateFromMin(long timestamp, long checkedstamp, ulong deltamin) =>
+ Validate(timestamp, checkedstamp, checked(deltamin * 60000UL));
+
+ ///
+ /// Проверка попадания текущего времени в заданный интервал (в мин)
+ ///
+ /// Временной интервал
+ /// Временная дельта в минутах
+ /// Попадает ли текущее время в промежуток +
+ public static bool ValidateFromMinNow(long timestamp, ulong deltamin) =>
+ ValidateFromMin(timestamp, DateTime.UtcNow.Ticks, deltamin);
+
+ ///
+ /// Проверка временного интервала (в час)
+ ///
+ /// Временной интервал
+ /// Проверяемый временной интервал
+ /// Временная дельта в часах
+ ///
+ /// Попал ли в промежуток +
+ ///
+ public static bool ValidateFromHour(long timestamp, long checkedstamp, ulong deltahr) =>
+ Validate(timestamp, checkedstamp, checked(deltahr * 3600000UL));
+
+ ///
+ /// Проверка попадания текущего времени в заданный интервал (в час)
+ ///
+ /// Временной интервал
+ /// Временная дельта в часах
+ /// Попадает ли текущее время в промежуток +
+ public static bool ValidateFromHourNow(long timestamp, ulong deltahr) =>
+ ValidateFromHour(timestamp, DateTime.UtcNow.Ticks, deltahr);
+}
\ No newline at end of file
diff --git a/anbs_cp/TypeConverter.cs b/anbs_cp/TypeConverter.cs
index 5542364..c1205eb 100644
--- a/anbs_cp/TypeConverter.cs
+++ b/anbs_cp/TypeConverter.cs
@@ -1,113 +1,110 @@
namespace anbs_cp;
///
-/// Конвертер типов на манер Delphi
+/// Конвертер типов на манер Delphi
///
public static class TypeConverter
{
#region Конвертация числа в строку
+
///
- /// Преобразование int в string
+ /// Преобразование int в string
///
/// Число
/// Строка
- public static string IntToStr (int AInt) => AInt.ToString();
+ public static string IntToStr(int AInt) => AInt.ToString();
+
///
- /// Преобразование uint в string
+ /// Преобразование uint в string
///
/// Число
/// Строка
- public static string IntToStr (uint AInt) => AInt.ToString();
+ public static string IntToStr(uint AInt) => AInt.ToString();
+
///
- /// Преобразование long в string
+ /// Преобразование long в string
///
/// Число
/// Строка
- public static string IntToStr (long AInt) => AInt.ToString();
+ public static string IntToStr(long AInt) => AInt.ToString();
+
///
- /// Преобразование ulong в string
+ /// Преобразование ulong в string
///
/// Число
/// Строка
- public static string IntToStr (ulong AInt) => AInt.ToString();
+ public static string IntToStr(ulong AInt) => AInt.ToString();
+
///
- /// Преобразование byte в string
+ /// Преобразование byte в string
///
/// Число
/// Строка
- public static string IntToStr (byte AInt) => AInt.ToString();
+ public static string IntToStr(byte AInt) => AInt.ToString();
+
#endregion
#region Конвертация строки в число
+
///
- /// Преобразование строки в число
+ /// Преобразование строки в число
///
/// Строка
/// Значение по умолчанию (по умолчанию, 0)
/// Число
- 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))
- {
- result = ADefault;
- }
+ if (!int.TryParse(AStr, out int result)) result = ADefault;
return result;
}
+
///
- /// Преобразование строки в число
+ /// Преобразование строки в число
///
/// Строка
/// Значение по умолчанию (по умолчанию, 0)
/// Число
- 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))
- {
- result = ADefault;
- }
+ if (!uint.TryParse(AStr, out uint result)) result = ADefault;
return result;
}
+
///
- /// Преобразование строки в число
+ /// Преобразование строки в число
///
/// Строка
/// Значение по умолчанию (по умолчанию, 0)
/// Число
- 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))
- {
- result = ADefault;
- }
+ if (!long.TryParse(AStr, out long result)) result = ADefault;
return result;
}
+
///
- /// Преобразование строки в число
+ /// Преобразование строки в число
///
/// Строка
/// Значение по умолчанию (по умолчанию, 0)
/// Число
- 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))
- {
- result = ADefault;
- }
+ if (!ulong.TryParse(AStr, out ulong result)) result = ADefault;
return result;
}
+
///
- /// Преобразование строки в число
+ /// Преобразование строки в число
///
/// Строка
/// Значение по умолчанию (по умолчанию, 0)
/// Число
- 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))
- {
- result = ADefault;
- }
+ if (!byte.TryParse(AStr, out byte result)) result = ADefault;
return result;
}
+
#endregion
}
\ No newline at end of file