| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -9,9 +9,6 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    namespace storage { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        size_t DftJsonExporter<ValueType>::currentId = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        void DftJsonExporter<ValueType>::toFile(storm::storage::DFT<ValueType> const& dft, std::string const& filepath) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::ofstream ofs; | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -31,46 +28,34 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modernjson::json DftJsonExporter<ValueType>::translate(storm::storage::DFT<ValueType> const& dft) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            modernjson::json jsonDft; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            currentId = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // Nodes
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            modernjson::json jsonNodes; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (size_t i = 0; i < dft.nrElements(); ++i) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                modernjson::json jsonNode = translateNode(dft.getElement(i)); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                jsonDft.push_back(jsonNode); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            // Edges
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            modernjson::json jsonEdges; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            for (size_t i = 0; i < dft.nrElements(); ++i) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                if (dft.isGate(i)) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    std::shared_ptr<DFTGate<ValueType> const> gate = dft.getGate(i); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    for (size_t index = 0; index < gate->nrChildren(); ++index) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        DFTElementPointer child = gate->children()[index]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        modernjson::json jsonEdge = translateEdge(gate, child, index); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                        jsonDft.push_back(jsonEdge); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                jsonNodes.push_back(jsonNode); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            modernjson::json jsonDft; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            jsonDft["toplevel"] = std::to_string(dft.getTopLevelIndex()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            jsonDft["nodes"] = jsonNodes; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return jsonDft; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modernjson::json DftJsonExporter<ValueType>::translateNode(DFTElementCPointer const& element) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            modernjson::json nodeData; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            nodeData["id"] = element->id(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ++currentId; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            STORM_LOG_ASSERT(element->id() == currentId-1, "Ids do not correspond"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            nodeData["id"] = std::to_string(element->id()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            nodeData["name"] = element->name(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::string type = storm::storage::toString(element->type()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::transform(type.begin(), type.end(), type.begin(), ::tolower); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            nodeData["type"] = type; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if (element->isGate()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                // Set children for gate
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::shared_ptr<DFTGate<ValueType> const> gate = std::static_pointer_cast<DFTGate<ValueType> const>(element); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::vector<size_t> children; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                std::vector<std::string> children; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                for (DFTElementPointer const& child : gate->children()) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    children.push_back(child->id()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    children.push_back(std::to_string(child->id())); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                nodeData["children"] = children; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            } else if (element->isBasicElement()) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -86,39 +71,14 @@ namespace storm { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            modernjson::json jsonNode; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            jsonNode["data"] = nodeData; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            jsonNode["group"] = "nodes"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::string type = storm::storage::toString(element->type()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::transform(type.begin(), type.end(), type.begin(), ::tolower); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            jsonNode["classes"] = type; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return jsonNode; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template<typename ValueType> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modernjson::json DftJsonExporter<ValueType>::translateEdge(std::shared_ptr<DFTGate<ValueType> const> const& gate, DFTElementCPointer const& child, size_t index) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            modernjson::json nodeData; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            std::stringstream stream; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            stream << gate->id() << "e" << child->id(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            nodeData["id"] = stream.str(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            ++currentId; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            nodeData["source"] = gate->id(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            nodeData["target"] = child->id(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            nodeData["index"] = index; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            modernjson::json jsonNode; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            jsonNode["data"] = nodeData; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            jsonNode["group"] = "edges"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            jsonNode["classes"] = ""; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return jsonNode; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        // Explicitly instantiate the class.
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template class DftJsonExporter<double>; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#ifdef STORM_HAVE_CARL
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        template class DftJsonExporter<storm::RationalFunction>; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#endif
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} |