PWSTR
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace Windows.Win32.Foundation
{
[DebuggerDisplay("{Value}")]
[GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
internal readonly struct PWSTR : IEquatable<PWSTR>
{
internal unsafe readonly char* Value;
internal unsafe int StringListLength {
get {
char* ptr = Value;
if (ptr == null)
return 0;
for (; *ptr != 0 || ptr[1] != 0; ptr++) {
}
return checked((int)(ptr - Value));
}
}
public unsafe bool IsNull => Value == null;
internal unsafe int Length => new PCWSTR(Value).Length;
private string DebuggerDisplay => ToString();
[NullableContext(2)]
public unsafe string ToStringAndCoTaskMemFree()
{
if (Value == null)
return null;
string result = new string(Value);
Marshal.FreeCoTaskMem((IntPtr)Value);
return result;
}
internal unsafe PWSTR(char* value)
{
Value = value;
}
internal unsafe PWSTR(IntPtr value)
{
this = new PWSTR((char*)(long)value);
}
public unsafe static implicit operator char*(PWSTR value)
{
return value.Value;
}
public unsafe static implicit operator PWSTR(char* value)
{
return new PWSTR(value);
}
public unsafe static bool operator ==(PWSTR left, PWSTR right)
{
return left.Value == right.Value;
}
public static bool operator !=(PWSTR left, PWSTR right)
{
return !(left == right);
}
public unsafe bool Equals(PWSTR other)
{
return Value == other.Value;
}
public override bool Equals(object obj)
{
if (obj is PWSTR) {
PWSTR other = (PWSTR)obj;
return Equals(other);
}
return false;
}
public unsafe override int GetHashCode()
{
return (int)Value;
}
public unsafe override string ToString()
{
return new PCWSTR(Value).ToString();
}
public unsafe static implicit operator PCWSTR(PWSTR value)
{
return new PCWSTR(value.Value);
}
internal unsafe Span<char> AsSpan()
{
if (Value != null)
return new Span<char>(Value, Length);
return default(Span<char>);
}
}
}