etsm 0.1.3
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package etsm --version 0.1.3
NuGet\Install-Package etsm -Version 0.1.3
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="etsm" Version="0.1.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add etsm --version 0.1.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: etsm, 0.1.3"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install etsm as a Cake Addin #addin nuget:?package=etsm&version=0.1.3 // Install etsm as a Cake Tool #tool nuget:?package=etsm&version=0.1.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
c# etsm
Tiny state machine for c#, see etsm
Description
Implement a bare bones state machine in many languages. This library aim to be simple as possible and support only basic features:
- states on object (owner)
- enter/exit methods
- virtual state methods
- is in
- unrestricted transitions
- no runtime allocation
Install
Edit your vcproj and add:
<ItemGroup>
<PackageReference Include="etsm" Version="x.y.z" />
</ItemGroup>
Or
Add this file directly into your project: etsm
Example
Simple
Declare state machine and state in your class
public class Foo
{
private StateMachine<State> stateMachine;
private State stateA;
private State stateB;
...
Create them in the constructor and bind enter/exit
public Foo()
{
stateMachine = new StateMachine<State>();
stateA = new State(EnterA, ExitA);
stateB = new State(EnterB, null);
}
Make your callback methods
void EnterA()
{
System.Console.Write(" ->A ");
}
void ExitA()
{
System.Console.Write(" A-> ");
}
void EnterB()
{
System.Console.Write(" ->B ");
}
Execute transitions
public void Run()
{
stateMachine.Transition(stateA);
stateMachine.Transition(stateB);
stateMachine.Transition(null);
}
Output: " →A A-> →B "
full sample here
Virtual State Methods
// Define your own state and add Run Action.
public class State : Etsm.State
{
public Action? Run { get; private set; }
public State(Action? enter, Action? exit, Action? run = null)
: base(enter, exit)
{
Run = run;
}
}
public class Foo
{
private StateMachine<State> stateMachine;
private State stateA;
private State stateB;
public Foo()
{
stateMachine = new StateMachine<State>();
stateA = new State(null, null, RunA);
stateB = new State(null, null, RunB);
}
private void RunA()
{
Console.Write(" A ");
}
private void RunB()
{
Console.Write(" B ");
}
// call run on the current state
private void Run()
{
stateMachine.CurrentState?.Run?.Invoke();
}
public void Test()
{
stateMachine.Transition(stateA);
Run();
stateMachine.Transition(stateB);
Run();
}
}
Output: " A B "
full sample here
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net6.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.