<Type Name="FiberScheduler" FullName="SpicyPixel.Threading.FiberScheduler">
  <TypeSignature Language="C#" Value="public abstract class FiberScheduler : IDisposable" />
  <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract beforefieldinit FiberScheduler extends System.Object implements class System.IDisposable" />
  <AssemblyInfo>
    <AssemblyName>SpicyPixel.Threading</AssemblyName>
    <AssemblyVersion>1.0.5.34676</AssemblyVersion>
  </AssemblyInfo>
  <Base>
    <BaseTypeName>System.Object</BaseTypeName>
  </Base>
  <Interfaces>
    <Interface>
      <InterfaceName>System.IDisposable</InterfaceName>
    </Interface>
  </Interfaces>
  <Docs>
    <summary>
            Schedules fibers for execution.
            </summary>
    <remarks>
            Schedulers are bound to the thread they are created on
            and they install a SynchronizationContext which is active during
            execution. Schedulers have an implementation specific update
            method or run loop. The interface is otherwise thin since schedulers
            are generally not intended to be used directly.
            Scheduling work is accomplished by invoking methods on
            <see cref="T:SpicyPixel.Threading.Fiber" /> or <see cref="P:SpicyPixel.Threading.FiberScheduler.SynchronizationContext" />.
            </remarks>
  </Docs>
  <Members>
    <Member MemberName=".ctor">
      <MemberSignature Language="C#" Value="protected FiberScheduler ();" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig specialname rtspecialname instance void .ctor() cil managed" />
      <MemberType>Constructor</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <Parameters />
      <Docs>
        <summary>
            Initializes a new instance of the <see cref="T:SpicyPixel.Threading.FiberScheduler" /> class.
            </summary>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="AllowInlining">
      <MemberSignature Language="C#" Value="public bool AllowInlining { get; set; }" />
      <MemberSignature Language="ILAsm" Value=".property instance bool AllowInlining" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Boolean</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets or sets a value indicating whether this <see cref="T:SpicyPixel.Threading.FiberScheduler" /> allows inlining.
            </summary>
        <value>
          <c>true</c> if inlining of tasks on the scheduler thread is allowed; otherwise, <c>false</c>. Default is <c>true</c>.
            </value>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="CancellationToken">
      <MemberSignature Language="C#" Value="public System.Threading.CancellationToken CancellationToken { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance valuetype System.Threading.CancellationToken CancellationToken" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Threading.CancellationToken</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the cancellation token set when the scheduler is destroyed.
            </summary>
        <value>
            The cancellation token.
            </value>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="Current">
      <MemberSignature Language="C#" Value="public static SpicyPixel.Threading.FiberScheduler Current { get; }" />
      <MemberSignature Language="ILAsm" Value=".property class SpicyPixel.Threading.FiberScheduler Current" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>SpicyPixel.Threading.FiberScheduler</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the default fiber scheduler for the thread.
            </summary>
        <value>
            The default fiber scheduler for the thread.
            </value>
        <remarks>
            Every thread has a default scheduler which Fiber.Start() uses.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="Dispose">
      <MemberSignature Language="C#" Value="public void Dispose ();" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Dispose() cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
            Releases all resource used by the <see cref="T:SpicyPixel.Threading.FiberScheduler" /> object.
            </summary>
        <remarks>
            Call the method when you are finished using the
            <see cref="T:SpicyPixel.Threading.FiberScheduler" />. The method leaves the
            <see cref="T:SpicyPixel.Threading.FiberScheduler" /> in an unusable state. After calling
            the method, you must release all references to the
            <see cref="T:SpicyPixel.Threading.FiberScheduler" /> so the garbage collector can reclaim the memory that
            the <see cref="T:SpicyPixel.Threading.FiberScheduler" /> was occupying.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="Dispose">
      <MemberSignature Language="C#" Value="protected virtual void Dispose (bool disposing);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig newslot virtual instance void Dispose(bool disposing) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="disposing" Type="System.Boolean" />
      </Parameters>
      <Docs>
        <param name="disposing">
            Disposing is true when called manually,
            false when called by the finalizer.
            </param>
        <summary>
            Dispose the scheduler.
            </summary>
        <remarks>
            When the scheduler is disposed, the <see cref="P:SpicyPixel.Threading.FiberScheduler.CancellationToken" /> is set.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="ExecuteFiber">
      <MemberSignature Language="C#" Value="protected SpicyPixel.Threading.FiberInstruction ExecuteFiber (SpicyPixel.Threading.Fiber fiber);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance class SpicyPixel.Threading.FiberInstruction ExecuteFiber(class SpicyPixel.Threading.Fiber fiber) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>SpicyPixel.Threading.FiberInstruction</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiber" Type="SpicyPixel.Threading.Fiber" />
      </Parameters>
      <Docs>
        <param name="fiber">
            The fiber to execute.
            </param>
        <summary>
            Executes the fiber until it ends or yields.
            </summary>
        <returns>
            A fiber instruction to be processed by the scheduler.
            </returns>
        <remarks>
            Custom schedulers will need to invoke this method in order
            to actually perform the work of the fiber and cause the correct
            state transitions to occur.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="Finalize">
      <MemberSignature Language="C#" Value="~FiberScheduler ();" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig virtual instance void Finalize() cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
            Releases unmanaged resources and performs other cleanup operations before the
            <see cref="T:SpicyPixel.Threading.FiberScheduler" /> is reclaimed by garbage collection.
            </summary>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
    <Member MemberName="QueueFiber">
      <MemberSignature Language="C#" Value="protected abstract void QueueFiber (SpicyPixel.Threading.Fiber fiber);" />
      <MemberSignature Language="ILAsm" Value=".method familyhidebysig newslot virtual instance void QueueFiber(class SpicyPixel.Threading.Fiber fiber) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiber" Type="SpicyPixel.Threading.Fiber" />
      </Parameters>
      <Docs>
        <param name="fiber">
            The fiber to queue.
            </param>
        <summary>
            Queues the fiber for execution on the scheduler.
            </summary>
        <returns>
            Returns <c>true</c> if the fiber was executed inline <c>false</c> if it was queued.
            </returns>
        <remarks>
            Fibers queued from the scheduler thread will generally be executed
            inline whenever possible on most schedulers. 
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="Run">
      <MemberSignature Language="C#" Value="public void Run ();" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Run() cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters />
      <Docs>
        <summary>
            Run the blocking scheduler loop and perform the specified number of updates per second.
            </summary>
        <remarks>
            Not all schedulers support a blocking run loop that can be invoked by the caller.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="Run">
      <MemberSignature Language="C#" Value="public void Run (SpicyPixel.Threading.Fiber fiber);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Run(class SpicyPixel.Threading.Fiber fiber) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiber" Type="SpicyPixel.Threading.Fiber" />
      </Parameters>
      <Docs>
        <param name="fiber">
            The initial fiber to start on the scheduler.
            </param>
        <summary>
            Run the blocking scheduler loop and perform the specified number of updates per second.
            </summary>
        <remarks>
            Not all schedulers support a blocking run loop that can be invoked by the caller.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="Run">
      <MemberSignature Language="C#" Value="public virtual void Run (System.Threading.CancellationToken token, float updatesPerSecond = 0);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Run(valuetype System.Threading.CancellationToken token, float32 updatesPerSecond) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="token" Type="System.Threading.CancellationToken" />
        <Parameter Name="updatesPerSecond" Type="System.Single" />
      </Parameters>
      <Docs>
        <param name="token">
            A cancellation token that can be used to stop execution.
            </param>
        <param name="updatesPerSecond">
            Updates to all fibers per second. A value of <c>0</c> (the default) will execute fibers
            any time they are ready to do work instead of waiting to execute on a specific frequency.
            </param>
        <summary>
            Run the blocking scheduler loop and perform the specified number of updates per second.
            </summary>
        <remarks>
            Not all schedulers support a blocking run loop that can be invoked by the caller.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="Run">
      <MemberSignature Language="C#" Value="public virtual void Run (SpicyPixel.Threading.Fiber fiber, System.Threading.CancellationToken token, float updatesPerSecond = 0);" />
      <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Run(class SpicyPixel.Threading.Fiber fiber, valuetype System.Threading.CancellationToken token, float32 updatesPerSecond) cil managed" />
      <MemberType>Method</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Void</ReturnType>
      </ReturnValue>
      <Parameters>
        <Parameter Name="fiber" Type="SpicyPixel.Threading.Fiber" />
        <Parameter Name="token" Type="System.Threading.CancellationToken" />
        <Parameter Name="updatesPerSecond" Type="System.Single" />
      </Parameters>
      <Docs>
        <param name="fiber">
            The optional fiber to start execution from. If this is <c>null</c>, the loop
            will continue to execute until cancelled. Otherwise, the loop will terminate
            when the fiber terminates.
            </param>
        <param name="token">
            A cancellation token that can be used to stop execution.
            </param>
        <param name="updatesPerSecond">
            Updates to all fibers per second. A value of <c>0</c> (the default) will execute fibers
            any time they are ready to do work instead of waiting to execute on a specific frequency.
            </param>
        <summary>
            Run the blocking scheduler loop and perform the specified number of updates per second.
            </summary>
        <remarks>
            Not all schedulers support a blocking run loop that can be invoked by the caller.
            </remarks>
      </Docs>
    </Member>
    <Member MemberName="SchedulerThread">
      <MemberSignature Language="C#" Value="public System.Threading.Thread SchedulerThread { get; }" />
      <MemberSignature Language="ILAsm" Value=".property instance class System.Threading.Thread SchedulerThread" />
      <MemberType>Property</MemberType>
      <AssemblyInfo>
        <AssemblyVersion>1.0.5.34676</AssemblyVersion>
      </AssemblyInfo>
      <ReturnValue>
        <ReturnType>System.Threading.Thread</ReturnType>
      </ReturnValue>
      <Docs>
        <summary>
            Gets the thread the scheduler is running on.
            </summary>
        <value>
            The scheduler thread.
            </value>
        <remarks>To be added.</remarks>
      </Docs>
    </Member>
  </Members>
</Type>
