| 
					
					
						
							
						
					
					
				 | 
				@ -2,6 +2,7 @@ | 
			
		
		
	
		
			
				 | 
				 | 
				#include "src/storage/jani/Model.h"
 | 
				 | 
				 | 
				#include "src/storage/jani/Model.h"
 | 
			
		
		
	
		
			
				 | 
				 | 
				#include "src/exceptions/FileIoException.h"
 | 
				 | 
				 | 
				#include "src/exceptions/FileIoException.h"
 | 
			
		
		
	
		
			
				 | 
				 | 
				#include "src/exceptions/InvalidJaniException.h"
 | 
				 | 
				 | 
				#include "src/exceptions/InvalidJaniException.h"
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#include "src/storage/jani/ModelType.h"
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				#include <iostream>
 | 
				 | 
				 | 
				#include <iostream>
 | 
			
		
		
	
		
			
				 | 
				 | 
				#include <sstream>
 | 
				 | 
				 | 
				#include <sstream>
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -45,6 +46,19 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        storm::jani::Model JaniParser::parseModel() { | 
				 | 
				 | 
				        storm::jani::Model JaniParser::parseModel() { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            STORM_LOG_THROW(parsedStructure.count("jani-version") == 1, storm::exceptions::InvalidJaniException, "Jani-version must be given exactly once."); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            STORM_LOG_THROW(parsedStructure.count("type") == 1, storm::exceptions::InvalidJaniException, "A type must be given exactly once"); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            std::string modeltypestring = getString(parsedStructure.at("type"), "type of the model"); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            storm::jani::ModelType type = storm::jani::getModelType(modeltypestring); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            STORM_LOG_THROW(type != storm::jani::ModelType::UNDEFINED, storm::exceptions::InvalidJaniException, "model type " + modeltypestring + " not recognized"); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            storm::jani::Model model("model", type); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            STORM_LOG_THROW(parsedStructure.count("actions") < 2, storm::exceptions::InvalidJaniException, "Action-declarations can be given at most once"); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            parseActions(parsedStructure.at("actions"), model); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				             | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            STORM_LOG_THROW(parsedStructure.count("automata") == 1, storm::exceptions::InvalidJaniException, "Exactly one list of automata must be given"); | 
				 | 
				 | 
				            STORM_LOG_THROW(parsedStructure.count("automata") == 1, storm::exceptions::InvalidJaniException, "Exactly one list of automata must be given"); | 
			
		
		
	
		
			
				 | 
				 | 
				            STORM_LOG_THROW(parsedStructure.at("automata").is_array(), storm::exceptions::InvalidJaniException, "Automata must be an array"); | 
				 | 
				 | 
				            STORM_LOG_THROW(parsedStructure.at("automata").is_array(), storm::exceptions::InvalidJaniException, "Automata must be an array"); | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -58,6 +72,16 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        void JaniParser::parseActions(json const& actionStructure, storm::jani::Model& parentModel) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            std::set<std::string> actionNames; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            for(auto const& actionEntry : actionStructure) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                std::string actionName = getString(actionEntry, "name of action"); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                STORM_LOG_THROW(actionNames.count(actionName) == 0, storm::exceptions::InvalidJaniException, "Action with name " + actionName + " already exists."); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                parentModel.addAction(storm::jani::Action(actionName)); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                actionNames.emplace(actionName); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        storm::jani::Automaton JaniParser::parseAutomaton(json const &automatonStructure) { | 
				 | 
				 | 
				        storm::jani::Automaton JaniParser::parseAutomaton(json const &automatonStructure) { | 
			
		
		
	
		
			
				 | 
				 | 
				            STORM_LOG_THROW(automatonStructure.count("name") == 1, storm::exceptions::InvalidJaniException, "Each automaton must have a name"); | 
				 | 
				 | 
				            STORM_LOG_THROW(automatonStructure.count("name") == 1, storm::exceptions::InvalidJaniException, "Each automaton must have a name"); | 
			
		
		
	
		
			
				 | 
				 | 
				            std::string name = getString(parsedStructure.at("name"), " the name field for automaton"); | 
				 | 
				 | 
				            std::string name = getString(parsedStructure.at("name"), " the name field for automaton"); | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -72,6 +96,8 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				            } | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				            return automaton; | 
				 | 
				 | 
				            return automaton; | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |