summaryrefslogtreecommitdiff
path: root/Source/cmStringAlgorithms.h
diff options
context:
space:
mode:
authorSebastian Holtermann <sebholt@xwmw.org>2019-07-29 17:34:54 +0200
committerSebastian Holtermann <sebholt@xwmw.org>2019-08-01 11:45:04 +0200
commite5d3ea22d49e6d85082306d1f73d0689a3fbca81 (patch)
tree49cb6cfcea887454bddab8e6cc79883a3351139d /Source/cmStringAlgorithms.h
parenta7d0fe9c24e111bc4f325d608b31fdf394c24602 (diff)
downloadcmake-e5d3ea22d49e6d85082306d1f73d0689a3fbca81.tar.gz
cmStringAlgorithms: Add cmCatViews and cmStrCat functions
Diffstat (limited to 'Source/cmStringAlgorithms.h')
-rw-r--r--Source/cmStringAlgorithms.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/Source/cmStringAlgorithms.h b/Source/cmStringAlgorithms.h
index 8d6aec67a3..3037bef369 100644
--- a/Source/cmStringAlgorithms.h
+++ b/Source/cmStringAlgorithms.h
@@ -7,6 +7,7 @@
#include "cmRange.h"
#include "cm_string_view.hxx"
+#include <initializer_list>
#include <sstream>
#include <string.h>
#include <string>
@@ -48,6 +49,55 @@ std::string cmJoin(Range const& rng, cm::string_view separator)
return os.str();
}
+/** Concatenate string pieces into a single string. */
+std::string cmCatViews(std::initializer_list<cm::string_view> views);
+
+/** Utility class for cmStrCat. */
+class cmAlphaNum
+{
+public:
+ cmAlphaNum(cm::string_view view)
+ : View_(view)
+ {
+ }
+ cmAlphaNum(std::string const& str)
+ : View_(str)
+ {
+ }
+ cmAlphaNum(const char* str)
+ : View_(str)
+ {
+ }
+ cmAlphaNum(char ch)
+ : View_(Digits_, 1)
+ {
+ Digits_[0] = ch;
+ }
+ cmAlphaNum(int val);
+ cmAlphaNum(unsigned int val);
+ cmAlphaNum(long int val);
+ cmAlphaNum(unsigned long int val);
+ cmAlphaNum(long long int val);
+ cmAlphaNum(unsigned long long int val);
+ cmAlphaNum(float val);
+ cmAlphaNum(double val);
+
+ cm::string_view View() const { return View_; }
+
+private:
+ cm::string_view View_;
+ char Digits_[32];
+};
+
+/** Concatenate string pieces and numbers into a single string. */
+template <typename... AV>
+inline std::string cmStrCat(cmAlphaNum const& a, cmAlphaNum const& b,
+ AV const&... args)
+{
+ return cmCatViews(
+ { a.View(), b.View(), static_cast<cmAlphaNum const&>(args).View()... });
+}
+
template <typename Range>
std::string cmWrap(std::string const& prefix, Range const& r,
std::string const& suffix, std::string const& sep)