Euphoria
stringmerger.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string_view>
4 
5 
6 namespace eu
7 {
8  struct StringMerger
9  {
10  std::string_view separator;
11  std::string_view final_separator;
12  std::string_view empty;
13  std::string_view start;
14  std::string_view end;
15  std::string_view before_each;
16  std::string_view after_each;
17  std::string_view final_after_each;
18 
19  [[nodiscard]] std::string
20  merge(const std::vector<std::string>& strings) const;
21 
22 
23  constexpr StringMerger&
24  set_separator(const std::string_view& the_separator, const std::string_view& the_final_separator)
25  {
26  separator = the_separator;
27  final_separator = the_final_separator;
28  return *this;
29  }
30 
31  constexpr StringMerger&
32  set_separator(const std::string_view& both)
33  {
34  separator = both;
35  final_separator = both;
36  return *this;
37  }
38 
39  constexpr StringMerger&
40  set_empty(const std::string_view& v)
41  {
42  empty = v;
43  return *this;
44  }
45 
46  constexpr StringMerger&
47  set_start_and_end(const std::string_view& both, const std::string_view& the_end)
48  {
49  start = both;
50  end = the_end;
51  return *this;
52  }
53 
54  constexpr StringMerger&
55  set_start_and_end(const std::string_view& v)
56  {
57  start = v;
58  end = v;
59  return *this;
60  }
61 
62  constexpr StringMerger&
63  set_before_each(const std::string_view& v)
64  {
65  before_each = v;
66  return *this;
67  }
68 
69  constexpr StringMerger&
70  set_after_each(const std::string_view& both)
71  {
72  after_each = both;
73  final_after_each = both;
74  return *this;
75  }
76 
77  constexpr StringMerger&
78  set_after_each(const std::string_view& the_after, const std::string_view& the_final)
79  {
80  after_each = the_after;
81  final_after_each = the_final;
82  return *this;
83  }
84  };
85 
86 
87  namespace string_mergers
88  {
89  constexpr StringMerger english_and = StringMerger{}.set_separator(", ", " and ").set_empty("<none>");
90  constexpr StringMerger english_or = StringMerger{}.set_separator(", ", " or ").set_empty("<none>");
95  }
96 }
97 
constexpr StringMerger english_and
Definition: stringmerger.h:89
constexpr StringMerger english_or
Definition: stringmerger.h:90
constexpr StringMerger function_call
Definition: stringmerger.h:92
constexpr StringMerger comma
Definition: stringmerger.h:94
constexpr StringMerger array
Definition: stringmerger.h:91
constexpr StringMerger space
Definition: stringmerger.h:93
Definition: assert.h:90
constexpr StringMerger & set_before_each(const std::string_view &v)
Definition: stringmerger.h:63
constexpr StringMerger & set_separator(const std::string_view &both)
Definition: stringmerger.h:32
constexpr StringMerger & set_start_and_end(const std::string_view &both, const std::string_view &the_end)
Definition: stringmerger.h:47
constexpr StringMerger & set_after_each(const std::string_view &both)
Definition: stringmerger.h:70
std::string_view end
Definition: stringmerger.h:14
std::string_view final_separator
Definition: stringmerger.h:11
constexpr StringMerger & set_start_and_end(const std::string_view &v)
Definition: stringmerger.h:55
constexpr StringMerger & set_empty(const std::string_view &v)
Definition: stringmerger.h:40
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
constexpr StringMerger & set_separator(const std::string_view &the_separator, const std::string_view &the_final_separator)
Definition: stringmerger.h:24
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
constexpr StringMerger & set_after_each(const std::string_view &the_after, const std::string_view &the_final)
Definition: stringmerger.h:78