gv_fsm 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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