CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
JoinString.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
12
14
42
43 // ---------------------------------------------------------------------------------------------
44
45 template<typename T> void toStringListPrimary(Vector<String>& list, const T& value) { list.push_back(value); }
46
47 template<> void toStringListPrimary<std::size_t>(Vector<String>& list, const std::size_t& value);
48
49 template<> void toStringListPrimary<int>(Vector<String>& list, const int& value);
50
51 // Forward declaration (required for GCC and clang)
52 template<typename... Args> void toStringList(Vector<String>& list, Args&&... args);
53
54 template<typename Arg0, typename... ArgsN> void toStringListSecondary(Vector<String>& list, Arg0&& arg0, ArgsN&&... argsN) {
55 toStringListPrimary(list, std::forward<Arg0>(arg0));
56 toStringList(list, std::forward<ArgsN>(argsN)...);
57 }
58
59 template<typename... Args> void toStringList(Vector<String>& list, Args&&... args) { toStringListSecondary(list, std::forward<Args>(args)...); }
60
61 template<> void toStringList(Vector<String>& list);
62
63 template<typename Arg0> void toStringListSecondary(Vector<String>& list, Arg0&& arg0) { toStringListPrimary(list, std::forward<Arg0>(arg0)); }
64
65 // ---------------------------------------------------------------------------------------------
66
68 public:
69 JoinableString() = default;
70 JoinableString(const char* s);
71
72 JoinableString(const JoinableString&) = default;
74
75 // see JoinString
76 [[nodiscard]] String join(const Vector<String>& values = {}) const;
77
78 template<typename... Args> String operator()(Args&&... args) const {
80 toStringList(values, std::forward<Args>(args)...);
81 return join(values);
82 }
83
84 // Returns only the string without any transformation.
85 [[nodiscard]] inline operator String() const { return join({}); }
86
88 [[nodiscard]] inline operator std::string() const { return std::string(join({}).c_str()); }
89
90 private:
91 const char* mString = nullptr;
92 bool mCanJoin = false;
93 };
94
95 // Returns lhs.join() + rhs
96 inline String operator+(const JoinableString& lhs, const String& rhs) { return lhs.join() + rhs; }
97
98 // Returns lhs + rhs.join()
99 inline String operator+(const String& lhs, const JoinableString& rhs) { return lhs + rhs.join(); }
100
101} // namespace CeresEngine::ShaderCompiler
bool mCanJoin
Definition JoinString.hpp:92
const char * mString
Definition JoinString.hpp:91
JoinableString(const JoinableString &)=default
String operator()(Args &&... args) const
Definition JoinString.hpp:78
JoinableString & operator=(const JoinableString &)=default
String join(const Vector< String > &values={}) const
Definition AST.hpp:33
void toStringListSecondary(Vector< String > &list, Arg0 &&arg0, ArgsN &&... argsN)
Definition JoinString.hpp:54
void toStringListPrimary< int >(Vector< String > &list, const int &value)
String joinString(const String &s, const Vector< String > &values)
Joins the specified string with its values.
void toStringList(Vector< String > &list, Args &&... args)
Definition JoinString.hpp:59
String operator+(const Identifier &lhs, const Identifier &rhs)
Definition Identifier.hpp:72
void toStringListPrimary(Vector< String > &list, const T &value)
Definition JoinString.hpp:45
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
auto values(Container &container)
Returns an iterable object that iterates over the values of a map-like container.
Definition Iterator.hpp:400
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25