20231125
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
namespace anbs_cp.Structs;
|
||||
using anbs_cp.Classes;
|
||||
using anbs_cp.Interfaces;
|
||||
|
||||
namespace anbs_cp.Structs;
|
||||
|
||||
/// <summary>
|
||||
/// Двумерный размер
|
||||
/// </summary>
|
||||
/// <param name="width">Длина</param>
|
||||
/// <param name="height">Высота</param>
|
||||
public struct TwoDimSize (int width = 0, int height = 0)
|
||||
public struct TwoDimSize (int width = 0, int height = 0): ISerializable
|
||||
{
|
||||
#region Приватные поля
|
||||
/// <summary>
|
||||
@@ -14,7 +17,7 @@ public struct TwoDimSize (int width = 0, int height = 0)
|
||||
private int _pWidth = width;
|
||||
|
||||
/// <summary>
|
||||
/// Высота (приватное)
|
||||
/// Ширина (приватное)
|
||||
/// </summary>
|
||||
private int _pHeight = height;
|
||||
#endregion
|
||||
@@ -30,7 +33,7 @@ public struct TwoDimSize (int width = 0, int height = 0)
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Высота
|
||||
/// Ширина
|
||||
/// </summary>
|
||||
public int Height
|
||||
{
|
||||
@@ -38,4 +41,70 @@ public struct TwoDimSize (int width = 0, int height = 0)
|
||||
set => _pHeight = value < 0 ? 0 : value;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Методы
|
||||
/// <summary>
|
||||
/// Конвертация в строку
|
||||
/// </summary>
|
||||
/// <param name="delimiter">Делитель размера</param>
|
||||
/// <returns>Строка</returns>
|
||||
public readonly string ToString (char delimiter = ':') => $"{_pWidth}{delimiter}{_pHeight}";
|
||||
|
||||
/// <summary>
|
||||
/// Получение размера из строки
|
||||
/// </summary>
|
||||
/// <param name="s">Строка</param>
|
||||
/// <param name="delimiter">Разделитель размеров</param>
|
||||
/// <returns>Модель размеров</returns>
|
||||
/// <exception cref="ArgumentOutOfRangeException">Если в строке <paramref name="s"/> не содержится символа
|
||||
/// <paramref name="delimiter"/> или таких разделителей слишком много</exception>
|
||||
public static TwoDimSize Parse (string s, char delimiter = ':')
|
||||
{
|
||||
// Разделяю значения
|
||||
string[] splitSizes = s.Split(delimiter);
|
||||
|
||||
// Проверяю, что массив имеет ровно два элемента
|
||||
if (splitSizes.Length != 2)
|
||||
throw new ArgumentOutOfRangeException(delimiter.ToString(),
|
||||
$"Похоже, что в строке {s} не содержится символа {delimiter} или таких разделителей слишком много!");
|
||||
|
||||
// Пытаюсь получить длину
|
||||
if (!int.TryParse(splitSizes[0], out int width))
|
||||
width = 0;
|
||||
|
||||
// Пытаюсь получить ширину
|
||||
if (!int.TryParse(splitSizes[1], out int height))
|
||||
height = 0;
|
||||
|
||||
// Вывожу значение
|
||||
return new(width, height);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Реализация интерфейса ISerializable
|
||||
/// <summary>
|
||||
/// Сериализовать элемент в формат json
|
||||
/// </summary>
|
||||
/// <returns>Строка в формате json</returns>
|
||||
public readonly string Serialize () => Serializer.Serialize(ToString());
|
||||
|
||||
/// <summary>
|
||||
/// Восстановить элемент из формата json
|
||||
/// </summary>
|
||||
/// <param name="json">Строка в формате json</param>
|
||||
public void Deserialize (string json)
|
||||
{
|
||||
// Десериализую строку
|
||||
string deserialized = Serializer.Deserialize<string>(json) ?? "0:0";
|
||||
|
||||
// Перевожу строку в двумерный размер
|
||||
TwoDimSize result = Parse(deserialized);
|
||||
|
||||
// Присваиваю длину
|
||||
_pWidth = result.Width;
|
||||
|
||||
// Присваиваю ширину
|
||||
_pHeight = result.Height;
|
||||
}
|
||||
#endregion
|
||||
}
|
Reference in New Issue
Block a user