| 
					
					
						
							
						
					
					
				 | 
				@ -243,6 +243,37 @@ namespace storm { | 
			
		
		
	
		
			
				 | 
				 | 
				            return false; | 
				 | 
				 | 
				            return false; | 
			
		
		
	
		
			
				 | 
				 | 
				        } | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				         | 
				 | 
				 | 
				         | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        template<typename ValueType> | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        bool DFTState<ValueType>::orderBySymmetry() { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            bool changed = false; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            for (size_t pos = 0; pos < mStateGenerationInfo.getSymmetrySize(); ++pos) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                // Check each symmetry
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                size_t length = mStateGenerationInfo.getSymmetryLength(pos); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                std::vector<size_t> symmetryIndices = mStateGenerationInfo.getSymmetryIndices(pos); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                // Sort symmetry group in decreasing order by bubble sort
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                // TODO use better algorithm?
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                size_t tmp, elem1, elem2; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                size_t n = symmetryIndices.size(); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                do { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    tmp = 0; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    for (size_t i = 1; i < n; ++i) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                        elem1 = mStatus.getAsInt(symmetryIndices[i-1], length); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                        elem2 = mStatus.getAsInt(symmetryIndices[i], length); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                        if (elem1 > elem2) { | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            // Swap elements
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            mStatus.setFromInt(symmetryIndices[i-1], length, elem2); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            mStatus.setFromInt(symmetryIndices[i], length, elem1); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            tmp = i; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                            changed = true; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                        } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                    n = tmp; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				                } while (n > 0); | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            return changed; | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        } | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				        // Explicitly instantiate the class.
 | 
				 | 
				 | 
				        // Explicitly instantiate the class.
 | 
			
		
		
	
		
			
				 | 
				 | 
				        template class DFTState<double>; | 
				 | 
				 | 
				        template class DFTState<double>; | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |