Euphoria
stringmerger.cc
Go to the documentation of this file.
1 #include "base/stringmerger.h"
2 
3 #include <string_view>
4 
5 #include "base/stringbuilder.h"
6 
7 
8 namespace eu
9 {
10  std::string
11  StringMerger::merge(const std::vector<std::string>& strings) const
12  {
13  if(strings.empty())
14  {
15  return fmt::format("{}{}{}", start, empty, end);
16  }
17 
18  auto ss = StringBuilder{};
19 
20  ss.add_view(start);
21 
22  const auto count = strings.size();
23  for(std::vector<std::string>::size_type index = 0; index < count; ++index)
24  {
26  ss.add_string(strings[index]);
27 
28  if(index == count - 1)
29  {
31  }
32  else
33  {
34  ss.add_view(after_each);
35  }
36 
37  if(count != index + 1)
38  { // if this item isn't the last one in the list
39  if(count == index + 2)
40  {
42  }
43  else
44  {
45  ss.add_view(separator);
46  }
47  }
48  }
49 
50  ss.add_view(end);
51 
52  return ss.to_string();
53  }
54 }
Definition: assert.h:90
std::string to_string()
Complete the builder and return the resulting string.
StringBuilder & add_view(const std::string_view &str)
StringBuilder & add_string(const std::string &str)
std::string_view end
Definition: stringmerger.h:14
std::string_view final_separator
Definition: stringmerger.h:11
std::string_view start
Definition: stringmerger.h:13
std::string_view before_each
Definition: stringmerger.h:15
std::string_view empty
Definition: stringmerger.h:12
std::string merge(const std::vector< std::string > &strings) const
Definition: stringmerger.cc:11
std::string_view after_each
Definition: stringmerger.h:16
std::string_view separator
Definition: stringmerger.h:10
std::string_view final_after_each
Definition: stringmerger.h:17