|
@@ -1,9 +1,10 @@
|
|
|
export module Core.StringJoin;
|
|
export module Core.StringJoin;
|
|
|
|
|
|
|
|
import Core.Meta;
|
|
import Core.Meta;
|
|
|
|
|
+import Core.Types;
|
|
|
|
|
|
|
|
namespace Core {
|
|
namespace Core {
|
|
|
- template<int N>
|
|
|
|
|
|
|
+ template<size_t N>
|
|
|
struct MergedString {
|
|
struct MergedString {
|
|
|
char s[N];
|
|
char s[N];
|
|
|
|
|
|
|
@@ -12,26 +13,26 @@ namespace Core {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- template<int N1, int N2>
|
|
|
|
|
|
|
+ template<size_t N1, size_t N2>
|
|
|
consteval auto mergeStringsBase(const char (&a)[N1], const char (&b)[N2]) {
|
|
consteval auto mergeStringsBase(const char (&a)[N1], const char (&b)[N2]) {
|
|
|
static_assert(N1 > 0);
|
|
static_assert(N1 > 0);
|
|
|
MergedString<N1 + N2 - 1> s;
|
|
MergedString<N1 + N2 - 1> s;
|
|
|
- for(int i = 0; i < N1; i++) {
|
|
|
|
|
|
|
+ for(size_t i = 0; i < N1; i++) {
|
|
|
s.s[i] = a[i];
|
|
s.s[i] = a[i];
|
|
|
}
|
|
}
|
|
|
- for(int i = 0; i < N2; i++) {
|
|
|
|
|
|
|
+ for(size_t i = 0; i < N2; i++) {
|
|
|
s.s[i + N1 - 1] = b[i];
|
|
s.s[i + N1 - 1] = b[i];
|
|
|
}
|
|
}
|
|
|
return s;
|
|
return s;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- template<int N1, int N2>
|
|
|
|
|
|
|
+ template<size_t N1, size_t N2>
|
|
|
consteval auto mergeStringsBase(
|
|
consteval auto mergeStringsBase(
|
|
|
const MergedString<N1>& a, const char (&b)[N2]) {
|
|
const MergedString<N1>& a, const char (&b)[N2]) {
|
|
|
return mergeStringsBase<N1, N2>(a.s, b);
|
|
return mergeStringsBase<N1, N2>(a.s, b);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- template<int N1, int N2>
|
|
|
|
|
|
|
+ template<size_t N1, size_t N2>
|
|
|
consteval auto mergeStringsBase(
|
|
consteval auto mergeStringsBase(
|
|
|
const char (&a)[N1], const MergedString<N2>& b) {
|
|
const char (&a)[N1], const MergedString<N2>& b) {
|
|
|
return mergeStringsBase<N1, N2>(a, b.s);
|
|
return mergeStringsBase<N1, N2>(a, b.s);
|