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.
- checksums.yaml +4 -4
- data/lib/templates.rb +23 -7
- data/lib/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e2b60dc6b9b04ce5e69c1737103af124f756c56324a9c92193b35223acacf9e
|
4
|
+
data.tar.gz: 55ba355493f4e6ffe0ed6ea9a48174b1a478a024b6d07c6b3b4d4dafc9d4ebc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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
|
-
|
457
|
-
|
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
|
-
(
|
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
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.
|
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:
|
11
|
+
date: 2025-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-graphviz
|