@@ -1544,59 +1544,59 @@ void URL::Parse(const char* input,
1544
1544
} // NOLINT(readability/fn_size)
1545
1545
1546
1546
// https://url.spec.whatwg.org/#url-serializing
1547
- std::string URL::SerializeURL (const struct url_data * url,
1547
+ std::string URL::SerializeURL (const url_data& url,
1548
1548
bool exclude = false ) {
1549
1549
std::string output;
1550
1550
output.reserve (
1551
- 10 +
1552
- url-> scheme .size () +
1553
- url-> username .size () +
1554
- url-> password .size () +
1555
- url-> host .size () +
1556
- url-> query .size () +
1557
- url-> fragment .size () +
1558
- url-> href .size () +
1551
+ 10 + // We generally insert < 10 separator characters between URL parts
1552
+ url. scheme .size () +
1553
+ url. username .size () +
1554
+ url. password .size () +
1555
+ url. host .size () +
1556
+ url. query .size () +
1557
+ url. fragment .size () +
1558
+ url. href .size () +
1559
1559
std::accumulate (
1560
- url-> path .begin (),
1561
- url-> path .end (),
1560
+ url. path .begin (),
1561
+ url. path .end (),
1562
1562
0 ,
1563
1563
[](size_t sum, const auto & str) { return sum + str.size (); }));
1564
1564
1565
- output += url-> scheme ;
1566
- if (url-> flags & URL_FLAGS_HAS_HOST) {
1565
+ output += url. scheme ;
1566
+ if (url. flags & URL_FLAGS_HAS_HOST) {
1567
1567
output += " //" ;
1568
- if (url-> flags & URL_FLAGS_HAS_USERNAME ||
1569
- url-> flags & URL_FLAGS_HAS_PASSWORD) {
1570
- if (url-> flags & URL_FLAGS_HAS_USERNAME) {
1571
- output += url-> username ;
1568
+ if (url. flags & URL_FLAGS_HAS_USERNAME ||
1569
+ url. flags & URL_FLAGS_HAS_PASSWORD) {
1570
+ if (url. flags & URL_FLAGS_HAS_USERNAME) {
1571
+ output += url. username ;
1572
1572
}
1573
- if (url-> flags & URL_FLAGS_HAS_PASSWORD) {
1574
- output += " :" + url-> password ;
1573
+ if (url. flags & URL_FLAGS_HAS_PASSWORD) {
1574
+ output += " :" + url. password ;
1575
1575
}
1576
1576
output += " @" ;
1577
1577
}
1578
- output += url-> host ;
1579
- if (url-> port != -1 ) {
1580
- output += " :" + std::to_string (url-> port );
1578
+ output += url. host ;
1579
+ if (url. port != -1 ) {
1580
+ output += " :" + std::to_string (url. port );
1581
1581
}
1582
1582
}
1583
- if (url-> flags & URL_FLAGS_CANNOT_BE_BASE) {
1584
- output += url-> path [0 ];
1583
+ if (url. flags & URL_FLAGS_CANNOT_BE_BASE) {
1584
+ output += url. path [0 ];
1585
1585
} else {
1586
- if (!(url-> flags & URL_FLAGS_HAS_HOST) &&
1587
- url-> path .size () > 1 &&
1588
- url-> path [0 ].empty ()) {
1586
+ if (!(url. flags & URL_FLAGS_HAS_HOST) &&
1587
+ url. path .size () > 1 &&
1588
+ url. path [0 ].empty ()) {
1589
1589
output += " /." ;
1590
1590
}
1591
- for (size_t i = 1 ; i < url-> path .size (); i++) {
1592
- output += " /" + url-> path [i];
1591
+ for (size_t i = 1 ; i < url. path .size (); i++) {
1592
+ output += " /" + url. path [i];
1593
1593
}
1594
1594
}
1595
- if (url-> flags & URL_FLAGS_HAS_QUERY) {
1596
- output += " ?" + url-> query ;
1595
+ if (url. flags & URL_FLAGS_HAS_QUERY) {
1596
+ output += " ?" + url. query ;
1597
1597
}
1598
- if (!exclude && url-> flags & URL_FLAGS_HAS_FRAGMENT) {
1599
- output += " #" + url-> fragment ;
1598
+ if (!exclude && ( url. flags & URL_FLAGS_HAS_FRAGMENT) ) {
1599
+ output += " #" + url. fragment ;
1600
1600
}
1601
1601
output.shrink_to_fit ();
1602
1602
return output;
0 commit comments