File: System\Private\Windows\Core\Count.cs
Web Access
Project: src\src\System.Private.Windows.Core\src\System.Private.Windows.Core.csproj (System.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.
 
namespace System.Private.Windows.Core;
 
/// <summary>
///  Positive <see langword="int"/> enforcing count of items.
/// </summary>
/// <devdoc>
///  Idea here is that doing this makes it less likely we'll slip through cases where
///  we don't check for negative numbers. And also not confuse counts with ids.
/// </devdoc>
internal readonly struct Count : IEquatable<Count>
{
    private readonly int _count;
 
    private Count(int count)
    {
        ArgumentOutOfRangeException.ThrowIfNegative(count);
        _count = count;
    }
 
    public static Count Zero { get; } = 0;
    public static Count One { get; } = 1;
 
    public static implicit operator int(Count value) => value._count;
    public static implicit operator Count(int value) => new(value);
 
    public override bool Equals([NotNullWhen(true)] object? obj)
        => (obj is Count count && Equals(count)) || (obj is int value && value == _count);
 
    public bool Equals(Count other) => _count == other._count;
 
    public override readonly int GetHashCode() => _count.GetHashCode();
    public override readonly string ToString() => _count.ToString();
 
    public static bool operator ==(Count left, Count right) => left._count == right._count;
    public static bool operator !=(Count left, Count right) => !(left == right);
}