Add CyclicDeque and doc
authorJérémie Laval <jeremie.laval@gmail.com>
Tue, 11 Jan 2011 16:02:24 +0000 (16:02 +0000)
committerJérémie Laval <jeremie.laval@gmail.com>
Thu, 13 Jan 2011 15:38:43 +0000 (15:38 +0000)
mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/CyclicDeque`1.xml [new file with mode: 0644]
mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/IConcurrentDeque`1.xml [new file with mode: 0644]
mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/PopResult.xml [new file with mode: 0644]
mcs/class/Mono.Parallel/Documentation/en/Mono.Threading/ReaderWriterLockSlimmer.xml
mcs/class/Mono.Parallel/Documentation/en/index.xml
mcs/class/Mono.Parallel/Documentation/en/ns-Mono.Threading.Tasks.xml [new file with mode: 0644]
mcs/class/Mono.Parallel/Mono.Parallel.dll.sources
mcs/class/corlib/System.Threading.Tasks/CyclicDeque.cs
mcs/class/corlib/System.Threading.Tasks/SimpleConcurrentBag.cs
mcs/class/corlib/System.Threading.Tasks/ThreadWorker.cs

diff --git a/mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/CyclicDeque`1.xml b/mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/CyclicDeque`1.xml
new file mode 100644 (file)
index 0000000..226be25
--- /dev/null
@@ -0,0 +1,115 @@
+<Type Name="CyclicDeque&lt;T&gt;" FullName="Mono.Threading.Tasks.CyclicDeque&lt;T&gt;">
+  <TypeSignature Language="C#" Value="public class CyclicDeque&lt;T&gt; : Mono.Threading.Tasks.IConcurrentDeque&lt;T&gt;" />
+  <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit CyclicDeque`1&lt;T&gt; extends System.Object implements class Mono.Threading.Tasks.IConcurrentDeque`1&lt;!T&gt;" />
+  <AssemblyInfo>
+    <AssemblyName>Mono.Parallel</AssemblyName>
+    <AssemblyVersion>4.0.0.0</AssemblyVersion>
+  </AssemblyInfo>
+  <TypeParameters>
+    <TypeParameter Name="T" />
+  </TypeParameters>
+  <Base>
+    <BaseTypeName>System.Object</BaseTypeName>
+  </Base>
+  <Interfaces>
+    <Interface>
+      <InterfaceName>Mono.Threading.Tasks.IConcurrentDeque&lt;T&gt;</InterfaceName>
+    </Interface>
+  </Interfaces>
+  <Docs>
+    <typeparam name="T">To be added.</typeparam>
+    <summary>To be added.</summary>
+    <remarks>To be added.</remarks>
+  </Docs>
+  <Members>
+    <Member MemberName=".ctor">
+      <MemberSignature Language="C#" Value="public CyclicDeque ();" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+      <MemberType>Constructor</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <Parameters />
+      <Docs>
+        <summary>To be added.</summary>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="GetEnumerable">
+      <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerable&lt;T&gt; GetEnumerable ();" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class System.Collections.Generic.IEnumerable`1&lt;!T&gt; GetEnumerable() cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType>
+      </ReturnValue>
+      <Parameters />
+      <Docs>
+        <summary>To be added.</summary>
+        <returns>To be added.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="PopBottom">
+      <MemberSignature Language="C#" Value="public Mono.Threading.Tasks.PopResult PopBottom (out T obj);" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Mono.Threading.Tasks.PopResult PopBottom(!T obj) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="obj" Type="T&amp;" RefType="out" />
+      </Parameters>
+      <Docs>
+        <param name="obj">To be added.</param>
+        <summary>To be added.</summary>
+        <returns>To be added.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="PopTop">
+      <MemberSignature Language="C#" Value="public Mono.Threading.Tasks.PopResult PopTop (out T obj);" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Mono.Threading.Tasks.PopResult PopTop(!T obj) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="obj" Type="T&amp;" RefType="out" />
+      </Parameters>
+      <Docs>
+        <param name="obj">To be added.</param>
+        <summary>To be added.</summary>
+        <returns>To be added.</returns>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="PushBottom">
+      <MemberSignature Language="C#" Value="public void PushBottom (T obj);" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void PushBottom(!T obj) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>System.Void</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="obj" Type="T" />
+      </Parameters>
+      <Docs>
+        <param name="obj">To be added.</param>
+        <summary>To be added.</summary>
+        <remarks>To be added.</remarks>
+      </Docs>
+    </Member>
+  </Members>
+</Type>
diff --git a/mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/IConcurrentDeque`1.xml b/mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/IConcurrentDeque`1.xml
new file mode 100644 (file)
index 0000000..b6da586
--- /dev/null
@@ -0,0 +1,95 @@
+<Type Name="IConcurrentDeque&lt;T&gt;" FullName="Mono.Threading.Tasks.IConcurrentDeque&lt;T&gt;">
+  <TypeSignature Language="C#" Value="public interface IConcurrentDeque&lt;T&gt;" />
+  <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract IConcurrentDeque`1&lt;T&gt;" />
+  <AssemblyInfo>
+    <AssemblyName>Mono.Parallel</AssemblyName>
+    <AssemblyVersion>4.0.0.0</AssemblyVersion>
+  </AssemblyInfo>
+  <TypeParameters>
+    <TypeParameter Name="T" />
+  </TypeParameters>
+  <Interfaces />
+  <Docs>
+    <typeparam name="T">To be added.</typeparam>
+    <summary>Define a common interface for ABP-type deque data structure used in work-stealing algorithm.</summary>
+    <remarks>To be added.</remarks>
+  </Docs>
+  <Members>
+    <Member MemberName="GetEnumerable">
+      <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerable&lt;T&gt; GetEnumerable ();" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class System.Collections.Generic.IEnumerable`1&lt;!T&gt; GetEnumerable() cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType>
+      </ReturnValue>
+      <Parameters />
+      <Docs>
+        <summary>Returns an <see cref="T:System.Collections.Generic.IEnumerable&lt;T&gt;" /> equivalent of the deque to allow enumeration. </summary>
+        <returns>An <see cref="T:System.Collections.Generic.IEnumerable&lt;T&gt;" /> representation of the elements in the deque (can be the object itself). </returns>
+        <remarks>Implementation can return <see langword="null" /> if the operation is not supported.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="PopBottom">
+      <MemberSignature Language="C#" Value="public Mono.Threading.Tasks.PopResult PopBottom (out T obj);" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Mono.Threading.Tasks.PopResult PopBottom(!T obj) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="obj" Type="T&amp;" RefType="out" />
+      </Parameters>
+      <Docs>
+        <param name="obj">To be added.</param>
+        <summary>Retrieve an element from one end of the deque.</summary>
+        <returns>The result of the operation.</returns>
+        <remarks>The implementation of this method is NOT supposed to be thread-safe.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="PopTop">
+      <MemberSignature Language="C#" Value="public Mono.Threading.Tasks.PopResult PopTop (out T obj);" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance valuetype Mono.Threading.Tasks.PopResult PopTop(!T obj) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="obj" Type="T&amp;" RefType="out" />
+      </Parameters>
+      <Docs>
+        <param name="obj">The eventually retrieved object.</param>
+        <summary>Retrieve an element from the other end of the deque.</summary>
+        <returns>Result of the operation.</returns>
+        <remarks>The implementation of this method is supposed thread-safe.</remarks>
+      </Docs>
+    </Member>
+    <Member MemberName="PushBottom">
+      <MemberSignature Language="C#" Value="public void PushBottom (T obj);" />
+      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void PushBottom(!T obj) cil managed" />
+      <MemberType>Method</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>System.Void</ReturnType>
+      </ReturnValue>
+      <Parameters>
+        <Parameter Name="obj" Type="T" />
+      </Parameters>
+      <Docs>
+        <param name="obj">To be added.</param>
+        <summary>Push an element at one end of the deque.</summary>
+        <remarks>The implementation of this method is NOT supposed to be thread-safe.</remarks>
+      </Docs>
+    </Member>
+  </Members>
+</Type>
diff --git a/mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/PopResult.xml b/mcs/class/Mono.Parallel/Documentation/en/Mono.Threading.Tasks/PopResult.xml
new file mode 100644 (file)
index 0000000..3c67032
--- /dev/null
@@ -0,0 +1,59 @@
+<Type Name="PopResult" FullName="Mono.Threading.Tasks.PopResult">
+  <TypeSignature Language="C#" Value="public enum PopResult" />
+  <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed PopResult extends System.Enum" />
+  <AssemblyInfo>
+    <AssemblyName>Mono.Parallel</AssemblyName>
+    <AssemblyVersion>4.0.0.0</AssemblyVersion>
+  </AssemblyInfo>
+  <Base>
+    <BaseTypeName>System.Enum</BaseTypeName>
+  </Base>
+  <Docs>
+    <summary>To be added.</summary>
+    <remarks>To be added.</remarks>
+  </Docs>
+  <Members>
+    <Member MemberName="Abort">
+      <MemberSignature Language="C#" Value="Abort" />
+      <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.Threading.Tasks.PopResult Abort = int32(2)" />
+      <MemberType>Field</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+      </ReturnValue>
+      <Docs>
+        <summary>To be added.</summary>
+      </Docs>
+    </Member>
+    <Member MemberName="Empty">
+      <MemberSignature Language="C#" Value="Empty" />
+      <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.Threading.Tasks.PopResult Empty = int32(1)" />
+      <MemberType>Field</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+      </ReturnValue>
+      <Docs>
+        <summary>To be added.</summary>
+      </Docs>
+    </Member>
+    <Member MemberName="Succeed">
+      <MemberSignature Language="C#" Value="Succeed" />
+      <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.Threading.Tasks.PopResult Succeed = int32(0)" />
+      <MemberType>Field</MemberType>
+      <AssemblyInfo>
+        <AssemblyVersion>4.0.0.0</AssemblyVersion>
+      </AssemblyInfo>
+      <ReturnValue>
+        <ReturnType>Mono.Threading.Tasks.PopResult</ReturnType>
+      </ReturnValue>
+      <Docs>
+        <summary>To be added.</summary>
+      </Docs>
+    </Member>
+  </Members>
+</Type>
index 996dbdf7ad16a32c57c64b4c92dbdfd561d9bb45..46ca0278ed04fa32fe7c458f81d34af50f87b6db 100644 (file)
         <Parameter Name="taken" Type="System.Boolean&amp;" RefType="ref" />
       </Parameters>
       <Docs>
