absl::string_view NextKeyOrValue(absl::string_view& s) {
absl::string_view::size_type separator_pos = s.find('/');
if (separator_pos == absl::string_view::npos) { // Missing separator '/' after field trial key or value. return"";
}
absl::string_view result = s.substr(0, separator_pos);
s.remove_prefix(separator_pos + 1); return result;
}
bool Parse(absl::string_view s,
flat_map<std::string, std::string>& key_value_map) { while (!s.empty()) {
absl::string_view key = NextKeyOrValue(s);
absl::string_view value = NextKeyOrValue(s);
if (key.empty() || value.empty()) { return false;
}
auto it = key_value_map.emplace(key, value).first;
if (it->second != value) { // Duplicate trials with different values is not fine. return false;
}
} returntrue;
}
} // namespace
absl_nullable std::unique_ptr<FieldTrials> FieldTrials::Create(
absl::string_view s) {
flat_map<std::string, std::string> key_value_map;
if (!Parse(s, key_value_map)) { return nullptr;
} // Using `new` to access a private constructor. return absl::WrapUnique(new FieldTrials(std::move(key_value_map)));
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.