PCWSTR

[DebuggerDisplay("{" + nameof(DebuggerDisplay) + "}")]
public readonly unsafe struct PCWSTR : IEquatable<PCWSTR>
{
    public readonly char* Value;

    public PCWSTR(char* value) => Value = value;

    public static explicit operator char*(PCWSTR value) => value.Value;

    public static implicit operator PCWSTR(char* value) => new(value);

    public bool Equals(PCWSTR other) => Value == other.Value;

    public override bool Equals(object obj) => obj is PCWSTR other && Equals(other);

    public override int GetHashCode() => (int)Value;

    public int Length
    {
        get
        {
            var p = Value;
        
            if (p is null)
                return 0;
        
            while (*p != '\0')
                p++;
        
            return checked((int)(p - Value));
        }
    }

    public override string ToString() => Value is null ? string.Empty : new string(Value);

    public ReadOnlySpan<char> AsSpan() => Value is null ? default : new ReadOnlySpan<char>(Value, Length);

    private string DebuggerDisplay => ToString();
}

Last updated