/
dev-npgsql
/
npgsql
Обзор
Документация
Войти
/
dev-npgsql
/
npgsql
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
test-logs
src/Npgsql/Internal/Composites/Metadata/CompositeInfo.cs
54 строки
2 KB
Nino Floris
Composite improvements (#5923)
16 ноя 2024, 15:03
Не верифицирован
16 ноя 2024, 15:03
e189bd1
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using Npgsql.Util; namespace Npgsql.Internal.Composites; sealed class CompositeInfo<T> { readonly int _lastConstructorFieldIndex; readonly CompositeFieldInfo[] _fields; public CompositeInfo(CompositeFieldInfo[] fields, int constructorParameters, Func<StrongBox[], T> constructor) { _lastConstructorFieldIndex = -1; var constructorFields = 0; for (var i = 0; i < fields.Length; i++) { if (fields[i].ConstructorParameterIndex is not null) { _lastConstructorFieldIndex = i; constructorFields++; } } if (constructorParameters != constructorFields) throw new InvalidOperationException($"Missing composite fields to map to the required {constructorParameters} constructor parameters."); _fields = fields; Constructor = constructor; ConstructorParameters = constructorParameters; } public IReadOnlyList<CompositeFieldInfo> Fields => _fields; public int ConstructorParameters { get; } public Func<StrongBox[], T> Constructor { get; } /// <summary> /// Create temporary storage for all values that come before the constructor parameters can be saturated. /// </summary> /// <returns></returns> public StrongBox[] CreateTempBoxes() { if (_lastConstructorFieldIndex is -1) return []; var boxes = new StrongBox[_lastConstructorFieldIndex + 1]; var fields = _fields; for (var i = 0; i < boxes.Length; i++) boxes[i] = fields[i].CreateBox(); return boxes; } }