16 STORM_LOG_THROW(variable.getType().isArrayType(), storm::exceptions::NotSupportedException,
"Expecting an array Variable");
21 return arrayIndexVector.empty();
25 return variable->getType().isArrayType();
37 return isArrayAccess() && variable->getType().asArrayType().getNestingDegree() == arrayIndexVector.size();
42 return arrayIndexVector;
47 return arrayIndexVector;
51 STORM_LOG_ASSERT(
isArray(),
"Tried to check for variables in the array index of an LValue that does not refer to an array.");
52 for (
auto const& expr : arrayIndexVector) {
53 if (expr.containsVariables()) {
62 arrayIndexVector = newIndex;
67 arrayIndexVector.push_back(index);
71 return variable->isTransient();
75 auto it = remapping.find(variable);
76 if (it == remapping.end()) {
80 return LValue(it->second, arrayIndexVector);
90 for (
auto const& i : arrayIndexVector) {
91 result +=
"[" + i.toString() +
"]";
111 return std::lexicographical_compare(arrayIndexVector.begin(), arrayIndexVector.end(), other.
getArrayIndexVector().begin(),
122 for (uint64_t i = 0; i < arrayIndexVector.size(); ++i) {
bool isSyntacticallyEqual(storm::expressions::Expression const &expression1, storm::expressions::Expression const &expression2)
bool arrayIndexContainsVariable() const
bool operator==(LValue const &other) const
bool isFullArrayAccess() const
Returns true if the lValue refers to an array access.
std::string getName() const
void addArrayAccessIndex(storm::expressions::Expression const &index)
Adds an array access index.
void setArrayIndex(std::vector< storm::expressions::Expression > const &newIndex)
LValue changeAssignmentVariables(std::map< Variable const *, std::reference_wrapper< Variable const > > const &remapping) const
bool operator<(LValue const &other) const
LValue(storm::jani::Variable const &variable)
bool isArray() const
Returns true if the lValue refers to a variable (potentially of type array).
std::vector< storm::expressions::Expression > & getArrayIndexVector()
Returns the referred variable. In case of an array access, this is the referred array variable.
bool isArrayAccess() const
Returns true if the lValue refers either to an array variable or to an array access.
storm::jani::Variable const & getVariable() const
To check if the array is fully accessed, so result will be of the most inner child Type....
storm::expressions::Variable const & getExpressionVariable() const
Retrieves the associated expression variable.
std::string const & getName() const
Retrieves the name of the variable.
#define STORM_LOG_ASSERT(cond, message)
#define STORM_LOG_THROW(cond, exception, message)
std::ostream & operator<<(std::ostream &stream, Assignment const &assignment)