| File: ParameterViewBuilder.cs | Web Access |
| Project: src\aspnetcore\src\Components\Components\src\Microsoft.AspNetCore.Components.csproj (Microsoft.AspNetCore.Components) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Components.Rendering; using Microsoft.AspNetCore.Components.RenderTree; namespace Microsoft.AspNetCore.Components; /// <summary> /// Provides a mechanism to build a <see cref="ParameterView" /> with an unbound lifetime. /// </summary> internal readonly struct ParameterViewBuilder { private const string GeneratedParameterViewElementName = "__ARTIFICIAL_PARAMETER_VIEW"; private readonly RenderTreeFrame[] _frames; /// <summary> /// Constructs an instance of <see cref="ParameterViewBuilder" />. /// </summary> /// <param name="maxCapacity">The maximum number of parameters that can be held.</param> public ParameterViewBuilder(int maxCapacity) { _frames = new RenderTreeFrame[maxCapacity + 1]; _frames[0] = RenderTreeFrame .Element(0, GeneratedParameterViewElementName) .WithElementSubtreeLength(1); } /// <summary> /// Adds a parameter. /// </summary> /// <param name="name">The name of the parameter.</param> /// <param name="value">The value of the parameter.</param> public void Add(string name, object? value) { var nextIndex = _frames[0].ElementSubtreeLengthField++; _frames[nextIndex] = RenderTreeFrame.Attribute(0, name, value); } /// <summary> /// Supplies a completed <see cref="ParameterView" />. /// </summary> /// <returns>The <see cref="ParameterView" />.</returns> public ParameterView ToParameterView() { return new ParameterView(ParameterViewLifetime.Unbound, _frames, 0); } }