12#ifdef MCRL2_ENABLE_SYLVAN
32std::ostream&
operator<<(std::ostream& stream,
const symbolic_lts& lts)
34 std::shared_ptr<utilities::obitstream> bitstream = std::make_shared<utilities::obitstream>(stream);
37 symbolic::binary_ldd_ostream ldd_stream(bitstream);
42 aterm_stream << symbolic_labelled_transition_system_mark();
43 aterm_stream << lts.data_spec;
44 aterm_stream << lts.process_parameters;
46 ldd_stream << lts.initial_state;
47 ldd_stream << lts.states;
50 for (
const auto& index : lts.data_index)
52 bitstream->write_integer(index.size());
54 for (
const auto& term : index)
61 bitstream->write_integer(lts.action_index.size());
62 for (
const auto& term : lts.action_index)
68 bitstream->write_integer(lts.summand_groups.size());
69 for (
const auto& group : lts.summand_groups)
71 bitstream->write_integer(group.read_parameters.size());
72 for (
const auto& parameter : group.read_parameters)
74 aterm_stream << parameter;
77 bitstream->write_integer(group.write_parameters.size());
78 for (
const auto& parameter : group.write_parameters)
80 aterm_stream << parameter;
82 ldd_stream << group.L;
88std::istream&
operator>>(std::istream& stream, symbolic_lts& lts)
90 std::shared_ptr<utilities::ibitstream> bitstream = std::make_shared<utilities::ibitstream>(stream);
93 symbolic::binary_ldd_istream ldd_stream(bitstream);
99 aterm_stream >> marker;
101 if (marker != symbolic_labelled_transition_system_mark())
103 throw mcrl2::runtime_error(
"Stream does not contain a symbolic labelled transition system (SLTS).");
106 aterm_stream >> lts.data_spec;
107 aterm_stream >> lts.process_parameters;
108 ldd_stream >> lts.initial_state;
109 ldd_stream >> lts.states;
112 lts.data_index.clear();
115 lts.data_index.push_back(parameter.sort());
117 std::size_t number_of_entries = bitstream->read_integer();
118 for (std::size_t i = 0; i < number_of_entries; ++i)
121 aterm_stream >>
value;
123 auto [result, inserted] = lts.data_index.back().insert(value);
129 std::size_t number_of_action_labels = bitstream->read_integer();
130 lts.action_index.clear();
132 for (std::size_t i = 0; i < number_of_action_labels; ++i)
135 aterm_stream >>
value;
137 auto [result, inserted] = lts.action_index.insert(value);
142 std::size_t number_of_groups = bitstream->read_integer();
143 lts.summand_groups.clear();
145 for (std::size_t i = 0; i < number_of_groups; ++i)
147 std::size_t number_of_read = bitstream->read_integer();
150 for (
auto& parameter : read_parameters)
152 aterm_stream >> parameter;
155 std::size_t number_of_write = bitstream->read_integer();
158 for (
auto& parameter : write_parameters)
160 aterm_stream >> parameter;
163 lts.summand_groups.emplace_back(lts.process_parameters, read_parameters, write_parameters);
164 ldd_stream >> lts.summand_groups.back().L;
Reads terms from a stream in the steamable binary aterm format.
Writes terms in a streamable binary aterm format to an output stream.
\brief A timed multi-action
Standard exception class for reporting runtime errors.
add your file description here.
atermpp::aterm remove_index_impl(const atermpp::aterm &x)
atermpp::aterm add_index_impl(const atermpp::aterm &x)
NUMERIC_TYPE value(const data_expression &r, typename std::enable_if< std::is_floating_point< NUMERIC_TYPE >::value >::type *=nullptr)
Yields the real value of a data expression.
std::vector< variable > variable_vector
\brief vector of variables
The main namespace for the LPS library.
std::ostream & operator<<(std::ostream &out, const action_summand &x)
std::istream & operator>>(std::istream &is, exploration_strategy &strat)
void mcrl2_unused(T &&...)
Function that can be used to silence unused parameter warnings.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...