diff options
Diffstat (limited to 'examples/corelib/serialization/savegame/level.cpp')
-rw-r--r-- | examples/corelib/serialization/savegame/level.cpp | 55 |
1 files changed, 25 insertions, 30 deletions
diff --git a/examples/corelib/serialization/savegame/level.cpp b/examples/corelib/serialization/savegame/level.cpp index 04edadf7f6..f30d35e57f 100644 --- a/examples/corelib/serialization/savegame/level.cpp +++ b/examples/corelib/serialization/savegame/level.cpp @@ -6,9 +6,7 @@ #include <QJsonArray> #include <QTextStream> -Level::Level(const QString &name) : mName(name) -{ -} +Level::Level(const QString &name) : mName(name) { } QString Level::name() const { @@ -25,46 +23,43 @@ void Level::setNpcs(const QList<Character> &npcs) mNpcs = npcs; } -//! [0] -void Level::read(const QJsonObject &json) +//! [fromJson] +Level Level::fromJson(const QJsonObject &json) { - if (json.contains("name") && json["name"].isString()) - mName = json["name"].toString(); + Level result; + + if (const QJsonValue v = json["name"]; v.isString()) + result.mName = v.toString(); - if (json.contains("npcs") && json["npcs"].isArray()) { - QJsonArray npcArray = json["npcs"].toArray(); - mNpcs.clear(); - mNpcs.reserve(npcArray.size()); - for (int npcIndex = 0; npcIndex < npcArray.size(); ++npcIndex) { - QJsonObject npcObject = npcArray[npcIndex].toObject(); - Character npc; - npc.read(npcObject); - mNpcs.append(npc); - } + if (const QJsonValue v = json["npcs"]; v.isArray()) { + const QJsonArray npcs = v.toArray(); + result.mNpcs.reserve(npcs.size()); + for (const QJsonValue &npc : npcs) + result.mNpcs.append(Character::fromJson(npc.toObject())); } + + return result; } -//! [0] +//! [fromJson] -//! [1] -void Level::write(QJsonObject &json) const +//! [toJson] +QJsonObject Level::toJson() const { + QJsonObject json; json["name"] = mName; QJsonArray npcArray; - for (const Character &npc : mNpcs) { - QJsonObject npcObject; - npc.write(npcObject); - npcArray.append(npcObject); - } + for (const Character &npc : mNpcs) + npcArray.append(npc.toJson()); json["npcs"] = npcArray; + return json; } -//! [1] +//! [toJson] -void Level::print(int indentation) const +void Level::print(QTextStream &s, int indentation) const { const QString indent(indentation * 2, ' '); - QTextStream(stdout) << indent << "Name:\t" << mName << "\n"; - QTextStream(stdout) << indent << "NPCs:\n"; + s << indent << "Name:\t" << mName << "\n" << indent << "NPCs:\n"; for (const Character &character : mNpcs) - character.print(2); + character.print(s, indentation + 1); } |