You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							158 lines
						
					
					
						
							6.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							158 lines
						
					
					
						
							6.1 KiB
						
					
					
				| #ifndef STORM_STORAGE_MAXIMALENDCOMPONENT_H_ | |
| #define STORM_STORAGE_MAXIMALENDCOMPONENT_H_ | |
|  | |
| #include <unordered_map> | |
| #include <boost/container/flat_set.hpp> | |
|  | |
| #include "src/storage/sparse/StateType.h" | |
|  | |
| namespace storm { | |
|     namespace storage { | |
|          | |
|         /*! | |
|          * This class represents a maximal end-component of a nondeterministic model. | |
|          */ | |
|         class MaximalEndComponent { | |
|         public: | |
|             typedef boost::container::flat_set<sparse::state_type> set_type; | |
|             typedef std::unordered_map<uint_fast64_t, set_type> map_type; | |
|             typedef map_type::iterator iterator; | |
|             typedef map_type::const_iterator const_iterator; | |
|              | |
|             /*! | |
|              * Creates an empty MEC. | |
|              */ | |
|             MaximalEndComponent(); | |
|              | |
|             /*! | |
|              * Creates an MEC by copying the given one. | |
|              * | |
|              * @param other The MEC to copy. | |
|              */ | |
|             MaximalEndComponent(MaximalEndComponent const& other); | |
|              | |
|             /*! | |
|              * Assigns the contents of the given MEC to the current one via copying. | |
|              * | |
|              * @param other The MEC whose contents to copy. | |
|              */ | |
|             MaximalEndComponent& operator=(MaximalEndComponent const& other); | |
|              | |
|             /*! | |
|              * Creates an MEC by moving the given one. | |
|              * | |
|              * @param other The MEC to move. | |
|              */ | |
|             MaximalEndComponent(MaximalEndComponent&& other); | |
|              | |
|             /*! | |
|              * Assigns the contents of the given MEC to the current one via moving. | |
|              * | |
|              * @param other The MEC whose contents to move. | |
|              */ | |
|             MaximalEndComponent& operator=(MaximalEndComponent&& other); | |
|              | |
|             /*! | |
|              * Adds the given state and the given choices to the MEC. | |
|              * | |
|              * @param state The state for which to add the choices. | |
|              * @param choices The choices to add for the state. | |
|              */ | |
|             void addState(uint_fast64_t state, set_type const& choices); | |
| 
 | |
|             /*! | |
|              * Adds the given state and the given choices to the MEC. | |
|              * | |
|              * @param state The state for which to add the choices. | |
|              * @param choices The choices to add for the state. | |
|              */ | |
|             void addState(uint_fast64_t state, set_type&& choices); | |
|              | |
|             /*! | |
|              * Retrieves the choices for the given state that are contained in this MEC under the assumption that the | |
|              * state is in the MEC. | |
|              * | |
|              * @param state The state for which to retrieve the choices. | |
|              * @return A set of choices of the state in the MEC. | |
|              */ | |
|             set_type const& getChoicesForState(uint_fast64_t state) const; | |
|              | |
|             /*! | |
|              * Retrieves the choices for the given state that are contained in this MEC under the assumption that the | |
|              * state is in the MEC. | |
|              * | |
|              * @param state The state for which to retrieve the choices. | |
|              * @return A set of choices of the state in the MEC. | |
|              */ | |
|             set_type& getChoicesForState(uint_fast64_t state); | |
|              | |
|             /*! | |
|              * Removes the given state and all of its choices from the MEC. | |
|              * | |
|              * @param state The state to remove froom the MEC. | |
|              */ | |
|             void removeState(uint_fast64_t state); | |
|              | |
|             /*! | |
|              * Retrieves whether the given state is contained in this MEC. | |
|              * | |
|              * @param state The state for which to query membership in the MEC. | |
|              * @return True if the given state is contained in the MEC. | |
|              */ | |
|             bool containsState(uint_fast64_t state) const; | |
|              | |
|             /*! | |
|              * Retrieves whether the given choice for the given state is contained in the MEC. | |
|              * | |
|              * @param state The state for which to check whether the given choice is contained in the MEC. | |
|              * @param choice The choice for which to check whether it is contained in the MEC. | |
|              * @return True if the given choice is contained in the MEC. | |
|              */ | |
|             bool containsChoice(uint_fast64_t state, uint_fast64_t choice) const; | |
|              | |
|             /*! | |
|              * Retrieves the set of states contained in the MEC. | |
|              * | |
|              * @return The set of states contained in the MEC. | |
|              */ | |
|             set_type getStateSet() const; | |
|              | |
|             /*! | |
|              * Retrieves an iterator that points to the first state and its choices in the MEC. | |
|              * | |
|              * @return An iterator that points to the first state and its choices in the MEC. | |
|              */ | |
|             iterator begin(); | |
|              | |
|             /*! | |
|              * Retrieves an iterator that points past the last state and its choices in the MEC. | |
|              * | |
|              * @return An iterator that points past the last state and its choices in the MEC. | |
|              */ | |
|             iterator end(); | |
|              | |
|             /*! | |
|              * Retrieves an iterator that points to the first state and its choices in the MEC. | |
|              * | |
|              * @return An iterator that points to the first state and its choices in the MEC. | |
|              */ | |
|             const_iterator begin() const; | |
|              | |
|             /*! | |
|              * Retrieves an iterator that points past the last state and its choices in the MEC. | |
|              * | |
|              * @return An iterator that points past the last state and its choices in the MEC. | |
|              */ | |
|             const_iterator end() const; | |
|              | |
|             // Declare the streaming operator as a friend function. | |
|             friend std::ostream& operator<<(std::ostream& out, MaximalEndComponent const& component); | |
|              | |
|         private: | |
|             // This stores the mapping from states contained in the MEC to the choices in this MEC. | |
|             map_type stateToChoicesMapping; | |
|         }; | |
|     } | |
| } | |
| 
 | |
| #endif /* STORM_STORAGE_MAXIMALENDCOMPONENT_H_ */
 |