Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Chapter 1. Founding idea

Boost , Meta State Machine (MSM) , Part I. User' guide

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Chapter 1. Founding idea

Начнем с примера, взятого из C++. Шаблон книги Метапрограммирование:

class player : public state_machine<player>
{ 
  // The list of FSM states enum states { Empty, Open, Stopped, Playing, Paused , initial_state = Empty }; 
  // transition actions 
  void start_playback(play const&) { std::cout << "player::start_playback\n"; } 
  void open_drawer(open_close const&) { std::cout << "player::open_drawer\n"; } 
  // more transition actions
  ...
  typedef player p; // makes transition table cleaner 
  struct transition_table : mpl::vector11< 
  //    Start     Event        Target      Action                       
  //   +---------+------------+-----------+---------------------------+ 
    row< Stopped , play       ,  Playing  , &p::start_playback        >,
    row< Stopped , open_close ,  Open     , &::open_drawer            >,
  //   +---------+------------+-----------+---------------------------+ 
    row< Open    , open_close ,  Empty    , &p::close_drawer          >,
  //   +---------+------------+-----------+---------------------------+ 
    row< Empty   , open_close ,  Open     , &p::open_drawer           >,
    row< Empty   , cd_detected,  Stopped  , &p::store_cd_info         >,
  //   +---------+------------+-----------+---------------------------+ 
    row< Playing , stop       ,  Stopped  , &p::stop_playback         >,
    row< Playing , pause      ,  Paused   , &p::pause_playback        >,
    row< Playing , open_close ,  Open     , &p::stop_and_open         >,
  //   +---------+------------+-----------+---------------------------+ 
    row< Paused  , play       ,  Playing  , &p::resume_playback       >,
    row< Paused  , stop       ,  Stopped  , &p::stop_playback         >,
    row< Paused  , open_close ,  Open     , &p::stop_and_open         >
  //   +---------+------------+-----------+---------------------------+ 
  > {};
  // Replaces the default no-transition response. 
  template <class Event> 
  int no_transition(int state, Event const& e)
  { 
    std::cout << "no transition from state " << state << " on event " << typeid(e).name() << std::endl; 
    return state; 
  }
};                        

Этот пример является основой для идеи управления MSM: описательный и выразительный язык, основанный на таблице переходов с минимальным синтаксическим шумом, все это, предлагая как можно больше функций из стандарта UML 2.0. MSM также предлагает несколько экспрессивных синтаксисов определения состояния машины с различными компромиссами.

Статья Chapter 1. Founding idea раздела Meta State Machine (MSM) Part I. User' guide может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Part I. User' guide ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:28:20/0.0031919479370117/0