// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System.Runtime.CompilerServices;
namespace Microsoft.CodeAnalysis.Collections.Internal
{
internal static unsafe class RoslynUnsafe
{
/// <summary>
/// Returns a by-ref to type <typeparamref name="T"/> that is a null reference.
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ref T NullRef<T>()
=> ref Unsafe.AsRef<T>(null);
/// <summary>
/// Returns if a given by-ref to type <typeparamref name="T"/> is a null reference.
/// </summary>
/// <remarks>
/// This check is conceptually similar to <c>(void*)(&source) == nullptr</c>.
/// </remarks>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsNullRef<T>(ref T source)
=> Unsafe.AsPointer(ref source) == null;
}
}
|