Json Json::copy() const { if (mType == JsonType::Undefined) { return Json(); } else if (mType == JsonType::Object) { Json obj = JsonConst::EmptyObject; std::vector<Map<Json>::Entry> copiedEntries; for (size_t sz = 0; sz < entries->size(); sz++) { copiedEntries.push_back(Map<Json>::Entry(entries->list[sz].key, entries->list[sz].value.copy())); } obj.append(std::move(copiedEntries)); return obj; } else if (mType == JsonType::Array) { Json arr = JsonConst::EmptyArray; for (size_t sz = 0; sz < elements->size(); sz++) { arr.append((*elements)[sz].copy()); } return arr; } else if (mType == JsonType::String) { return str; } else if (mType == JsonType::Number) { return number; } else if (mType == JsonType::Boolean) { return boolean; } else if (mType == JsonType::Null) { return JsonConst::Null; } }
int main() { Json json; json = JsonConst::EmptyObject; json["foo"] = 7; json["baa"] = JsonConst::FALSE; json.take("foo"); std::cout << json.size() << "\n"; std::cout << JsonWriter(json).buffer.data() << "\n"; std::cout << "\n"; json = JsonConst::EmptyArray; json.append( 1); json.append( 2); json.append( 3); json.take(2); Json taken = json.take(0); std::cout << "At 0: " << taken.toDouble() << "\n"; std::cout << JsonWriter(json).buffer.data() << "\n"; }
void update() { Json windows = JsonConst::EmptyArray; Map<JsonResource::ptr> newResources; for (const WindowInfo& windowInfo: WindowInfo::normalWindows()) { std::string path = "/window/" + std::to_string(windowInfo.window); newResources[path] = buildWindowResource(windowInfo); windows.append(path.substr(1)); RunningAppsIcons* icons = dynamic_cast<RunningAppsIcons*>(ResourceCollection::prefixMapping("/icons")); icons->addIcon(windowInfo.iconName.data(), windowInfo.icon); } newResources["/display"] = std::make_unique<JsonResource>(buildDisplay()); newResources["/windows"] = std::make_unique<JsonResource>(std::move(windows)); jsonResources.updateCollection(std::move(newResources)); }