| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -8,7 +8,7 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        AssignmentsFinder::ResultType AssignmentsFinder::find(Model const& model, storm::jani::Variable const& variable) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return find(model, variable.getExpressionVariable()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        AssignmentsFinder::ResultType AssignmentsFinder::find(Model const& model, storm::expressions::Variable const& variable) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ResultType res; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            res.hasLocationAssignment = false; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -20,35 +20,45 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        void AssignmentsFinder::traverse(Location const& location, boost::any const& data) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            auto resVar = boost::any_cast<std::pair<storm::expressions::Variable const*, ResultType*>>(data); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (auto const& assignment : location.getAssignments()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                storm::jani::Variable const& assignedVariable = assignment.lValueIsArrayAccess() ? assignment.getLValue().getArray() : assignment.getVariable(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (assignedVariable.getExpressionVariable() == *resVar.first) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    resVar.second->hasLocationAssignment = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (!resVar.second->hasLocationAssignment) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (auto const& assignment : location.getAssignments()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    storm::jani::Variable const& assignedVariable = assignment.lValueIsArrayAccess() ? assignment.getLValue().getArray() : assignment.getVariable(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (assignedVariable.getExpressionVariable() == *resVar.first) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        resVar.second->hasLocationAssignment = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ConstJaniTraverser::traverse(location, data); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        void AssignmentsFinder::traverse(TemplateEdge const& templateEdge, boost::any const& data) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            auto resVar = boost::any_cast<std::pair<storm::expressions::Variable const*, ResultType*>>(data); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (auto const& assignment : templateEdge.getAssignments()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                storm::jani::Variable const& assignedVariable = assignment.lValueIsArrayAccess() ? assignment.getLValue().getArray() : assignment.getVariable(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (assignedVariable.getExpressionVariable() == *resVar.first) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    resVar.second->hasEdgeAssignment = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (!resVar.second->hasEdgeAssignment) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (auto const& assignment : templateEdge.getAssignments()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    storm::jani::Variable const& assignedVariable = assignment.lValueIsArrayAccess() ? assignment.getLValue().getArray() : assignment.getVariable(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (assignedVariable.getExpressionVariable() == *resVar.first) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        resVar.second->hasEdgeAssignment = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ConstJaniTraverser::traverse(templateEdge, data); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (auto const& dest : templateEdge.getDestinations()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                traverse(dest, data); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        void AssignmentsFinder::traverse(TemplateEdgeDestination const& templateEdgeDestination, boost::any const& data) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            auto resVar = boost::any_cast<std::pair<storm::expressions::Variable const*, ResultType*>>(data); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (auto const& assignment : templateEdgeDestination.getOrderedAssignments()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                storm::jani::Variable const& assignedVariable = assignment.lValueIsArrayAccess() ? assignment.getLValue().getArray() : assignment.getVariable(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (assignedVariable.getExpressionVariable() == *resVar.first) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    resVar.second->hasEdgeDestinationAssignment = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (!resVar.second->hasEdgeDestinationAssignment) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (auto const& assignment : templateEdgeDestination.getOrderedAssignments()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    storm::jani::Variable const& assignedVariable = assignment.lValueIsArrayAccess() ? assignment.getLValue().getArray() : assignment.getVariable(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    if (assignedVariable.getExpressionVariable() == *resVar.first) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        resVar.second->hasEdgeDestinationAssignment = true; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ConstJaniTraverser::traverse(templateEdgeDestination, data); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					
  |