-        <param name="taken"><para>
+        <param name="taken">
+          <para>
 Must be set to false prior calling this method.
 </para>
-
-<para>
+          <para>
 If value is <see langword="true" /> lock has been taken. This value is safe to trust even under exceptional situations.
-</para></param>
+</para>
+        </param>
         <summary>Attempts to get the lock in Read mode and loops if it's not yet available.</summary>
         <remarks>To be added.</remarks>
       </Docs>
@@ -53,13 +54,14 @@ If value is <see langword="true" /> lock has been taken. This value is safe to t
         <Parameter Name="taken" Type="System.Boolean&amp;" RefType="ref" />
       </Parameters>
       <Docs>
-        <param name="taken"><para>
+        <param name="taken">
+          <para>
 Must be set to false prior calling this method.
 </para>
-
-<para>
+          <para>
 If value is <see langword="true" /> lock has been taken. This value is safe to trust even under exceptional situations.
-</para></param>
+</para>
+        </param>
         <summary>Attempts to get the lock in Write mode and loops if it's not yet available.</summary>
         <remarks>To be added.</remarks>
       </Docs>
@@ -110,13 +112,14 @@ If value is <see langword="true" /> lock has been taken. This value is safe to t
         <Parameter Name="taken" Type="System.Boolean&amp;" RefType="ref" />
       </Parameters>
       <Docs>
