Browse Source
Tried to pave the way for generic blocks for decompositions, but I don't know whether this is the way to go.
Tried to pave the way for generic blocks for decompositions, but I don't know whether this is the way to go.
Former-commit-id: 4a7b51f33c
tempestpy_adaptions
dehnert
10 years ago
10 changed files with 225 additions and 37 deletions
-
2src/modelchecker/reachability/SparseSccModelChecker.cpp
-
49src/storage/Block.cpp
-
93src/storage/Block.h
-
9src/storage/Decomposition.cpp
-
28src/storage/Decomposition.h
-
6src/storage/MaximalEndComponentDecomposition.cpp
-
13src/storage/StronglyConnectedComponent.cpp
-
53src/storage/StronglyConnectedComponent.h
-
2src/storage/StronglyConnectedComponentDecomposition.cpp
-
7src/storage/StronglyConnectedComponentDecomposition.h
@ -0,0 +1,49 @@ |
|||
#include "src/storage/Block.h"
|
|||
|
|||
namespace storm { |
|||
namespace storage { |
|||
Block::iterator Block::begin() { |
|||
return states.begin(); |
|||
} |
|||
|
|||
Block::const_iterator Block::begin() const { |
|||
return states.begin(); |
|||
} |
|||
|
|||
StronglyConnectedComponent::iterator Block::end() { |
|||
return states.end(); |
|||
} |
|||
|
|||
StronglyConnectedComponent::const_iterator Block::end() const { |
|||
return states.end(); |
|||
} |
|||
|
|||
std::size_t Block::size() const { |
|||
return states.size(); |
|||
} |
|||
|
|||
void Block::insert(value_type const& state) { |
|||
states.insert(state); |
|||
} |
|||
|
|||
void Block::erase(value_type const& state) { |
|||
states.erase(state); |
|||
} |
|||
|
|||
bool Block::containsState(value_type const& state) const { |
|||
return this->states.find(state) != this->states.end(); |
|||
} |
|||
|
|||
std::ostream& operator<<(std::ostream& out, StateBlock const& block) { |
|||
out << "{"; |
|||
for (auto const& element : block) { |
|||
out << element << ", "; |
|||
} |
|||
out << "}"; |
|||
return out; |
|||
} |
|||
|
|||
// Explicitly instantiate template.
|
|||
template Block<>; |
|||
} |
|||
} |
@ -0,0 +1,93 @@ |
|||
#ifndef STORM_STORAGE_BLOCK_H_ |
|||
#define STORM_STORAGE_BLOCK_H_ |
|||
|
|||
#include <boost/container/flat_set.hpp> |
|||
|
|||
namespace storm { |
|||
namespace storage { |
|||
|
|||
typedef boost::container::flat_set<uint_fast64_t> 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); |
|||
|
|||
class Block { |
|||
public: |
|||
typedef ContainerType container_type; |
|||
typedef typename container_type::value_type value_type; |
|||
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; |
|||
}; |
|||
} |
|||
} |
|||
|
|||
#endif /* STORM_STORAGE_BLOCK_H_ */ |
@ -0,0 +1,13 @@ |
|||
#include "src/storage/StronglyConnectedComponent.h"
|
|||
|
|||
namespace storm { |
|||
namespace storage { |
|||
void StronglyConnectedComponent::setIsTrivial(bool trivial) { |
|||
this->isTrivialScc = trivial; |
|||
} |
|||
|
|||
bool StronglyConnectedComponent::isTrivial() const { |
|||
return isTrivialScc; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,53 @@ |
|||
#ifndef STORM_STORAGE_STRONGLYCONNECTEDCOMPONENT_H_ |
|||
#define STORM_STORAGE_STRONGLYCONNECTEDCOMPONENT_H_ |
|||
|
|||
#include "src/storage/Block.h" |
|||
#include "src/storage/Decomposition.h" |
|||
|
|||
namespace storm { |
|||
namespace storage { |
|||
|
|||
typedef FlatSetStateContainer SccBlock; |
|||
|
|||
/*! |
|||
* This class represents a strongly connected component, i.e., a set of states such that every state can reach |
|||
* every other state. |
|||
*/ |
|||
class StronglyConnectedComponent : public Block<SccBlock> { |
|||
public: |
|||
typedef SccBlock block_type; |
|||
typedef block_type::value_type value_type; |
|||
typedef block_type::iterator iterator; |
|||
typedef block_type::const_iterator const_iterator; |
|||
|
|||
/*! |
|||
* Creates an empty strongly connected component. |
|||
*/ |
|||
StronglyConnectedComponent(); |
|||
|
|||
/*! |
|||
* Sets whether this SCC is trivial or not. |
|||
* |
|||
* @param trivial A flag indicating whether this SCC is trivial or not. |
|||
*/ |
|||
void setIsTrivial(bool trivial); |
|||
|
|||
/*! |
|||
* Retrieves whether this SCC is trivial. |
|||
* |
|||
* @return True iff this SCC is trivial. |
|||
*/ |
|||
bool isTrivial() const; |
|||
|
|||
private: |
|||
// Stores whether this SCC is trivial. |
|||
bool isTrivialScc; |
|||
|
|||
// The states in this SCC. |
|||
block_type states; |
|||
}; |
|||
|
|||
} |
|||
} |
|||
|
|||
#endif /* STORM_STORAGE_STRONGLYCONNECTEDCOMPONENT_H_ */ |
Write
Preview
Loading…
Cancel
Save
Reference in new issue