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