Line data Source code
1 : //
2 : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com)
3 : //
4 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 : //
7 : // Official repository: https://github.com/cppalliance/http_proto
8 : //
9 :
10 : #include <boost/http_proto/rfc/combine_field_values.hpp>
11 :
12 : namespace boost {
13 : namespace http_proto {
14 :
15 : core::string_view
16 8 : combine_field_values(
17 : fields_view_base::subrange const& vr,
18 : grammar::recycled_ptr<std::string>& temp)
19 : {
20 8 : core::string_view result;
21 8 : bool acquired = false;
22 19 : for(auto s : vr)
23 : {
24 11 : if(s.empty())
25 0 : continue;
26 11 : if(result.empty())
27 : {
28 7 : result = s;
29 : }
30 4 : else if(! acquired)
31 : {
32 3 : acquired = true;
33 3 : if(temp.empty())
34 0 : temp.acquire();
35 3 : temp->clear();
36 3 : temp->reserve(
37 3 : result.size() +
38 3 : 1 + s.size());
39 3 : *temp = result;
40 3 : temp->push_back(',');
41 3 : temp->append(
42 : s.data(), s.size());
43 3 : result = *temp;
44 : }
45 : else
46 : {
47 1 : temp->reserve(
48 1 : temp->size() +
49 1 : 1 + s.size());
50 1 : temp->push_back(',');
51 1 : temp->append(
52 : s.data(), s.size());
53 1 : result = *temp;
54 : }
55 : }
56 8 : return result;
57 : }
58 :
59 : } // http_proto
60 : } // boost
|