commit 30665ab0d54b193efeb6032d78cde0a7ebfa751f
parent 7a8b5e7d9358e4ce23fc70dee43163f037ec8a65
Author: Mikolaj Lenczewski <mikolaj.lenczewski308@gmail.com>
Date: Thu, 11 Jun 2020 18:45:07 +0100
Reverted buggy internalisation of SlimObjectPool
Diffstat:
2 files changed, 18 insertions(+), 282 deletions(-)
diff --git a/NetSharp/NetSharp/NetSharp.xml b/NetSharp/NetSharp/NetSharp.xml
@@ -49,24 +49,6 @@
<member name="M:NetSharp.Raw.Datagram.RawDatagramNetworkWriter.WriteAsync(System.Net.EndPoint,System.ReadOnlyMemory{System.Byte},System.Net.Sockets.SocketFlags)">
<inheritdoc />
</member>
- <member name="P:NetSharp.Raw.RawDatagramNetworkTransportProvider.TransportProtocolType">
- <inheritdoc />
- </member>
- <member name="M:NetSharp.Raw.RawDatagramNetworkTransportProvider.GetReader(System.Net.Sockets.Socket@,System.Net.EndPoint,NetSharp.Raw.Datagram.RawDatagramRequestHandler,System.Int32,System.Int32,System.UInt32)">
- <inheritdoc />
- </member>
- <member name="M:NetSharp.Raw.RawDatagramNetworkTransportProvider.GetWriter(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)">
- <inheritdoc />
- </member>
- <member name="P:NetSharp.Raw.RawStreamNetworkTransportProvider.TransportProtocolType">
- <inheritdoc />
- </member>
- <member name="M:NetSharp.Raw.RawStreamNetworkTransportProvider.GetReader(System.Net.Sockets.Socket@,System.Net.EndPoint,NetSharp.Raw.Stream.RawStreamRequestHandler,System.Int32,System.Int32,System.UInt32)">
- <inheritdoc />
- </member>
- <member name="M:NetSharp.Raw.RawStreamNetworkTransportProvider.GetWriter(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)">
- <inheritdoc />
- </member>
<member name="M:NetSharp.Raw.RawNetworkConnectionBase.Dispose(System.Boolean)">
<summary>
Allows for inheritors to dispose of their own resources.
@@ -135,193 +117,6 @@
<member name="M:NetSharp.Raw.Stream.RawStreamNetworkWriter.ResetStateObject(System.Net.Sockets.SocketAsyncEventArgs@)">
<inheritdoc />
</member>
- <member name="T:NetSharp.Utils.BiDictionary`2">
- <summary>
- Represents a concurrent two-way dictionary, that can be indexed by either a key or a value.
- </summary>
- <typeparam name="K">
- The type of key that will be stored.
- </typeparam>
- <typeparam name="V">
- The type of value that will be stored.
- </typeparam>
- </member>
- <member name="F:NetSharp.Utils.BiDictionary`2.keyToValueMap">
- <summary>
- Maps keys to their corresponding values.
- </summary>
- </member>
- <member name="F:NetSharp.Utils.BiDictionary`2.valueToKeyMap">
- <summary>
- Maps values to their corresponding keys.
- </summary>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.#ctor">
- <summary>
- Initialises a new instance of the <see cref="T:NetSharp.Utils.BiDictionary`2" /> class.
- </summary>
- </member>
- <member name="P:NetSharp.Utils.BiDictionary`2.Item(`1)">
- <summary>
- Indexes this instance with the given value.
- </summary>
- <param name="index">
- The value whose key to get or set.
- </param>
- <returns>
- The fetched key.
- </returns>
- </member>
- <member name="P:NetSharp.Utils.BiDictionary`2.Item(`0)">
- <summary>
- Indexes this instance with the given key.
- </summary>
- <param name="index">
- The key whose value to get or set.
- </param>
- <returns>
- The fetched value.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.Clear">
- <summary>
- Clears this instance's <see cref="F:NetSharp.Utils.BiDictionary`2.keyToValueMap" /> and <see cref="F:NetSharp.Utils.BiDictionary`2.valueToKeyMap" />.
- </summary>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.ContainsKey(`0@)">
- <summary>
- Whether this instance contains the given key.
- </summary>
- <param name="key">
- The key to check.
- </param>
- <returns>
- Whether the given key was found.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.ContainsValue(`1@)">
- <summary>
- Whether this instance contains the given value.
- </summary>
- <param name="value">
- The value to check.
- </param>
- <returns>
- Whether the given value was found.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.SetOrUpdateKey(`1,`0)">
- <summary>
- Attempts to set the key associated with the given value.
- </summary>
- <param name="value">
- The value whose key to set.
- </param>
- <param name="key">
- The new value for the value's associated key.
- </param>
- <returns>
- Whether the new key was correctly set.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.SetOrUpdateValue(`0,`1)">
- <summary>
- Attempts to set the value associated with the given key.
- </summary>
- <param name="key">
- The key whose value to set.
- </param>
- <param name="value">
- The new value for the key's associated value.
- </param>
- <returns>
- Whether the new value was correctly set.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.TryClearKey(`1@,`0@)">
- <summary>
- Attempts to remove the key associated with the given value.
- </summary>
- <param name="value">
- The value whose key to remove.
- </param>
- <param name="key">
- The old key value.
- </param>
- <returns>
- Whether the given value had a valid key associated with it.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.TryClearValue(`0@,`1@)">
- <summary>
- Attempts to remove the value associated with the given key.
- </summary>
- <param name="key">
- The key whose value to remove.
- </param>
- <param name="value">
- The old value.
- </param>
- <returns>
- Whether the given key had a valid valid associated with it.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.TryGetKey(`1@,`0@)">
- <summary>
- Attempts to get the key associated with the given value.
- </summary>
- <param name="value">
- The value whose key to get.
- </param>
- <param name="key">
- The returned key.
- </param>
- <returns>
- Whether the given value has a valid key associated with it.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.TryGetValue(`0@,`1@)">
- <summary>
- Attempts to get the value associated with the given key.
- </summary>
- <param name="key">
- The key whose value to get.
- </param>
- <param name="value">
- The returned value.
- </param>
- <returns>
- Whether the given key as a valid value associated with it.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.TrySetKey(`1@,`0@)">
- <summary>
- Attempts to set the key associated with the given value.
- </summary>
- <param name="value">
- The value whose key to set.
- </param>
- <param name="key">
- The key which should be set for the given value.
- </param>
- <returns>
- Whether the given value was successfully set.
- </returns>
- </member>
- <member name="M:NetSharp.Utils.BiDictionary`2.TrySetValue(`0@,`1@)">
- <summary>
- Attempts to set the value associated with the given key.
- </summary>
- <param name="key">
- The key whose value to set.
- </param>
- <param name="value">
- The value which should be set for the given key.
- </param>
- <returns>
- Whether the given key was successfully set.
- </returns>
- </member>
<member name="T:NetSharp.Utils.Conversion.EndianAwareBitConverter">
<summary>
Wraps the <see cref="T:System.BitConverter" /> class to provide conversion that is endian-aware.
@@ -492,60 +287,5 @@
The previously leased instance which should be returned.
</param>
</member>
- <member name="T:NetSharp.Utils.TransmissionResult">
- <summary>
- Represents the result of a socket transmission.
- </summary>
- </member>
- <member name="F:NetSharp.Utils.TransmissionResult.Timeout">
- <summary>
- Represents an asynchronous transmission which timed out.
- </summary>
- </member>
- <member name="F:NetSharp.Utils.TransmissionResult.Buffer">
- <summary>
- The byte buffer that was transmitted across the network.
- </summary>
- </member>
- <member name="F:NetSharp.Utils.TransmissionResult.Count">
- <summary>
- The number of bytes that were transmitted across the network.
- </summary>
- </member>
- <member name="F:NetSharp.Utils.TransmissionResult.RemoteEndPoint">
- <summary>
- The remote endpoint to which the buffer was transmitted.
- </summary>
- </member>
- <member name="M:NetSharp.Utils.TransmissionResult.#ctor(System.Net.Sockets.SocketAsyncEventArgs@)">
- <summary>
- Initialises a new instance of the <see cref="T:NetSharp.Utils.TransmissionResult" /> struct.
- </summary>
- <param name="args">
- The socket arguments associated with the transmission.
- </param>
- </member>
- <member name="M:NetSharp.Utils.TransmissionResult.#ctor(System.Byte[]@,System.Int32@,System.Net.EndPoint@)">
- <summary>
- Initialises a new instance of the <see cref="T:NetSharp.Utils.TransmissionResult" /> struct.
- </summary>
- <param name="buffer">
- The buffer associated with the transmission.
- </param>
- <param name="count">
- The number of bytes written to or read from the buffer.
- </param>
- <param name="remoteEndPoint">
- The remote end point associated with the transmission.
- </param>
- </member>
- <member name="M:NetSharp.Utils.TransmissionResult.TimedOut">
- <summary>
- Checks whether this instance represents a timed out transmission.
- </summary>
- <returns>
- Whether this instance has timed out.
- </returns>
- </member>
</members>
</doc>
diff --git a/NetSharp/NetSharp/Utils/SlimObjectPool.cs b/NetSharp/NetSharp/Utils/SlimObjectPool.cs
@@ -9,16 +9,12 @@ namespace NetSharp.Utils
/// <typeparam name="T">
/// The type of item stored in the pool.
/// </typeparam>
- internal sealed class SlimObjectPool<T> : IDisposable
+ public sealed class SlimObjectPool<T> : IDisposable
{
private readonly CanRebufferObjectPredicate canObjectBeRebufferedPredicate;
-
private readonly CreateObjectDelegate createObjectDelegate;
-
private readonly DestroyObjectDelegate destroyObjectDelegate;
-
private readonly IProducerConsumerCollection<T> objectBuffer;
-
private readonly ResetObjectDelegate resetObjectDelegate;
/// <summary>
@@ -39,7 +35,7 @@ namespace NetSharp.Utils
/// <param name="baseCollection">
/// The underlying pooled object buffer to use.
/// </param>
- internal SlimObjectPool(in CreateObjectDelegate createDelegate, in ResetObjectDelegate resetDelegate,
+ public SlimObjectPool(in CreateObjectDelegate createDelegate, in ResetObjectDelegate resetDelegate,
in DestroyObjectDelegate destroyDelegate, in CanRebufferObjectPredicate rebufferPredicate,
in IProducerConsumerCollection<T> baseCollection)
{
@@ -69,7 +65,7 @@ namespace NetSharp.Utils
/// <param name="rebufferPredicate">
/// The delegate method to use to decide whether an instance can be reused.
/// </param>
- internal SlimObjectPool(in CreateObjectDelegate createDelegate, in ResetObjectDelegate resetDelegate,
+ public SlimObjectPool(in CreateObjectDelegate createDelegate, in ResetObjectDelegate resetDelegate,
in DestroyObjectDelegate destroyDelegate, in CanRebufferObjectPredicate rebufferPredicate)
: this(in createDelegate, in resetDelegate, in destroyDelegate, in rebufferPredicate, new ConcurrentBag<T>())
{
@@ -85,7 +81,7 @@ namespace NetSharp.Utils
/// <returns>
/// Whether the given instance should be placed back into the pool.
/// </returns>
- internal delegate bool CanRebufferObjectPredicate(ref T instance);
+ public delegate bool CanRebufferObjectPredicate(ref T instance);
/// <summary>
/// Delegate method for creating fresh <typeparamref name="T" /> instances to be stored in the pool.
@@ -93,7 +89,7 @@ namespace NetSharp.Utils
/// <returns>
/// A configured <typeparamref name="T" /> instance.
/// </returns>
- internal delegate T CreateObjectDelegate();
+ public delegate T CreateObjectDelegate();
/// <summary>
/// Delegate method to destroy a used <paramref name="instance" /> which cannot be reused.
@@ -101,7 +97,7 @@ namespace NetSharp.Utils
/// <param name="instance">
/// The instance to destroy.
/// </param>
- internal delegate void DestroyObjectDelegate(T instance);
+ public delegate void DestroyObjectDelegate(T instance);
/// <summary>
/// Delegate method to reset a used <paramref name="instance" /> before placing it back into the pool.
@@ -109,7 +105,16 @@ namespace NetSharp.Utils
/// <param name="instance">
/// The instance which should be reset.
/// </param>
- internal delegate void ResetObjectDelegate(ref T instance);
+ public delegate void ResetObjectDelegate(ref T instance);
+
+ /// <inheritdoc />
+ public void Dispose()
+ {
+ foreach (T pooledObject in objectBuffer)
+ {
+ destroyObjectDelegate(pooledObject);
+ }
+ }
/// <summary>
/// Leases a new <typeparamref name="T" /> instance from the pool, and returns it.
@@ -117,7 +122,7 @@ namespace NetSharp.Utils
/// <returns>
/// The <typeparamref name="T" /> instance which was fetched from the pool.
/// </returns>
- internal T Rent()
+ public T Rent()
{
return objectBuffer.TryTake(out T result) ? result : createObjectDelegate();
}
@@ -128,7 +133,7 @@ namespace NetSharp.Utils
/// <param name="instance">
/// The previously leased instance which should be returned.
/// </param>
- internal void Return(T instance)
+ public void Return(T instance)
{
if (canObjectBeRebufferedPredicate(ref instance))
{
@@ -141,14 +146,5 @@ namespace NetSharp.Utils
destroyObjectDelegate(instance);
}
}
-
- /// <inheritdoc />
- public void Dispose()
- {
- foreach (T pooledObject in objectBuffer)
- {
- destroyObjectDelegate(pooledObject);
- }
- }
}
}
\ No newline at end of file