/// @brief Load MRU Lists. /// @param key List name. /// @param array json::Array of values. void MRUManager::Load(std::string const& key, const json::Array& array) { try { copy(array.begin(), array.end(), back_inserter(mru[key])); } catch (json::Exception const&) { // Out of date MRU file; just discard the data and skip it } Prune(key, mru[key]); }
// extract a set of FilePath object from a list of home path relative strings Error extractFilePaths(const json::Array& files, std::vector<FilePath>* pFilePaths) { for(json::Array::const_iterator it = files.begin(); it != files.end(); ++it) { if (it->type() != json::StringType) return Error(json::errc::ParamTypeMismatch, ERROR_LOCATION); std::string file = it->get_str() ; pFilePaths->push_back(module_context::resolveAliasedPath(file)) ; } return Success() ; }
static json::Object createFileLocation(const FileEntry &FE, json::Array &Files) { std::string FileURI = fileNameToURI(getFileName(FE)); // See if the Files array contains this URI already. If it does not, create // a new file object to add to the array. auto I = llvm::find_if(Files, [&](const json::Value &File) { if (const json::Object *Obj = File.getAsObject()) { if (const json::Object *FileLoc = Obj->getObject("fileLocation")) { Optional<StringRef> URI = FileLoc->getString("uri"); return URI && URI->equals(FileURI); } } return false; }); // Calculate the index within the file location array so it can be stored in // the JSON object. auto Index = static_cast<unsigned>(std::distance(Files.begin(), I)); if (I == Files.end()) Files.push_back(createFile(FE)); return json::Object{{"uri", FileURI}, {"fileIndex", Index}}; }