mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-09-14 20:03:36 +00:00
Some checks are pending
Build and Release / Determine run mode (push) Waiting to run
Build and Release / Sync Flatpak repo (push) Blocked by required conditions
Build and Release / Collect Flatpak artifacts (push) Blocked by required conditions
Build and Release / Verify (push) Waiting to run
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-apple-darwin, osx-arm64, macos-latest, aarch64-apple-darwin, dmg,app,updater, dmg) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-pc-windows-msvc.exe, win-arm64, windows-latest, aarch64-pc-windows-msvc, nsis,updater, nsis) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-unknown-linux-gnu, linux-arm64, ubuntu-22.04-arm, aarch64-unknown-linux-gnu, appimage,updater, appimage) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-apple-darwin, osx-x64, macos-latest, x86_64-apple-darwin, dmg,app,updater, dmg) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-pc-windows-msvc.exe, win-x64, windows-latest, x86_64-pc-windows-msvc, nsis,updater, nsis) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-unknown-linux-gnu, linux-x64, ubuntu-22.04, x86_64-unknown-linux-gnu, appimage,updater, appimage) (push) Blocked by required conditions
Build and Release / Prepare & create release (push) Blocked by required conditions
Build and Release / Publish release (push) Blocked by required conditions
57 lines
2.0 KiB
C#
57 lines
2.0 KiB
C#
namespace AIStudio.Models.Matching;
|
|
|
|
/// <summary>
|
|
/// Walks the parts of a normalized model name without cutting it into strings.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The index looks up every part of a name to find the rules which could possibly apply to it. That
|
|
/// happens for every model of every configured provider, so the walk itself must not allocate: the
|
|
/// parts stay slices of the name they came from. This is both the enumerable and the enumerator,
|
|
/// which is what lets foreach use it without an interface in between.
|
|
/// </remarks>
|
|
/// <param name="normalizedId">The normalized model name to walk.</param>
|
|
public ref struct ModelIdSegments(ReadOnlySpan<char> normalizedId)
|
|
{
|
|
private ReadOnlySpan<char> remaining = normalizedId;
|
|
|
|
/// <summary>
|
|
/// The part the walk currently stands on.
|
|
/// </summary>
|
|
public ReadOnlySpan<char> Current { get; private set; } = default;
|
|
|
|
/// <summary>
|
|
/// Hands foreach the walk itself.
|
|
/// </summary>
|
|
/// <returns>This walk, at its beginning.</returns>
|
|
public readonly ModelIdSegments GetEnumerator() => this;
|
|
|
|
/// <summary>
|
|
/// Steps to the next part of the name.
|
|
/// </summary>
|
|
/// <returns>True, as long as there was one.</returns>
|
|
public bool MoveNext()
|
|
{
|
|
while (!this.remaining.IsEmpty)
|
|
{
|
|
var separator = this.remaining.IndexOf(ModelId.SEGMENT_SEPARATOR);
|
|
if (separator is -1)
|
|
{
|
|
this.Current = this.remaining;
|
|
this.remaining = default;
|
|
return true;
|
|
}
|
|
|
|
this.Current = this.remaining[..separator];
|
|
this.remaining = this.remaining[(separator + 1)..];
|
|
|
|
//
|
|
// Normalizing leaves no empty part behind, so this only guards against a name which
|
|
// never went through it. Skipping is the right answer: an empty part matches nothing.
|
|
//
|
|
if (!this.Current.IsEmpty)
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
} |