// ----------------------------------------------------------------------------- // file="GeneratedFileSet" // Project: StgSharp // Copyright (c) Nitload. // SPDX-License-Identifier: MIT // ----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; namespace StgSharp.GenerateGL.Generation { internal sealed record GeneratedFile( string Name, string Content ); internal sealed class GeneratedFileSet { public static GeneratedFileSet Empty { get; } = new GeneratedFileSet( Array.Empty()); private readonly ReadOnlyDictionary _filesByName; public GeneratedFileSet( IEnumerable files ) { ArgumentNullException.ThrowIfNull(files); ReadOnlyCollection values = Array.AsReadOnly(files.ToArray()); Dictionary index = new Dictionary( StringComparer.OrdinalIgnoreCase); foreach (GeneratedFile file in values) { ArgumentException.ThrowIfNullOrWhiteSpace(file.Name); if (!index.TryAdd(file.Name, file)) { throw new InvalidOperationException( $"Generated file name '{file.Name}' is duplicated."); } } Files = values; _filesByName = new ReadOnlyDictionary(index); } public IReadOnlyList Files { get; } public bool TryGetFile( string name, out GeneratedFile file ) { ArgumentException.ThrowIfNullOrWhiteSpace(name); return _filesByName.TryGetValue(name, out file!); } } }