File: PooledObjects\Extensions.cs
Web Access
Project: src\src\Razor\src\Shared\Microsoft.AspNetCore.Razor.Utilities.Shared\Microsoft.AspNetCore.Razor.Utilities.Shared.csproj (Microsoft.AspNetCore.Razor.Utilities.Shared)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Text;
using Microsoft.Extensions.ObjectPool;
 
namespace Microsoft.AspNetCore.Razor.PooledObjects;
 
internal static partial class Extensions
{
    public static PooledObject<T> GetPooledObject<T>(this ObjectPool<T> pool)
        where T : class
        => new(pool);
 
    public static PooledObject<T> GetPooledObject<T>(this ObjectPool<T> pool, out T obj)
        where T : class
    {
        var pooledObject = pool.GetPooledObject();
        obj = pooledObject.Object;
        return pooledObject;
    }
 
    public static PooledObject<ImmutableArray<T>.Builder> GetPooledObject<T>(this ObjectPool<ImmutableArray<T>.Builder> pool)
        => new(pool);
 
    public static PooledObject<ImmutableArray<T>.Builder> GetPooledObject<T>(
        this ObjectPool<ImmutableArray<T>.Builder> pool,
        out ImmutableArray<T>.Builder builder)
    {
        var pooledObject = pool.GetPooledObject();
        builder = pooledObject.Object;
        return pooledObject;
    }
 
    public static PooledObject<Dictionary<TKey, TValue>> GetPooledObject<TKey, TValue>(this ObjectPool<Dictionary<TKey, TValue>> pool)
        where TKey : notnull
        => new(pool);
 
    public static PooledObject<Dictionary<TKey, TValue>> GetPooledObject<TKey, TValue>(
        this ObjectPool<Dictionary<TKey, TValue>> pool,
        out Dictionary<TKey, TValue> map)
        where TKey : notnull
    {
        var pooledObject = pool.GetPooledObject();
        map = pooledObject.Object;
        return pooledObject;
    }
 
    public static PooledObject<HashSet<T>> GetPooledObject<T>(this ObjectPool<HashSet<T>> pool)
        => new(pool);
 
    public static PooledObject<HashSet<T>> GetPooledObject<T>(
        this ObjectPool<HashSet<T>> pool,
        out HashSet<T> set)
    {
        var pooledObject = pool.GetPooledObject();
        set = pooledObject.Object;
        return pooledObject;
    }
 
    public static PooledObject<IncrementalHash> GetPooledObject<T>(this ObjectPool<IncrementalHash> pool)
        => new(pool);
 
    public static PooledObject<IncrementalHash> GetPooledObject<T>(
        this ObjectPool<IncrementalHash> pool,
        out IncrementalHash hash)
    {
        var pooledObject = pool.GetPooledObject();
        hash = pooledObject.Object;
        return pooledObject;
    }
 
    public static PooledObject<List<T>> GetPooledObject<T>(this ObjectPool<List<T>> pool)
        => new(pool);
 
    public static PooledObject<List<T>> GetPooledObject<T>(
        this ObjectPool<List<T>> pool,
        out List<T> list)
    {
        var pooledObject = pool.GetPooledObject();
        list = pooledObject.Object;
        return pooledObject;
    }
 
    public static PooledObject<Stack<T>> GetPooledObject<T>(this ObjectPool<Stack<T>> pool)
        => new(pool);
 
    public static PooledObject<Stack<T>> GetPooledObject<T>(
        this ObjectPool<Stack<T>> pool,
        out Stack<T> stack)
    {
        var pooledObject = pool.GetPooledObject();
        stack = pooledObject.Object;
        return pooledObject;
    }
 
    public static PooledObject<Stopwatch> GetPooledObject(this ObjectPool<Stopwatch> pool)
        => new(pool);
 
    public static PooledObject<Stopwatch> GetPooledObject(
        this ObjectPool<Stopwatch> pool,
        out Stopwatch watch)
    {
        var pooledObject = pool.GetPooledObject();
        watch = pooledObject.Object;
        return pooledObject;
    }
 
    public static PooledObject<StringBuilder> GetPooledObject(this ObjectPool<StringBuilder> pool)
        => new(pool);
 
    public static PooledObject<StringBuilder> GetPooledObject(
        this ObjectPool<StringBuilder> pool,
        out StringBuilder builder)
    {
        var pooledObject = pool.GetPooledObject();
        builder = pooledObject.Object;
        return pooledObject;
    }
}