tinybike / FiniteStateMachine.jl

A simple Julia implementation of finite state machines.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FiniteStateMachine

Build Status Coverage Status FiniteStateMachine FiniteStateMachine

A simple finite state machine library for Julia, based on Jake Gordon's javascript-state-machine.

Installation

julia> Pkg.add("FiniteStateMachine")

Usage

StateMachine objects are set up using the state_machine function, which takes a "model" describing your state machine's layout as input.

julia> using FiniteStateMachine

julia> fsm = state_machine({
    "initial" => "first",
    "final" => "fourth",
    "events" => [{
            "name" => "hop",
            "from" => "first",
            "to" => "second",
        }, {
            "name" => "skip",
            "from" => "second",
            "to" => "third",
        }, {
            "name" => "jump",
            "from" => "third",
            "to" => "fourth",
        },
    ],
    "callbacks" => {
        "onbeforeevent" => (fsm::StateMachine, args...) -> 1+1,
    },
})

Events are called using the fire function:

julia> fsm.current
"first"

julia> fire(fsm, "hop")

julia> fsm.current
"second"

julia> fire(fsm, "skip")

julia> fsm.current
"third"

julia> fire(fsm, "jump")

julia> fsm.current
"fourth"

julia> fire(fsm, "finished")
true

Unless other specified, a special "startup" event fires automatically when the state machine is created.

The "initial" field can be either a string, or a dict specifying: state (the name of the state in which to start), event (the startup event), and/or defer (set to true if the startup event should not be fired automatically when the state machine is created).

Supports multiple source states, for example, the following code allows "hop" to take place from either the "first" or "third" states:

"events" => [{
    "name" => "hop",
    "from" => ["first", "third"],
    "to" => "second",
},

Tests

Unit tests are located in test/. To run the tests:

$ julia test/runtests.jl

About

A simple Julia implementation of finite state machines.

License:MIT License


Languages

Language:Julia 100.0%