NetSharp

NetSharp.git
git clone git://git.lenczewski.org/NetSharp.git
Log | Files | Refs | README | LICENSE

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:
MNetSharp/NetSharp/NetSharp.xml | 260-------------------------------------------------------------------------------
MNetSharp/NetSharp/Utils/SlimObjectPool.cs | 40++++++++++++++++++----------------------
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