diff options
Diffstat (limited to 'src/format.hpp')
-rw-r--r-- | src/format.hpp | 110 |
1 files changed, 0 insertions, 110 deletions
diff --git a/src/format.hpp b/src/format.hpp deleted file mode 100644 index efd25f89..00000000 --- a/src/format.hpp +++ /dev/null @@ -1,110 +0,0 @@ -#pragma once - -// ReSharper disable once CppUnusedIncludeDirective -#include "pre.hpp" - -#include "base.hpp" - -namespace cru -{ - namespace details - { - constexpr StringView PlaceHolder(type_tag<String>) - { - return StringView(L"{}"); - } - - constexpr MultiByteStringView PlaceHolder(type_tag<MultiByteString>) - { - return MultiByteStringView("{}"); - } - - template<typename TString> - void FormatInternal(TString& string) - { - const auto find_result = string.find(PlaceHolder(type_tag<TString>{})); - if (find_result != TString::npos) - throw std::invalid_argument("There is more placeholders than args."); - } - - template<typename TString, typename T, typename... TRest> - void FormatInternal(TString& string, const T& arg, const TRest&... args) - { - const auto find_result = string.find(PlaceHolder(type_tag<TString>{})); - if (find_result == TString::npos) - throw std::invalid_argument("There is less placeholders than args."); - - string.replace(find_result, 2, FormatToString(arg, type_tag<TString>{})); - FormatInternal<TString>(string, args...); - } - } - - template<typename... T> - String Format(const StringView& format, const T&... args) - { - String result(format); - details::FormatInternal<String>(result, args...); - return result; - } - - template<typename... T> - MultiByteString Format(const MultiByteStringView& format, const T&... args) - { - MultiByteString result(format); - details::FormatInternal<MultiByteString>(result, args...); - return result; - } - -#define CRU_FORMAT_NUMBER(type) \ - inline String FormatToString(const type number, type_tag<String>) \ - { \ - return std::to_wstring(number); \ - } \ - inline MultiByteString FormatToString(const type number, type_tag<MultiByteString>) \ - { \ - return std::to_string(number); \ - } - - CRU_FORMAT_NUMBER(int) - CRU_FORMAT_NUMBER(short) - CRU_FORMAT_NUMBER(long) - CRU_FORMAT_NUMBER(long long) - CRU_FORMAT_NUMBER(unsigned int) - CRU_FORMAT_NUMBER(unsigned short) - CRU_FORMAT_NUMBER(unsigned long) - CRU_FORMAT_NUMBER(unsigned long long) - CRU_FORMAT_NUMBER(float) - CRU_FORMAT_NUMBER(double) - -#undef CRU_FORMAT_NUMBER - - inline StringView FormatToString(const String& string, type_tag<String>) - { - return string; - } - - inline MultiByteString FormatToString(const MultiByteString& string, type_tag<MultiByteString>) - { - return string; - } - - inline StringView FormatToString(const StringView& string, type_tag<String>) - { - return string; - } - - inline MultiByteStringView FormatToString(const MultiByteStringView& string, type_tag<MultiByteString>) - { - return string; - } - - inline StringView FormatToString(const wchar_t* string, type_tag<String>) - { - return StringView(string); - } - - inline MultiByteStringView FormatToString(const char* string, type_tag<MultiByteString>) - { - return MultiByteString(string); - } -} |