提交 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
{
internal partial class ArrayBuilder<T>
internal partial class ArrayBuilder<T> : IPooled
{
public static ArrayBuilderDisposer GetInstance(int capacity, out ArrayBuilder<T> instance)
{
instance = GetInstance(capacity);
return new ArrayBuilderDisposer(instance);
}
public static ArrayBuilderDisposer GetInstance(out ArrayBuilder<T> instance)
public static PooledDisposer<ArrayBuilder<T>> GetInstance(out ArrayBuilder<T> instance)
{
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);
return new ArrayBuilderDisposer(instance);
instance = GetInstance(capacity);
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;
public ArrayBuilderDisposer(ArrayBuilder<T> instance)
{
_pooledObject = instance;
}
public void Dispose()
{
var pooledObject = _pooledObject;
if (pooledObject != null)
{
pooledObject.Free();
_pooledObject = null;
}
}
instance = GetInstance(capacity, fillWithValue);
return new PooledDisposer<ArrayBuilder<T>>(instance);
}
}
}
// 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
{
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();
return new PooledHashSetDisposer(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;
}
}
return new PooledDisposer<PooledHashSet<T>>(instance);
}
}
}
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
{
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();
return new PooledStringBuilderDisposer(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;
}
}
return new PooledDisposer<PooledStringBuilder>(instance);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册