gv_fsm 0.4.1 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/templates.rb +23 -7
  3. data/lib/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73902a6a767d8a5642f9f611cd7d6d73e5edfa34d17181b95a17c94ac45dfeed
4
- data.tar.gz: 7729bd9ef72ebe5ec2cdd8734d3aa9a42114932418ca9189b176af90012803c6
3
+ metadata.gz: 6e2b60dc6b9b04ce5e69c1737103af124f756c56324a9c92193b35223acacf9e
4
+ data.tar.gz: 55ba355493f4e6ffe0ed6ea9a48174b1a478a024b6d07c6b3b4d4dafc9d4ebc3
5
5
  SHA512:
6
- metadata.gz: 044106cb2470f4189a44ff8b3988119d3c65a25417a380a10bd115dab85738655429b3f90cd0bbaa40353a2de9cdbbee6cbe549d2cdf9554e0555af7b132d9e3
7
- data.tar.gz: 359bbefb9df9567a012660b23ed6c04c323be54f2c411198e00c85833adb4a682099c2aea9386d5b4114ec6e9cedde5eb08246fc3b4d386d6838f4e33074990d
6
+ metadata.gz: 871eaa5cf354c80f516d31878efb9bea108ee55b76a04f3b4715bdc317e2eb8cb9b1005646248f9cff7838cb168aac7d120b8d3388d4be3cbf6ddf237426a0e0
7
+ data.tar.gz: 39e534fe925ac412a12b88c02e29bbfb106e3460509a7a4a1bbc077f7a6074e7b35f1071fb10151e8e96a1d08706b729919978efc025ee7361d7f6a3b5fd7d87
data/lib/templates.rb CHANGED
@@ -442,7 +442,11 @@ public:
442
442
  if (_states.find(state) == _states.end()) {
443
443
  throw std::runtime_error("State not found: "s + state_names[state]);
444
444
  }
445
- return _states[state](*_data);
445
+ state_t next = _states[state](*_data);
446
+ if (next == NO_CHANGE) {
447
+ next = state;
448
+ }
449
+ return next;
446
450
  }
447
451
 
448
452
  void operator()(<%= @prefix %>state_t from, <%= @prefix %>state_t to) {
@@ -453,12 +457,26 @@ public:
453
457
  }
454
458
  }
455
459
 
456
- // Run the FSM from a given state
457
- void run(<%= @prefix %>state_t state, operation_fun operation = nullptr) {
460
+
461
+ // Setup initial state links
462
+ void setup(state_t state) {
458
463
  <%= ns %>::<%= self.sigint %>_requested = false;
459
- <%= @prefix %>state_t prev_state = state;
460
464
  _state.first = state;
461
465
  _state.second = state;
466
+ }
467
+
468
+ // Evaluate the current state and update the next state
469
+ // to be used when main loop is customized (i.e., not using FSM::run())
470
+ state_t eval_state() {
471
+ (*this)(_state.first, _state.second);
472
+ _state.first = _state.second;
473
+ _state.second = (*this)(_state.second);
474
+ return _state.second;
475
+ }
476
+
477
+ // Run the FSM from a given state
478
+ void run(<%= @prefix %>state_t state, operation_fun operation = nullptr) {
479
+ setup(state);
462
480
  <% if sigint then -%>
463
481
  std::signal(SIGINT, [](int signum) {
464
482
  <% if log == :syslog then -%>
@@ -471,9 +489,7 @@ public:
471
489
  if (operation) {
472
490
  operation(*_data);
473
491
  }
474
- (*this)(_state.first, _state.second);
475
- _state.first = _state.second;
476
- _state.second = (*this)(_state.second);
492
+ eval_state();
477
493
  if (_timing_func) {
478
494
  _timing_func();
479
495
  }
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module GV_FSM
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gv_fsm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paolo Bosetti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-10 00:00:00.000000000 Z
11
+ date: 2025-01-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-graphviz