/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/OneScript.StandardLibrary/TypeDescriptions/TypeComparer.cs
65 строк
2 KB
Mr-Rm
оптимизация ОписанияТипов
17 дек 2025, 23:55
17 дек 2025, 23:55
daf1263
Код
Авторство
О чём код?
/*---------------------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v.2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ using System; using System.Collections.Generic; using OneScript.Types; using OneScript.Values; namespace OneScript.StandardLibrary.TypeDescriptions { internal class TypeComparer : IComparer<BslTypeValue> { private const string TYPE_BINARYDATA_NAME = "ДвоичныеДанные"; private static readonly Dictionary<TypeDescriptor, int> primitives = new Dictionary<TypeDescriptor, int>(); public int Compare(BslTypeValue x, BslTypeValue y) { if (x.TypeValue.Equals(y)) return 0; var primitiveX = PrimitiveIndex(x); var primitiveY = PrimitiveIndex(y); if (primitiveX != -1) { if (primitiveY != -1) return primitiveX - primitiveY; return -1; } if (primitiveY != -1) return 1; return x.TypeValue.Id.CompareTo(y.TypeValue.Id); } private static int PrimitiveIndex(BslTypeValue type) { if (StringComparer.CurrentCultureIgnoreCase.Equals(type.TypeValue.Name, TYPE_BINARYDATA_NAME)) { // Пора двоичным данным стать примитивом return 1; } if (primitives.TryGetValue(type.TypeValue, out var index)) return index; return -1; } static TypeComparer() { primitives.Add(BasicTypes.Boolean, 0); primitives.Add(BasicTypes.String, 2); primitives.Add(BasicTypes.Date, 3); primitives.Add(BasicTypes.Null, 4); primitives.Add(BasicTypes.Number, 5); primitives.Add(BasicTypes.Type, 6); } } }