|  | @ -242,9 +242,9 @@ namespace storm { | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  |          |  |  |          | 
		
	
		
			
				|  |  |         template<typename ValueType> |  |  |         template<typename ValueType> | 
		
	
		
			
				|  |  |         DeterministicModelBisimulationDecomposition<ValueType>::Partition::Partition(std::size_t numberOfStates, bool keepSilentProbabilities) : stateToBlockMapping(numberOfStates), statesAndValues(numberOfStates), positions(numberOfStates), keepSilentProbabilities(keepSilentProbabilities), silentProbabilities() { |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         DeterministicModelBisimulationDecomposition<ValueType>::Partition::Partition(std::size_t numberOfStates, bool keepSilentProbabilities) : numberOfBlocks(0), stateToBlockMapping(numberOfStates), statesAndValues(numberOfStates), positions(numberOfStates), keepSilentProbabilities(keepSilentProbabilities), silentProbabilities() { | 
		
	
		
			
				|  |  |             // Create the block and give it an iterator to itself.
 |  |  |             // Create the block and give it an iterator to itself.
 | 
		
	
		
			
				|  |  |             typename std::list<Block>::iterator it = blocks.emplace(this->blocks.end(), 0, numberOfStates, nullptr, nullptr, this->blocks.size()); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             typename std::list<Block>::iterator it = blocks.emplace(this->blocks.end(), 0, numberOfStates, nullptr, nullptr, numberOfBlocks++); | 
		
	
		
			
				|  |  |             it->setIterator(it); |  |  |             it->setIterator(it); | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
		
			
				|  |  |             // Set up the different parts of the internal structure.
 |  |  |             // Set up the different parts of the internal structure.
 | 
		
	
	
		
			
				|  | @ -261,8 +261,8 @@ namespace storm { | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  |          |  |  |          | 
		
	
		
			
				|  |  |         template<typename ValueType> |  |  |         template<typename ValueType> | 
		
	
		
			
				|  |  |         DeterministicModelBisimulationDecomposition<ValueType>::Partition::Partition(std::size_t numberOfStates, storm::storage::BitVector const& prob0States, storm::storage::BitVector const& prob1States, std::string const& otherLabel, std::string const& prob1Label, bool keepSilentProbabilities) : stateToBlockMapping(numberOfStates), statesAndValues(numberOfStates), positions(numberOfStates), keepSilentProbabilities(keepSilentProbabilities), silentProbabilities() { |  |  |  | 
		
	
		
			
				|  |  |             typename std::list<Block>::iterator firstIt = blocks.emplace(this->blocks.end(), 0, prob0States.getNumberOfSetBits(), nullptr, nullptr, this->blocks.size()); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |         DeterministicModelBisimulationDecomposition<ValueType>::Partition::Partition(std::size_t numberOfStates, storm::storage::BitVector const& prob0States, storm::storage::BitVector const& prob1States, std::string const& otherLabel, std::string const& prob1Label, bool keepSilentProbabilities) : numberOfBlocks(0), stateToBlockMapping(numberOfStates), statesAndValues(numberOfStates), positions(numberOfStates), keepSilentProbabilities(keepSilentProbabilities), silentProbabilities() { | 
		
	
		
			
				|  |  |  |  |  |             typename std::list<Block>::iterator firstIt = blocks.emplace(this->blocks.end(), 0, prob0States.getNumberOfSetBits(), nullptr, nullptr, numberOfBlocks++); | 
		
	
		
			
				|  |  |             Block& firstBlock = *firstIt; |  |  |             Block& firstBlock = *firstIt; | 
		
	
		
			
				|  |  |             firstBlock.setIterator(firstIt); |  |  |             firstBlock.setIterator(firstIt); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
	
		
			
				|  | @ -275,7 +275,7 @@ namespace storm { | 
		
	
		
			
				|  |  |             } |  |  |             } | 
		
	
		
			
				|  |  |             firstBlock.setAbsorbing(true); |  |  |             firstBlock.setAbsorbing(true); | 
		
	
		
			
				|  |  | 
 |  |  | 
 | 
		
	
		
			
				|  |  |             typename std::list<Block>::iterator secondIt = blocks.emplace(this->blocks.end(), position, position + prob1States.getNumberOfSetBits(), &firstBlock, nullptr, this->blocks.size(), std::shared_ptr<std::string>(new std::string(prob1Label))); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             typename std::list<Block>::iterator secondIt = blocks.emplace(this->blocks.end(), position, position + prob1States.getNumberOfSetBits(), &firstBlock, nullptr, numberOfBlocks++, std::shared_ptr<std::string>(new std::string(prob1Label))); | 
		
	
		
			
				|  |  |             Block& secondBlock = *secondIt; |  |  |             Block& secondBlock = *secondIt; | 
		
	
		
			
				|  |  |             secondBlock.setIterator(secondIt); |  |  |             secondBlock.setIterator(secondIt); | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
	
		
			
				|  | @ -287,7 +287,7 @@ namespace storm { | 
		
	
		
			
				|  |  |             } |  |  |             } | 
		
	
		
			
				|  |  |             secondBlock.setAbsorbing(true); |  |  |             secondBlock.setAbsorbing(true); | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
		
			
				|  |  |             typename std::list<Block>::iterator thirdIt = blocks.emplace(this->blocks.end(), position, numberOfStates, &secondBlock, nullptr, this->blocks.size(), otherLabel == "true" ? std::shared_ptr<std::string>(nullptr) : std::shared_ptr<std::string>(new std::string(otherLabel))); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             typename std::list<Block>::iterator thirdIt = blocks.emplace(this->blocks.end(), position, numberOfStates, &secondBlock, nullptr, numberOfBlocks++, otherLabel == "true" ? std::shared_ptr<std::string>(nullptr) : std::shared_ptr<std::string>(new std::string(otherLabel))); | 
		
	
		
			
				|  |  |             Block& thirdBlock = *thirdIt; |  |  |             Block& thirdBlock = *thirdIt; | 
		
	
		
			
				|  |  |             thirdBlock.setIterator(thirdIt); |  |  |             thirdBlock.setIterator(thirdIt); | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
	
		
			
				|  | @ -408,7 +408,7 @@ namespace storm { | 
		
	
		
			
				|  |  |             } |  |  |             } | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
		
			
				|  |  |             // Actually create the new block and insert it at the correct position.
 |  |  |             // Actually create the new block and insert it at the correct position.
 | 
		
	
		
			
				|  |  |             typename std::list<Block>::iterator selfIt = this->blocks.emplace(block.getIterator(), block.getBegin(), position, block.getPreviousBlockPointer(), &block, this->blocks.size(), block.getLabelPtr()); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             typename std::list<Block>::iterator selfIt = this->blocks.emplace(block.getIterator(), block.getBegin(), position, block.getPreviousBlockPointer(), &block, numberOfBlocks++, block.getLabelPtr()); | 
		
	
		
			
				|  |  |             selfIt->setIterator(selfIt); |  |  |             selfIt->setIterator(selfIt); | 
		
	
		
			
				|  |  |             Block& newBlock = *selfIt; |  |  |             Block& newBlock = *selfIt; | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
	
		
			
				|  | @ -432,7 +432,7 @@ namespace storm { | 
		
	
		
			
				|  |  |             } |  |  |             } | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
		
			
				|  |  |             // Actually insert the new block.
 |  |  |             // Actually insert the new block.
 | 
		
	
		
			
				|  |  |             typename std::list<Block>::iterator it = this->blocks.emplace(block.getIterator(), begin, block.getBegin(), block.getPreviousBlockPointer(), &block, this->blocks.size()); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             typename std::list<Block>::iterator it = this->blocks.emplace(block.getIterator(), begin, block.getBegin(), block.getPreviousBlockPointer(), &block, numberOfBlocks++); | 
		
	
		
			
				|  |  |             Block& newBlock = *it; |  |  |             Block& newBlock = *it; | 
		
	
		
			
				|  |  |             newBlock.setIterator(it); |  |  |             newBlock.setIterator(it); | 
		
	
		
			
				|  |  |              |  |  |              | 
		
	
	
		
			
				|  | @ -570,13 +570,13 @@ namespace storm { | 
		
	
		
			
				|  |  |                 } |  |  |                 } | 
		
	
		
			
				|  |  |                 std::cout << std::endl; |  |  |                 std::cout << std::endl; | 
		
	
		
			
				|  |  |             } |  |  |             } | 
		
	
		
			
				|  |  |             std::cout << "size: " << this->blocks.size() << std::endl; |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             std::cout << "size: " << numberOfBlocks << std::endl; | 
		
	
		
			
				|  |  |             assert(this->check()); |  |  |             assert(this->check()); | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  |          |  |  |          | 
		
	
		
			
				|  |  |         template<typename ValueType> |  |  |         template<typename ValueType> | 
		
	
		
			
				|  |  |         std::size_t DeterministicModelBisimulationDecomposition<ValueType>::Partition::size() const { |  |  |         std::size_t DeterministicModelBisimulationDecomposition<ValueType>::Partition::size() const { | 
		
	
		
			
				|  |  |             return this->blocks.size(); |  |  |  | 
		
	
		
			
				|  |  |  |  |  |             return numberOfBlocks; | 
		
	
		
			
				|  |  |         } |  |  |         } | 
		
	
		
			
				|  |  |          |  |  |          | 
		
	
		
			
				|  |  |         template<typename ValueType> |  |  |         template<typename ValueType> | 
		
	
	
		
			
				|  | 
 |