From 1a47ff8094ee414a47aebd310826906d89428a09 Mon Sep 17 00:00:00 2001
From: Teravus Ovares
Date: Fri, 30 May 2008 12:27:06 +0000
Subject: * This is Melanie's XEngine script engine. I've not tested this real
well, however, it's confirmed to compile and OpenSimulator to run
successfully without this script engine active.
---
ThirdParty/SmartThreadPool/WorkItemFactory.cs | 333 ++++++++++++++++++++++++++
1 file changed, 333 insertions(+)
create mode 100644 ThirdParty/SmartThreadPool/WorkItemFactory.cs
(limited to 'ThirdParty/SmartThreadPool/WorkItemFactory.cs')
diff --git a/ThirdParty/SmartThreadPool/WorkItemFactory.cs b/ThirdParty/SmartThreadPool/WorkItemFactory.cs
new file mode 100644
index 0000000..dfcb54f
--- /dev/null
+++ b/ThirdParty/SmartThreadPool/WorkItemFactory.cs
@@ -0,0 +1,333 @@
+// Ami Bar
+// amibar@gmail.com
+
+using System;
+
+namespace Amib.Threading.Internal
+{
+ #region WorkItemFactory class
+
+ public class WorkItemFactory
+ {
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// A callback to execute
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback)
+ {
+ return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null);
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// A callback to execute
+ /// The priority of the work item
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ WorkItemPriority workItemPriority)
+ {
+ return CreateWorkItem(workItemsGroup, wigStartInfo, callback, null, workItemPriority);
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// Work item info
+ /// A callback to execute
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemInfo workItemInfo,
+ WorkItemCallback callback)
+ {
+ return CreateWorkItem(
+ workItemsGroup,
+ wigStartInfo,
+ workItemInfo,
+ callback,
+ null);
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state)
+ {
+ ValidateCallback(callback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ /// The work item priority
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ WorkItemPriority workItemPriority)
+ {
+ ValidateCallback(callback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = wigStartInfo.PostExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+ workItemInfo.WorkItemPriority = workItemPriority;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// Work item information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemInfo workItemInfo,
+ WorkItemCallback callback,
+ object state)
+ {
+ ValidateCallback(callback);
+ ValidateCallback(workItemInfo.PostExecuteWorkItemCallback);
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ new WorkItemInfo(workItemInfo),
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ ///
+ /// A delegate to call after the callback completion
+ ///
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ PostExecuteWorkItemCallback postExecuteWorkItemCallback)
+ {
+ ValidateCallback(callback);
+ ValidateCallback(postExecuteWorkItemCallback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ ///
+ /// A delegate to call after the callback completion
+ ///
+ /// The work item priority
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ PostExecuteWorkItemCallback postExecuteWorkItemCallback,
+ WorkItemPriority workItemPriority)
+ {
+ ValidateCallback(callback);
+ ValidateCallback(postExecuteWorkItemCallback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = wigStartInfo.CallToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+ workItemInfo.WorkItemPriority = workItemPriority;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ ///
+ /// A delegate to call after the callback completion
+ ///
+ /// Indicates on which cases to call to the post execute callback
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ PostExecuteWorkItemCallback postExecuteWorkItemCallback,
+ CallToPostExecute callToPostExecute)
+ {
+ ValidateCallback(callback);
+ ValidateCallback(postExecuteWorkItemCallback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = callToPostExecute;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ ///
+ /// Create a new work item
+ ///
+ /// Work item group start information
+ /// A callback to execute
+ ///
+ /// The context object of the work item. Used for passing arguments to the work item.
+ ///
+ ///
+ /// A delegate to call after the callback completion
+ ///
+ /// Indicates on which cases to call to the post execute callback
+ /// The work item priority
+ /// Returns a work item
+ public static WorkItem CreateWorkItem(
+ IWorkItemsGroup workItemsGroup,
+ WIGStartInfo wigStartInfo,
+ WorkItemCallback callback,
+ object state,
+ PostExecuteWorkItemCallback postExecuteWorkItemCallback,
+ CallToPostExecute callToPostExecute,
+ WorkItemPriority workItemPriority)
+ {
+
+ ValidateCallback(callback);
+ ValidateCallback(postExecuteWorkItemCallback);
+
+ WorkItemInfo workItemInfo = new WorkItemInfo();
+ workItemInfo.UseCallerCallContext = wigStartInfo.UseCallerCallContext;
+ workItemInfo.UseCallerHttpContext = wigStartInfo.UseCallerHttpContext;
+ workItemInfo.PostExecuteWorkItemCallback = postExecuteWorkItemCallback;
+ workItemInfo.CallToPostExecute = callToPostExecute;
+ workItemInfo.WorkItemPriority = workItemPriority;
+ workItemInfo.DisposeOfStateObjects = wigStartInfo.DisposeOfStateObjects;
+
+ WorkItem workItem = new WorkItem(
+ workItemsGroup,
+ workItemInfo,
+ callback,
+ state);
+
+ return workItem;
+ }
+
+ private static void ValidateCallback(Delegate callback)
+ {
+ if(callback.GetInvocationList().Length > 1)
+ {
+ throw new NotSupportedException("SmartThreadPool doesn't support delegates chains");
+ }
+ }
+ }
+
+ #endregion
+}
--
cgit v1.1