1#ifndef STORM_STORAGE_BISIMULATION_PARTITION_H_
2#define STORM_STORAGE_BISIMULATION_PARTITION_H_
14namespace bisimulation {
16template<
typename DataType>
39 boost::optional<storm::storage::sparse::state_type> representativeProb1State);
48 std::size_t
size()
const;
64 bool updatePositions =
true);
68 uint_fast64_t startIndex, uint_fast64_t endIndex,
103 std::vector<std::unique_ptr<Block<DataType>>>
const&
getBlocks()
const;
106 std::vector<std::unique_ptr<Block<DataType>>>&
getBlocks();
115 std::vector<storm::storage::sparse::state_type>::const_iterator
begin(
Block<DataType> const& block)
const;
118 std::vector<storm::storage::sparse::state_type>::iterator
end(
Block<DataType> const& block);
121 std::vector<storm::storage::sparse::state_type>::const_iterator
end(
Block<DataType> const& block)
const;
124 std::vector<storm::storage::sparse::state_type>::iterator
begin();
127 std::vector<storm::storage::sparse::state_type>::const_iterator
begin()
const;
130 std::vector<storm::storage::sparse::state_type>::iterator
end();
133 std::vector<storm::storage::sparse::state_type>::const_iterator
end()
const;
152 std::vector<storm::storage::sparse::state_type>::iterator last);
158 void mapStatesToPositions(std::vector<storm::storage::sparse::state_type>::const_iterator first,
159 std::vector<storm::storage::sparse::state_type>::const_iterator last);
166 std::vector<std::unique_ptr<Block<DataType>>> blocks;
169 std::vector<Block<DataType>*> stateToBlockMapping;
173 std::vector<storm::storage::sparse::state_type> states;
176 std::vector<storm::storage::sparse::state_type> positions;
A bit vector that is internally represented as a vector of 64-bit values.
void sortRange(storm::storage::sparse::state_type beginIndex, storm::storage::sparse::state_type endIndex, std::function< bool(storm::storage::sparse::state_type, storm::storage::sparse::state_type)> const &less, bool updatePositions=true)
storm::storage::sparse::state_type const & getPosition(storm::storage::sparse::state_type state) const
std::pair< typename std::vector< std::unique_ptr< Block< DataType > > >::iterator, bool > splitBlock(Block< DataType > &block, storm::storage::sparse::state_type position)
Block< DataType > & getBlock(storm::storage::sparse::state_type state)
storm::storage::sparse::state_type const & getState(storm::storage::sparse::state_type position) const
void sortBlock(Block< DataType > &block, std::function< bool(storm::storage::sparse::state_type, storm::storage::sparse::state_type)> const &less, bool updatePositions=true)
void splitStates(Block< DataType > &block, storm::storage::BitVector const &states)
void mapStatesToPositions(Block< DataType > const &block)
Partition(Partition const &other)=default
Partition & operator=(Partition &&other)=default
void swapStates(storm::storage::sparse::state_type state1, storm::storage::sparse::state_type state2)
std::vector< std::unique_ptr< Block< DataType > > > const & getBlocks() const
Partition & operator=(Partition const &other)=default
Partition(Partition &&other)=default
bool split(std::function< bool(storm::storage::sparse::state_type, storm::storage::sparse::state_type)> const &less, std::function< void(Block< DataType > &)> const &newBlockCallback)
std::vector< storm::storage::sparse::state_type >::iterator begin()
void mapStatesToBlock(Block< DataType > &block, std::vector< storm::storage::sparse::state_type >::iterator first, std::vector< storm::storage::sparse::state_type >::iterator last)
void swapStatesAtPositions(storm::storage::sparse::state_type position1, storm::storage::sparse::state_type position2)
std::vector< storm::storage::sparse::state_type >::iterator end()
std::vector< uint_fast64_t > computeRangesOfEqualValue(uint_fast64_t startIndex, uint_fast64_t endIndex, std::function< bool(storm::storage::sparse::state_type, storm::storage::sparse::state_type)> const &less)