提交 2981250a 编写于 作者: P Petr Houska

Add copyright + extracted common disposer.

上级 beac87db
using System; // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.CodeAnalysis.PooledObjects namespace Microsoft.CodeAnalysis.PooledObjects
{ {
internal partial class ArrayBuilder<T> internal partial class ArrayBuilder<T> : IPooled
{ {
public static ArrayBuilderDisposer GetInstance(int capacity, out ArrayBuilder<T> instance) public static PooledDisposer<ArrayBuilder<T>> GetInstance(out ArrayBuilder<T> instance)
{
instance = GetInstance(capacity);
return new ArrayBuilderDisposer(instance);
}
public static ArrayBuilderDisposer GetInstance(out ArrayBuilder<T> instance)
{ {
instance = GetInstance(); instance = GetInstance();
return new ArrayBuilderDisposer(instance); return new PooledDisposer<ArrayBuilder<T>>(instance);
} }
public static ArrayBuilderDisposer GetInstance(int capacity, T fillWithValue, out ArrayBuilder<T> instance) public static PooledDisposer<ArrayBuilder<T>> GetInstance(int capacity, out ArrayBuilder<T> instance)
{ {
instance = GetInstance(capacity, fillWithValue); instance = GetInstance(capacity);
return new ArrayBuilderDisposer(instance); return new PooledDisposer<ArrayBuilder<T>>(instance);
} }
internal struct ArrayBuilderDisposer : IDisposable public static PooledDisposer<ArrayBuilder<T>> GetInstance(int capacity, T fillWithValue, out ArrayBuilder<T> instance)
{ {
private ArrayBuilder<T> _pooledObject; instance = GetInstance(capacity, fillWithValue);
return new PooledDisposer<ArrayBuilder<T>>(instance);
public ArrayBuilderDisposer(ArrayBuilder<T> instance)
{
_pooledObject = instance;
}
public void Dispose()
{
var pooledObject = _pooledObject;
if (pooledObject != null)
{
pooledObject.Free();
_pooledObject = null;
}
}
} }
} }
} }
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.CodeAnalysis.PooledObjects
{
interface IPooled
{
void Free();
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
namespace Microsoft.CodeAnalysis.PooledObjects
{
internal struct PooledDisposer<TPoolable> : IDisposable
where TPoolable : IPooled
{
private TPoolable _pooledObject;
public PooledDisposer(TPoolable instance)
{
_pooledObject = instance;
}
public void Dispose()
{
var pooledObject = _pooledObject;
if (pooledObject != default)
{
pooledObject.Free();
_pooledObject = default;
}
}
}
}
using System; // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.CodeAnalysis.PooledObjects namespace Microsoft.CodeAnalysis.PooledObjects
{ {
internal partial class PooledHashSet<T> internal partial class PooledHashSet<T> : IPooled
{ {
public static PooledHashSetDisposer GetInstance(out PooledHashSet<T> instance) public static PooledDisposer<PooledHashSet<T>> GetInstance(out PooledHashSet<T> instance)
{ {
instance = GetInstance(); instance = GetInstance();
return new PooledHashSetDisposer(instance); return new PooledDisposer<PooledHashSet<T>>(instance);
}
internal struct PooledHashSetDisposer : IDisposable
{
private PooledHashSet<T> _pooledObject;
public PooledHashSetDisposer(PooledHashSet<T> instance)
{
_pooledObject = instance;
}
public void Dispose()
{
var pooledObject = _pooledObject;
if (pooledObject != null)
{
pooledObject.Free();
_pooledObject = null;
}
}
} }
} }
} }
using System; // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
namespace Microsoft.CodeAnalysis.PooledObjects namespace Microsoft.CodeAnalysis.PooledObjects
{ {
internal partial class PooledStringBuilder internal partial class PooledStringBuilder : IPooled
{ {
public static PooledStringBuilderDisposer GetInstance(out PooledStringBuilder instance) public static PooledDisposer<PooledStringBuilder> GetInstance(out PooledStringBuilder instance)
{ {
instance = GetInstance(); instance = GetInstance();
return new PooledStringBuilderDisposer(instance); return new PooledDisposer<PooledStringBuilder>(instance);
}
internal struct PooledStringBuilderDisposer : IDisposable
{
private PooledStringBuilder _pooledObject;
public PooledStringBuilderDisposer(PooledStringBuilder instance)
{
_pooledObject = instance;
}
public void Dispose()
{
var pooledObject = _pooledObject;
if (pooledObject != null)
{
pooledObject.Free();
_pooledObject = null;
}
}
} }
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册