102 lines
3.4 KiB

#ifndef STORM_STORAGE_BLOCK_H_
#define STORM_STORAGE_BLOCK_H_
#include <boost/container/flat_set.hpp>
#include "src/storage/sparse/StateType.h"
namespace storm {
namespace storage {
// Typedef the most common state container
typedef boost::container::flat_set<sparse::state_type> FlatSetStateContainer;
/*!
* Writes a string representation of the state block to the given output stream.
*
* @param out The output stream to write to.
* @param block The block to print to the stream.
* @return The given output stream.
*/
std::ostream& operator<<(std::ostream& out, FlatSetStateContainer const& block);
template <typename ContainerType = FlatSetStateContainer>
class StateBlock {
public:
typedef ContainerType container_type;
typedef typename container_type::value_type value_type;
static_assert(std::is_same<value_type, sparse::state_type>::value, "Illegal value type of container.");
typedef typename container_type::iterator iterator;
typedef typename container_type::const_iterator const_iterator;
/*!
* Returns an iterator to the states in this SCC.
*
* @return An iterator to the states in this SCC.
*/
iterator begin();
/*!
* Returns a const iterator to the states in this SCC.
*
* @return A const iterator to the states in this SCC.
*/
const_iterator begin() const;
/*!
* Returns an iterator that points one past the end of the states in this SCC.
*
* @return An iterator that points one past the end of the states in this SCC.
*/
iterator end();
/*!
* Returns a const iterator that points one past the end of the states in this SCC.
*
* @return A const iterator that points one past the end of the states in this SCC.
*/
const_iterator end() const;
/*!
* Retrieves whether the given state is in the SCC.
*
* @param state The state for which to query membership.
*/
bool containsState(value_type const& state) const;
/*!
* Inserts the given element into this SCC.
*
* @param state The state to add to this SCC.
*/
void insert(value_type const& state);
/*!
* Removes the given element from this SCC.
*
* @param state The element to remove.
*/
void erase(value_type const& state);
/*!
* Retrieves the number of states in this SCC.
*
* @return The number of states in this SCC.
*/
std::size_t size() const;
/*!
* Retrieves whether this SCC is empty.
*
* @return True iff the SCC is empty.
*/
bool empty() const;
private:
// The container that holds the states.
ContainerType states;
};
}
}
#endif /* STORM_STORAGE_BLOCK_H_ */