-        <param name="taken"><para>
+        <param name="taken">
+          <para>
 Must be set to false prior calling this method.
 </para>
-
-<para>
+          <para>
 If value is <see langword="true" /> lock has been taken. This value is safe to trust even under exceptional situations.
-</para></param>
+</para>
+        </param>
         <summary>Non-blocking equivalent of <see cref="m:Mono.Threading.EnterReadLock(System.Boolean@)" />.</summary>
         <remarks>To be added.</remarks>
       </Docs>
@@ -135,13 +138,14 @@ If value is <see langword="true" /> lock has been taken. This value is safe to t
         <Parameter Name="taken" Type="System.Boolean&amp;" RefType="ref" />
       </Parameters>
       <Docs>
-        <param name="taken"><para>
+        <param name="taken">
+          <para>
 Must be set to false prior calling this method.
 </para>
-
-<para>
+          <para>
 If value is <see langword="true" /> lock has been taken. This value is safe to trust even under exceptional situations.
-</para></param>
+</para>
+        </param>
         <summary>Non-blocking equivalent of <see cref="m:Mono.Threading.EnterWriteLock(System.Boolean@)" />.</summary>
         <remarks>To be added.</remarks>
       </Docs>
index 86e4eb2e2ede4be8d64b6a5c716edb39d3e5f88f..6739a805613cd76aea79f0b047bf833dedb05a3d 100644 (file)
       <Type Name="Snzi" Kind="Class" />
       <Type Name="SpinLockWrapper" Kind="Class" />
     </Namespace>
