| 1 |
<?xml version="1.0" encoding="euc-jp"?> |
| 2 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
| 3 |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| 4 |
<html xmlns="http://www.w3.org/1999/xhtml"> |
| 5 |
|
| 6 |
<head> |
| 7 |
<meta http-equiv="content-script-type" content="text/javascript" /> |
| 8 |
<meta http-equiv="content-type" content="text/html; charset=EUC-JP" /> |
| 9 |
<link rel="stylesheet" href="./statemachinecxx.css" media="all" type="text/css" /> |
| 10 |
<script type="text/javascript" src="./util.js"></script> |
| 11 |
<title>Generic State Machine Library for C++</title> |
| 12 |
</head> |
| 13 |
|
| 14 |
<body> |
| 15 |
|
| 16 |
<h1>Generic State Machine Library for C++</h1> |
| 17 |
|
| 18 |
<div class="main"> |
| 19 |
<p>Generic State Machine Library for C++ は、汎用的な状態機械(オートマトン)ライブラリです。 |
| 20 |
継承/マクロ/キャストを使わずに、状態の入れ子構造や entry/exit アクション、初期遷移をサポートします。</p> |
| 21 |
|
| 22 |
<h2>文書</h2> |
| 23 |
<ul> |
| 24 |
<li><a href="./tutorial.html">チュートリアル</a></li> |
| 25 |
<li>ユーザーズガイド</li> |
| 26 |
<li>リファレンスマニュアル</li> |
| 27 |
<li>サンプル:C/C++ コメントパーサー</li> |
| 28 |
<li>サンプル:電卓</li> |
| 29 |
<li>FAQ</li> |
| 30 |
</ul> |
| 31 |
|
| 32 |
<h2>参考</h2> |
| 33 |
|
| 34 |
<p>Generic State Machine Library for C++ の実装は |
| 35 |
<a href="http://quantum-leaps.com/" target="_blank">Quantum Framework</a>(以下、QF) |
| 36 |
のアイデアを元にしています。QF はその名の通り、状態機械を走らせるフレームワークで、 |
| 37 |
性能・拡張性・移植性・安全性・マルチスレッドといった点を充分に考慮した設計になっています。 |
| 38 |
サポートしている言語も C/C++/Java/C# などと幅広く、 |
| 39 |
組み込み系のリアルタイムシステムでも使えるのが大きな特徴です。</p> |
| 40 |
|
| 41 |
<p>QF については 上記 URL の他、 |
| 42 |
<a href="http://www.amazon.co.jp/gp/product/1578201101/" target="_blank">Practical Statecharts in C/C++</a> |
| 43 |
でも詳しく解説されています。2002 年発行のため、最新版の QF の実装を調べる用途には向きませんが、 |
| 44 |
基本的な考え方を学ぶには良いテキストです。</p> |
| 45 |
|
| 46 |
<p>この他の実装としては、テンプレートをふんだんに使った |
| 47 |
<a href="http://boost-sandbox.sourceforge.net/libs/statechart/doc/index.html" |
| 48 |
target="_blank">The Boost Statechart Library</a> |
| 49 |
もあります。</p> |
| 50 |
|
| 51 |
<h2>構造</h2> |
| 52 |
|
| 53 |
<img src="./images/structure.png" /> |
| 54 |
|
| 55 |
<p>グレーの部分がユーザー定義クラスです。StateContainer のメンバー関数で「状態」を表現します。 |
| 56 |
上記の図では、State1 や State2 が状態関数になります。 |
| 57 |
状態関数は引数として GenericEvent<ParamType> を受け取り、GenericState<StateContainer> を返します。</p> |
| 58 |
|
| 59 |
<p>ConcreateStateMachine は、状態関数に対して entry/exit アクションを呼び出したり、全体的な状態遷移を制御します。</p> |
| 60 |
|
| 61 |
</div> |
| 62 |
|
| 63 |
<div class="sidebar"> |
| 64 |
<script type="text/javascript">lastupdate("$Date: 2006/09/17 09:41:04 $");</script> |
| 65 |
<script type="text/javascript" src="./sidebar.js"></script> |
| 66 |
</div> |
| 67 |
|
| 68 |
<div class="footer"> |
| 69 |
<p>Copyright © 2006 Tomotaka SUWA All Rights Reserved.</p> |
| 70 |
</div> |
| 71 |
|
| 72 |
</body> |
| 73 |
</html> |