void Request::add_line_to_multiline_header(const string_view& line, const string_view& header) { auto non_whitespace_pos = line.find_first_not_of("\t "); if (non_whitespace_pos != line.end()) if (!header.empty()) headers_[header.str()] += line.substr(non_whitespace_pos).str(); }
static void parse_elements (string_view name, TypeDesc type, const char *type_code, string_view value, ImageIOParameter ¶m) { int num_items = type.numelements() * type.aggregate; T *data = (T*) param.data(); // Erase any leading whitespace value.remove_prefix (value.find_first_not_of (" \t")); for (int i = 0; i < num_items; ++i) { // Make a temporary copy so we for sure have a 0-terminated string. std::string temp = value; // Grab the first value from it sscanf (temp.c_str(), type_code, &data[i]); // Skip the value (eat until we find a delimiter -- space, comma, tab) value.remove_prefix (value.find_first_of (" ,\t")); // Skip the delimiter value.remove_prefix (value.find_first_not_of (" ,\t")); if (value.empty()) break; // done if nothing left to parse } }
void ltrim(string_view& s) noexcept { const auto pos = s.find_first_not_of(Space); s.remove_prefix(pos != string_view::npos ? pos : s.size()); }