| File: System\Private\Windows\BinaryFormat\Support\StringRecordsCollection.cs | Web Access |
| Project: src\winforms\src\System.Private.Windows.Core\src\Microsoft.Private.Windows.Core.csproj (Microsoft.Private.Windows.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Private.Windows.BinaryFormat.Serializer; namespace System.Private.Windows.BinaryFormat; /// <summary> /// Helper to create and track records for <see cref="BinaryObjectString"/> and <see cref="MemberReference"/> /// when duplicates are found. /// </summary> internal class StringRecordsCollection : IReadOnlyRecordMap { private readonly Dictionary<string, int> _strings = []; private readonly Dictionary<int, MemberReference> _memberReferences = []; public int CurrentId { get; set; } public IRecord this[Id id] => _memberReferences[id]; public StringRecordsCollection(int currentId) => CurrentId = currentId; /// <summary> /// Returns the appropriate record for the given string. /// </summary> public IRecord? GetStringRecord(string? value) { if (value is null) { return null; } if (_strings.TryGetValue(value, out int id)) { // The record with the data has already been retrieved, only a reference is needed now if (_memberReferences.TryGetValue(id, out MemberReference? memberReference)) { return memberReference; } MemberReference reference = new(id); _memberReferences.Add(id, reference); return reference; } _strings[value] = CurrentId; IRecord record = new BinaryObjectString(CurrentId, value); CurrentId++; return record; } }