+    <Namespace Name="Mono.Threading.Tasks">
+      <Type Name="CyclicDeque`1" DisplayName="CyclicDeque&lt;T&gt;" Kind="Class" />
+      <Type Name="IConcurrentDeque`1" DisplayName="IConcurrentDeque&lt;T&gt;" Kind="Interface" />
+      <Type Name="PopResult" Kind="Enumeration" />
+    </Namespace>
   </Types>
   <Title>Mono.Parallel</Title>
 </Overview>
diff --git a/mcs/class/Mono.Parallel/Documentation/en/ns-Mono.Threading.Tasks.xml b/mcs/class/Mono.Parallel/Documentation/en/ns-Mono.Threading.Tasks.xml
new file mode 100644 (file)
index 0000000..58eb9c7
--- /dev/null
@@ -0,0 +1,6 @@
+<Namespace Name="Mono.Threading.Tasks">
+  <Docs>
+    <summary>To be added.</summary>
+    <remarks>To be added.</remarks>
+  </Docs>
+</Namespace>
index 34bc26df5f5be42da8d17df56515d32f01c68bd8..691336cf4e82c625118b6fd5dc6ca895291dfd00 100644 (file)
@@ -8,3 +8,4 @@ Mono.Threading/SpinLockWrapper.cs
 Mono.Threading/ReaderWriterLockSlimmer.cs
 ../corlib/System.Threading/AtomicBoolean.cs
 ../corlib/System.Collections.Concurrent/ConcurrentOrderedList.cs
+../corlib/System.Threading.Tasks/CyclicDeque.cs
index bd21edce641f8de108425b51a76afecfdeb912d4..7b2d75c05754abba6982899f155dad3e3de56b9f 100644 (file)
@@ -30,22 +30,36 @@ using System;
 using System.Collections.Generic;
 using System.Threading;
 
+#if INSIDE_MONO_PARALLEL
+namespace Mono.Threading.Tasks
+#else
 namespace System.Threading.Tasks
+#endif
 {
-       internal enum PopResult {
+#if INSIDE_MONO_PARALLEL
+       public
+#endif
+       enum PopResult  {
                Succeed,
                Empty,
                Abort
        }
 
-       internal interface IDequeOperations<T>
+#if INSIDE_MONO_PARALLEL
+       public
+#endif
+       interface IConcurrentDeque<T>
        {
                void PushBottom (T obj);
                PopResult PopBottom (out T obj);
                PopResult PopTop (out T obj);
+               IEnumerable<T> GetEnumerable ();
        }
 
-       internal class CyclicDeque<T> : IDequeOperations<T>
+#if INSIDE_MONO_PARALLEL
+       public
+#endif
+       class CyclicDeque<T> : IConcurrentDeque<T>
        {
                const int BaseSize = 11;
                
index 8309580b6434ac5abec5140323315f241e6c3ad3..c8a7b3319a5f7c7d1732e42ff842985ff5f616a3 100644 (file)
@@ -33,7 +33,7 @@ namespace System.Threading.Tasks
 
        internal class SimpleConcurrentBag<T>
        {
-               readonly IDequeOperations<T>[] deques;
+               readonly IConcurrentDeque<T>[] deques;
                readonly bool unique;
                int index = -1;
                
index e0f8a16d269fd5d84030bdd6792e5bcfa27bd622..286560e50d883e68599f63cb6ce7067c13cd844a 100644 (file)
@@ -40,7 +40,7 @@ namespace System.Threading.Tasks
                [ThreadStatic]
                static ThreadWorker autoReference;
                
-               readonly IDequeOperations<Task> dDeque;
+               readonly IConcurrentDeque<Task> dDeque;
                readonly ThreadWorker[]         others;
                readonly ManualResetEvent       waitHandle;
                readonly IProducerConsumerCollection<Task> sharedWorkQueue;