Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/afsmPublic
Sergei Fedorov edited this pageNov 30, 2016 ·8 revisions

Another Finite State Machine

afsm is a finite state machine C++11 library designed for usage in multithreaded asynchronous environment.

Inspiration and Motivation

Theafsm library was inspired by::boost::msm library and implemented so that the migration from::boost::msm was a bunch of search and replace operations. The main motivation was to create a thread-safe FSM library and to achieve decent compile times for large and complex state machines not sacrificing performance. A state machine defined withafms library compiles several times faster than same library defined with::boost::msm and has similar (or better) performance. You can find some benchmark resultshere.

Features

Planned features

  • State machine persistense

Synopsis

Here is a UML diagram of a trivial state machine and source code that it is mapped to.minimal

#include<afsm/fsm.hpp>// Eventsstructstart {};structstop {};// State machine definitionstructminimal_def : ::afsm::def::state_machine<minimal_def> {//@{/** @name States*/structinitial      : state<initial> {};structrunning      : state<running> {};structterminated   : terminal_state<terminated> {};//@}using initial_state = initial;using transitions   = transition_table</*  State       Event       Next*/        tr< initial,    start,      running     >,        tr< running,    stop,       terminated  >    >;};// State machine objectusing minimal = ::afsm::state_machine<minimal_def>;voiduse(){    mimimal fsm;    fsm.process_event(start{});    fsm.process_event(stop{});}

You can find a tutorial covering most of basic featureshere.

Documentation

TODO doxygen generated documentation.

Installation

The library is header only and doesn't requre build or installation. Just add theafsm/include andlib/meta/include directories under the root of this repository to your include paths.

CMake subproject

You can add the library to your project as a subtree, e.g.lib/afsm, and in your rootCMakeLists.txt file just do the following:

add_subdirectory(lib/afsm)include_directories(${AFSM_INCLUDE_DIRS})

TODO write docs on gitrc subtree commands and link to the repository

Installation to System Directories

git clone git@github.com:zmij/afsm.gitmkdir afsm/buildcd afsm/buildcmake ..sudo make install

Finding the AFSM Package

find_package(AFSM REQUIRED)# Will set AFSM_INCLUDE_DIRS variable

Project Development

The project is mostly developed as a part of other projects (pg_async, PostgreSQL asynchronous driver,wire, an RPC library for C++) which are in turn developed as a part of a bigger commercial project.

License

The Artistic License 2.0

Clone this wiki locally

[8]ページ先頭

©2009-2025 Movatter.jp