91 lines
3.2 KiB

#pragma once
#include <cstdint>
#include "src/builder/jit/Distribution.h"
namespace storm {
namespace builder {
namespace jit {
template <typename IndexType, typename ValueType>
class Choice {
public:
/*!
* Creates a new probabilistic/Markovian choice.
*/
Choice(bool markovian = false);
/*!
* Marks the choice as being Markovian (rather than probabilistic).
*/
void setMarkovian(bool value);
/*!
* Retrieves whether the choice is Markovian.
*/
bool isMarkovian() const;
void add(DistributionEntry<IndexType, ValueType> const& entry);
void add(IndexType const& index, ValueType const& value);
void add(Choice<IndexType, ValueType>&& choice);
Distribution<IndexType, ValueType> const& getDistribution() const;
void divideDistribution(ValueType const& value);
/*!
* Adds the given value to the reward associated with this choice.
*/
void addReward(ValueType const& value);
/*!
* Adds the given value to the reward with the given index of this choice.
*/
void addReward(uint64_t index, ValueType const& value);
/*!
* Adds the given choices rewards to this choice.
*/
void addRewards(std::vector<ValueType>&& values);
/*!
* Retrieves the rewards for this choice.
*/
std::vector<ValueType> const& getRewards() const;
/*!
* Sets the given values as the rewards of this choice.
*/
void setRewards(std::vector<ValueType>&& rewards);
/*!
* Resizes the rewards to the desired size and filles newly created values the zero value of the value type.
*/
void resizeRewards(std::size_t numberOfRewards);
/*!
* Retrieves the number of rewards of this choice.
*/
std::size_t getNumberOfRewards() const;
/*!
* Compresses the underlying distribution.
*/
void compress();
private:
Distribution<IndexType, ValueType>& getMutableDistribution();
/// The distribution of this choice.
Distribution<IndexType, ValueType> distribution;
/// The reward values associated with this choice.
std::vector<ValueType> rewards;
/// A flag storing whether this choice is Markovian.
bool markovian;
};
}
}
}