Comments (9)
I am thinking about the problem and possible solutions. I don't think that returning the target object in the current actions is the most sophisticated solution to initialize the state. It will make the transition table harder to understand. Two other solutions that came into my mind:
-
Provide state objects to the state machine object.
The problem here is that you might not have all parameters to construct the state yet. -
Provide a special on_entry event as it is done in the sml
The action of this event could return the constructed target statehsm::state<S1>{} + hsm::on_entry{} / [](auto event, auto source){ return S1{std::string{"Init string"}};}
from hsm.
@BenjaminW3 can you give me more details on your use case?
from hsm.
In the use case I have in mind, the target state is constructed based on the members of the event leading to the transition to the to-be-constructed target state.
Using on_entry
is probably already too late because there the event is already gone.
from hsm.
For reference the rest of my proposal from the other PR discussion:
"I would still allow void returns from actions to use the default constructor. Furthermore, we would have to make sure that only one of the actions in a transition (maybe only the last one?) may return the next state"
from hsm.
Just for the record: I found two bugs while writing the on_entry state initialization integration test (see #103 and #104)
from hsm.
from hsm.
Accidentally, I found out that the sml also supports data members. Maybe because it is not mentioned in the documentation I missed the feature until now.
Just for the record, the user can provide non default initialized states to the constructor of the state machine. I guess if he doesn't they will be default initialized.
The solution is like the first one I already discussed above. And it still has the problem that some states might need data from an event to be constructed.
from hsm.
I added a PR for the feature #118. Would be nice if you can have a look at it.
from hsm.
Merged with #118
from hsm.
Related Issues (20)
- [Packaging] Provide Spack Package
- Improve Compiletime HOT 15
- [Packaging] Provide Ubuntu/Debian Package HOT 3
- Substate entry action is only called when transition has a action HOT 1
- SubState entry should call entry action of initial state HOT 1
- Compose actions HOT 1
- Setup Ci for Windows HOT 1
- Setup Ci for MacOs HOT 1
- [FEATURE] Access to Parent Source State on entry of SubState
- [FEATURE] Provide state information to unexpected event handler HOT 2
- [FEATURE] Improve error on unknown event type is processed HOT 1
- [BUG] MSVC_RUNTIME_LIBRARY in tests HOT 2
- [BUG] MSVC dispatch table injection fails to compile HOT 2
- [BUG] Segfault in process_events HOT 3
- [FEATURE] Documentation. More fsm comparison criteria HOT 3
- [FEATURE] SubSub...State explicit exits from RootState
- [BUG] direct transition on initial state
- [BUG] on_exit never call for initial state HOT 1
- [FEATURE] Call a state activity
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hsm.