diff --git a/src/main/resources/de/hhu/stups/codegenerator/CppTemplate.stg b/src/main/resources/de/hhu/stups/codegenerator/CppTemplate.stg index e37f4b9f29f06ddca7db8c4ffc5bad7c520e427c..4807e7844dc04f7e9719d7cdcbc4f2ed7361f281 100644 --- a/src/main/resources/de/hhu/stups/codegenerator/CppTemplate.stg +++ b/src/main/resources/de/hhu/stups/codegenerator/CppTemplate.stg @@ -1122,20 +1122,20 @@ model_check_transition(machine, hasParameters, tupleType, transitionIdentifier, <if(hasParameters)> <if(isCaching)> <machine>::_ProjectionRead_<evalTransitions> read_<evalTransitions>_state = state._projected_state_for_<evalTransitions>(); -auto <transitionIdentifier>_ptr = _OpCache<evalTransitions>.find(read_<evalTransitions>_state); -if(<transitionIdentifier>_ptr == _OpCache<evalTransitions>.end()) { - BSet\<<tupleType>\> <transitionIdentifier> = state.<evalTransitions>(); - { - std::unique_lock\<std::mutex> _ProjectionRead_<evalTransitions>_lock(_ProjectionRead_<evalTransitions>_mutex); +{ + std::unique_lock\<std::mutex> _ProjectionRead_<evalTransitions>_lock(_ProjectionRead_<evalTransitions>_mutex); + auto <transitionIdentifier>_ptr = _OpCache<evalTransitions>.find(read_<evalTransitions>_state); + if(<transitionIdentifier>_ptr == _OpCache<evalTransitions>.end()) { + BSet\<<tupleType>\> <transitionIdentifier> = state.<evalTransitions>(); _OpCache<evalTransitions>.insert({read_<evalTransitions>_state, <transitionIdentifier>}); - } - for(const <tupleType>& param : <transitionIdentifier>) { - <execTransitions> - } -} else { - BSet\<<tupleType>\> <transitionIdentifier> = <transitionIdentifier>_ptr->second; - for(const <tupleType>& param : <transitionIdentifier>) { - <execTransitions> + for(const <tupleType>& param : <transitionIdentifier>) { + <execTransitions> + } + } else { + BSet\<<tupleType>\> <transitionIdentifier> = <transitionIdentifier>_ptr->second; + for(const <tupleType>& param : <transitionIdentifier>) { + <execTransitions> + } } } <else> @@ -1148,15 +1148,15 @@ for(const <tupleType>& param : <transitionIdentifier>) { <if(isCaching)> <machine>::_ProjectionRead_<evalTransitions> read_<evalTransitions>_state = state._projected_state_for_<evalTransitions>(); bool <transitionIdentifier> = false; -auto _obj_<transitionIdentifier>_ptr = _OpCache<evalTransitions>.find(read_<evalTransitions>_state); -if(_obj_<transitionIdentifier>_ptr == _OpCache<evalTransitions>.end()) { - <transitionIdentifier> = state.<evalTransitions>(); - { - std::unique_lock\<std::mutex> _ProjectionRead_<evalTransitions>_lock(_ProjectionRead_<evalTransitions>_mutex); +{ + std::unique_lock\<std::mutex> _ProjectionRead_<evalTransitions>_lock(_ProjectionRead_<evalTransitions>_mutex); + auto _obj_<transitionIdentifier>_ptr = _OpCache<evalTransitions>.find(read_<evalTransitions>_state); + if(_obj_<transitionIdentifier>_ptr == _OpCache<evalTransitions>.end()) { + <transitionIdentifier> = state.<evalTransitions>(); _OpCache<evalTransitions>.insert({read_<evalTransitions>_state, <transitionIdentifier>}); + } else { + <transitionIdentifier> = _obj_<transitionIdentifier>_ptr->second; } -} else { - <transitionIdentifier> = _obj_<transitionIdentifier>_ptr->second; } if(<transitionIdentifier>) { <execTransitions> @@ -1477,20 +1477,16 @@ model_check_transition_body(machine, operation, hasParameters, readParameters, p <machine> copiedState = state._copy(); <if(isCaching)> <machine>::_ProjectionRead_<operation> readState = state._projected_state_for_<operation>(); - -auto _OpCache_with_parameter_<operation>_ptr = _OpCache_<operation>.find(<transitionEval>); -if(_OpCache_with_parameter_<operation>_ptr == _OpCache_<operation>.end()) { - { - std::unique_lock\<std::mutex> _ProjectionRead_<operation>_lock(_ProjectionRead_<operation>_mutex); +{ + std::unique_lock\<std::mutex> _ProjectionRead_<operation>_lock(_ProjectionRead_<operation>_mutex); + auto _OpCache_with_parameter_<operation>_ptr = _OpCache_<operation>.find(<transitionEval>); + if(_OpCache_with_parameter_<operation>_ptr == _OpCache_<operation>.end()) { copiedState.<operation>(<parameters; separator=", ">); <machine>::_ProjectionWrite_<operation> writeState = copiedState._update_for_<operation>(); std::unordered_map\<<machine>::_ProjectionRead_<operation>, <machine>::_ProjectionWrite_<operation>, <machine>::_ProjectionRead_<operation>::Hash, <machine>::_ProjectionRead_<operation>::HashEqual\> _OpCache_with_parameter_<operation> = std::unordered_map\<<machine>::_ProjectionRead_<operation>, <machine>::_ProjectionWrite_<operation>, <machine>::_ProjectionRead_<operation>::Hash, <machine>::_ProjectionRead_<operation>::HashEqual\>(); _OpCache_with_parameter_<operation>.insert({readState, writeState}); _OpCache_<operation>.insert({<transitionEval>, _OpCache_with_parameter_<operation>}); - } -} else { - { - std::unique_lock\<std::mutex> _ProjectionRead_<operation>_lock(_ProjectionRead_<operation>_mutex); + } else { std::unordered_map\<<machine>::_ProjectionRead_<operation>, <machine>::_ProjectionWrite_<operation>, <machine>::_ProjectionRead_<operation>::Hash, <machine>::_ProjectionRead_<operation>::HashEqual\> _OpCache_with_parameter_<operation> = _OpCache_with_parameter_<operation>_ptr->second; auto writeState_ptr = _OpCache_with_parameter_<operation>.find(readState); if(writeState_ptr != _OpCache_with_parameter_<operation>.end()) { @@ -1503,7 +1499,6 @@ if(_OpCache_with_parameter_<operation>_ptr == _OpCache_<operation>.end()) { } } } - <else> copiedState.<operation>(<parameters; separator=", ">); <endif>