ISCORE_PLUGIN_SCENARIO_EXPORT void Visitor<Writer<DataStream>>::writeTo(Scenario::StateModel& s) { // Common metadata writeTo(s.metadata); m_stream >> s.m_eventId >> s.m_previousConstraint >> s.m_nextConstraint >> s.m_heightPercentage; // Message tree Process::MessageNode n; m_stream >> n; s.m_messageItemModel = new Scenario::MessageItemModel{s.m_stack, s, &s}; s.messages() = n; // Processes plugins int32_t process_count; m_stream >> process_count; auto& pl = context.components.factory<Process::StateProcessList>(); for(; process_count -- > 0;) { s.stateProcesses.add(deserialize_interface(pl, *this, &s)); } checkDelimiter(); }
bool DataStreamSerializedComponents::deserializeRemaining( Components& components, QObject* entity) { auto& ctx = score::IDocument::documentContext(*entity); auto& comp_factory = ctx.app.interfaces<score::SerializableComponentFactoryList>(); for (auto it = data.begin(); it != data.end();) { DataStream::Deserializer s{it->second}; auto res = deserialize_interface(comp_factory, s, ctx, entity); if (res) { components.add(res); it = data.erase(it); } else { ++it; } } return data.empty(); }
ISCORE_PLUGIN_SCENARIO_EXPORT void Visitor<Writer<JSONObject>>::writeTo(Scenario::StateModel& s) { // Common metadata s.metadata = fromJsonObject<ModelMetadata>(m_obj["Metadata"]); s.m_eventId = fromJsonValue<Id<Scenario::EventModel>>(m_obj["Event"]); s.m_previousConstraint = fromJsonValue<Id<Scenario::ConstraintModel>>(m_obj["PreviousConstraint"]); s.m_nextConstraint = fromJsonValue<Id<Scenario::ConstraintModel>>(m_obj["NextConstraint"]); s.m_heightPercentage = m_obj["HeightPercentage"].toDouble(); // Message tree s.m_messageItemModel = new Scenario::MessageItemModel{s.m_stack, s, &s}; s.messages() = fromJsonObject<Process::MessageNode>(m_obj["Messages"]); // Processes plugins auto& pl = context.components.factory<Process::StateProcessList>(); QJsonArray process_array = m_obj["StateProcesses"].toArray(); for(const auto& json_vref : process_array) { Deserializer<JSONObject> deserializer{json_vref.toObject()}; s.stateProcesses.add(deserialize_interface(pl, deserializer, &s)); } }