General Utility Library for C++17 26.5.0
cat.h
Go to the documentation of this file.
1
27#ifndef GUL17_CAT_H_
28#define GUL17_CAT_H_
29
30#include <string_view>
31#include <string>
32#include <type_traits>
33
34#include "gul17/internal.h"
35
36namespace gul17 {
37
52{
53public:
54 ConvertingStringView(const std::string &str) : sv_(str) {}
55 ConvertingStringView(std::string_view sv) : sv_(sv) {}
56 ConvertingStringView(const char *str) : sv_(str) {}
57
58 ConvertingStringView(char c) : str_(1, c), sv_(str_) {}
59 ConvertingStringView(int a) : str_(std::to_string(a)), sv_(str_) {}
60 ConvertingStringView(unsigned int a) : str_(std::to_string(a)), sv_(str_) {}
61 ConvertingStringView(long a) : str_(std::to_string(a)), sv_(str_) {}
62 ConvertingStringView(unsigned long a) : str_(std::to_string(a)), sv_(str_) {}
63 ConvertingStringView(long long a) : str_(std::to_string(a)), sv_(str_) {}
64 ConvertingStringView(unsigned long long a) : str_(std::to_string(a)), sv_(str_) {}
65 ConvertingStringView(float a) : str_(std::to_string(a)), sv_(str_) {}
66 ConvertingStringView(double a) : str_(std::to_string(a)), sv_(str_) {}
67
72 const char *data() const noexcept { return sv_.data(); }
73
75 std::size_t length() const noexcept { return sv_.length(); }
76
78 std::size_t size() const noexcept { return sv_.size(); }
79
81 explicit operator std::string() const { return std::string(sv_); };
82
83private:
84 std::string str_;
85 std::string_view sv_;
86};
87
100inline std::string cat() { return std::string(); }
101
103inline std::string cat(const ConvertingStringView& s) { return std::string(s); }
104
106GUL_EXPORT
107std::string cat(const ConvertingStringView& s1, const ConvertingStringView& s2);
108
110GUL_EXPORT
111std::string cat(const ConvertingStringView& s1, const ConvertingStringView& s2,
112 const ConvertingStringView& s3);
113
115GUL_EXPORT
116std::string cat(std::initializer_list<ConvertingStringView> pieces);
117
119template <typename... Args, typename = std::enable_if_t<(sizeof...(Args) > 3)>>
120inline std::string cat(const Args&... args)
121{
122 return cat({ args... }); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay): Impossible to remove that warning
123}
124
126
127} // namespace gul17
128
129#endif
A string view that can automatically convert numbers into strings.
Definition cat.h:52
ConvertingStringView(int a)
Construct a ConvertingStringView from an integer.
Definition cat.h:59
ConvertingStringView(char c)
Construct a ConvertingStringView from a character.
Definition cat.h:58
ConvertingStringView(unsigned int a)
Construct a ConvertingStringView from an unsigned integer.
Definition cat.h:60
ConvertingStringView(const std::string &str)
Construct a ConvertingStringView from a std::string.
Definition cat.h:54
std::size_t length() const noexcept
Return the length of the string.
Definition cat.h:75
ConvertingStringView(const char *str)
Construct a ConvertingStringView from a const char *.
Definition cat.h:56
ConvertingStringView(long a)
Construct a ConvertingStringView from a long integer.
Definition cat.h:61
const char * data() const noexcept
Return a pointer to the internal character buffer.
Definition cat.h:72
ConvertingStringView(std::string_view sv)
Construct a ConvertingStringView from a std::string_view.
Definition cat.h:55
ConvertingStringView(float a)
Construct a ConvertingStringView from a float.
Definition cat.h:65
ConvertingStringView(double a)
Construct a ConvertingStringView from a double.
Definition cat.h:66
ConvertingStringView(unsigned long long a)
Construct a ConvertingStringView from an unsigned long long integer.
Definition cat.h:64
std::size_t size() const noexcept
Return the length of the string.
Definition cat.h:78
ConvertingStringView(unsigned long a)
Construct a ConvertingStringView from an unsigned long integer.
Definition cat.h:62
ConvertingStringView(long long a)
Construct a ConvertingStringView from a long long integer.
Definition cat.h:63
auto constexpr bit_set(unsigned bit) noexcept -> ReturnT
Set a bit in an integral type.
Definition bit_manip.h:124
std::string cat()
Efficiently concatenate an arbitrary number of strings and numbers.
Definition cat.h:100
Definition of macros used internally by GUL.
Namespace gul17 contains all functions and classes of the General Utility Library.
Definition doxygen.h:29