6 changed files with 178 additions and 2 deletions
			
			
		- 
					4src/storm/storage/jani/Automaton.cpp
- 
					2src/storm/storage/jani/Automaton.h
- 
					6src/storm/storage/jani/EdgeContainer.cpp
- 
					2src/storm/storage/jani/EdgeContainer.h
- 
					130src/storm/storage/jani/traverser/JaniTraverser.cpp
- 
					36src/storm/storage/jani/traverser/JaniTraverser.h
| @ -0,0 +1,130 @@ | |||
| #include "storm/storage/jani/traverser/JaniTraverser.h"
 | |||
| 
 | |||
| 
 | |||
| namespace storm { | |||
|     namespace jani { | |||
|         void JaniTraverser::traverse(Model const& model, boost::any& data) const { | |||
|             for (auto const& act : model.getActions()) { | |||
|                 traverse(act, data); | |||
|             } | |||
|             for (auto const& c : model.getConstants()) { | |||
|                 traverse(c, data); | |||
|             } | |||
|             traverse(model.getGlobalVariables(), data); | |||
|             for (auto const& aut : model.getAutomata()) { | |||
|                 traverse(aut, data); | |||
|             } | |||
|             traverse(model.getInitialStatesRestriction(), data); | |||
|         } | |||
|          | |||
|         void JaniTraverser::traverse(Action const& action, boost::any& data) const { | |||
|             // Intentionally left empty.
 | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(Automaton const& automaton, boost::any& data) const { | |||
|             traverse(automaton.getVariables(), data); | |||
|             for (auto const& loc : automaton.getLocations()) { | |||
|                 traverse(loc, data); | |||
|             } | |||
|             traverse(automaton.getEdgeContainer(), data); | |||
|             traverse(automaton.getInitialStatesRestriction(), data); | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(Constant const& constant, boost::any& data) const { | |||
|             traverse(constant.getExpression(), data); | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(VariableSet const& variableSet, boost::any& data) const { | |||
|             for (auto const& v : variableSet.getBooleanVariables()) { | |||
|                 traverse(v, data); | |||
|             } | |||
|             for (auto const& v : variableSet.getBoundedIntegerVariables()) { | |||
|                 traverse(v, data); | |||
|             } | |||
|             for (auto const& v : variableSet.getUnboundedIntegerVariables()) { | |||
|                 traverse(v, data); | |||
|             } | |||
|             for (auto const& v : variableSet.getRealVariables()) { | |||
|                 traverse(v, data); | |||
|             } | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(Location const& location, boost::any& data) const { | |||
|             traverse(location.getAssignments(), data) | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(BooleanVariable const& variable, boost::any& data) const { | |||
|             if (variable.hasInitExpression()) { | |||
|                 traverse(variable.getInitExpression()); | |||
|             } | |||
|         } | |||
|          | |||
|         void JaniTraverser::traverse(BoundedIntegerVariable const& variable, boost::any& data) const { | |||
|             if (variable.hasInitExpression()) { | |||
|                 traverse(variable.getInitExpression()); | |||
|             } | |||
|             traverse(variable.getLowerBound()); | |||
|             traverse(variable.getUpperBound()); | |||
|         } | |||
|          | |||
|         void JaniTraverser::traverse(UnboundedIntegerVariable const& variable, boost::any& data) const { | |||
|             if (variable.hasInitExpression()) { | |||
|                 traverse(variable.getInitExpression()); | |||
|             } | |||
|         } | |||
|          | |||
|         void JaniTraverser::traverse(RealVariable const& variable, boost::any& data) const { | |||
|              if (variable.hasInitExpression()) { | |||
|                 traverse(variable.getInitExpression()); | |||
|             } | |||
|         } | |||
|          | |||
|         void JaniTraverser::traverse(EdgeContainer const& edgeContainer, boost::any& data) const { | |||
|             for (auto const& templateEdge : edgeContainer.getTemplateEdges()) { | |||
|                 traverse(templateEdge, data); | |||
|             } | |||
|             for (auto const& concreteEdge : edgeContainer.getConcreteEdges()) { | |||
|                 traverse(concreteEdge, data); | |||
|             } | |||
|         } | |||
|          | |||
|         void JaniTraverser::traverse(TemplateEdge const& templateEdge, boost::any& data) const { | |||
|             traverse(templateEdge.getGuard(), data); | |||
|             for (auto const& dest : templateEdge.getDestinations()) { | |||
|                 traverse(dest, data); | |||
|             } | |||
|             traverse(templateEdge.getAssignments(), data); | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(TemplateEdgeDestination const& templateEdgeDestination, boost::any& data) const { | |||
|             traverse(templateEdgeDestination.getOrderedAssignments(), data); | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(Edge const& edge, boost::any& data) const { | |||
|             traverse(edge.getRate(), data); | |||
|             for (auto const& dest : edge.getDestinations()) { | |||
|                 traverse(dest, data); | |||
|             } | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(EdgeDestination const& edgeDestination, boost::any& data) const { | |||
|             traverse(edgeDestination.getProbability()); | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(OrderedAssignments const& orderedAssignments, boost::any& data) const { | |||
|             for (auto const& assignment : orderedAssignments) { | |||
|                 traverse(assignment, data); | |||
|             } | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(Assignment const& assignment, boost::any& data) const { | |||
|             traverse(assignment.getAssignedExpression(), data); | |||
|         } | |||
|              | |||
|         void JaniTraverser::traverse(storm::expressions::Expression const& expression, boost::any& data) const { | |||
|             // intentionally left empty.
 | |||
|         } | |||
|                  | |||
|     } | |||
| } | |||
| 
 | |||
| @ -0,0 +1,36 @@ | |||
| #pragma once | |||
| 
 | |||
| 
 | |||
| #include <boost/any.hpp> | |||
| 
 | |||
| #include "storm/storage/jani/Model.h" | |||
| 
 | |||
| namespace storm { | |||
|     namespace jani { | |||
|         class JaniTraverser { | |||
|         public: | |||
|             virtual ~JaniTraverser() = default; | |||
|              | |||
|             virtual void traverse(Model const& model, boost::any& data) const; | |||
|              | |||
|             virtual void traverse(Action const& action, boost::any& data) const; | |||
|             virtual void traverse(Automaton const& automaton, boost::any& data) const; | |||
|             virtual void traverse(Constant const& constant, boost::any& data) const; | |||
|             virtual void traverse(VariableSet const& variableSet, boost::any& data) const; | |||
|             virtual void traverse(Location const& location, boost::any& data) const; | |||
|             virtual void traverse(BooleanVariable const& variable, boost::any& data) const; | |||
|             virtual void traverse(BoundedIntegerVariable const& variable, boost::any& data) const; | |||
|             virtual void traverse(UnboundedIntegerVariable const& variable, boost::any& data) const; | |||
|             virtual void traverse(RealVariable const& variable, boost::any& data) const; | |||
|             virtual void traverse(EdgeContainer const& edgeContainer, boost::any& data) const; | |||
|             virtual void traverse(TemplateEdge const& templateEdge, boost::any& data) const; | |||
|             virtual void traverse(TemplateEdgeDestination const& templateEdgeDestination, boost::any& data) const; | |||
|             virtual void traverse(Edge const& edge, boost::any& data) const; | |||
|             virtual void traverse(EdgeDestination const& edgeDestination, boost::any& data) const; | |||
|             virtual void traverse(OrderedAssignments const& orderedAssignments, boost::any& data) const; | |||
|             virtual void traverse(Assignment const& assignment, boost::any& data) const; | |||
|             virtual void traverse(storm::expressions::Expression const& expression, boost::any& data) const; | |||
|         }; | |||
|     } | |||
| } | |||
| 
 | |||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue