Differential Revision: https://phabricator.services.mozilla.com/D289446
45 lines
1.3 KiB
C++
45 lines
1.3 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef nsFmtCString_h_
|
|
#define nsFmtCString_h_
|
|
|
|
#include "fmt/format.h"
|
|
#include "fmt/xchar.h"
|
|
#include "nsString.h"
|
|
|
|
/**
|
|
* nsTFmtString lets you create a nsTString using a C++20-style format
|
|
* string. For example:
|
|
*
|
|
* NS_WARNING(nsFmtCString("Unexpected value: {}", 13.917).get());
|
|
* NS_WARNING(nsFmtString(u"Unexpected value: {}", u"weird").get());
|
|
*
|
|
* nsTFmtString has a small built-in auto-buffer. For larger strings, it
|
|
* will allocate on the heap.
|
|
*
|
|
* See also nsTSubstring::AppendFmt().
|
|
*
|
|
* Note also that for one-off C strings you can also use fmt::format() directly:
|
|
*
|
|
* NS_WARNING(std::format("Unexpected value: {}", 13.917).c_str());
|
|
*
|
|
*/
|
|
template <typename T>
|
|
class nsTFmtString : public nsTAutoStringN<T, 16> {
|
|
public:
|
|
template <typename... Args>
|
|
explicit nsTFmtString(
|
|
fmt::basic_format_string<T, std::type_identity_t<Args>...> aFormatStr,
|
|
Args&&... aArgs) {
|
|
this->AppendFmt(aFormatStr, std::forward<Args>(aArgs)...);
|
|
}
|
|
};
|
|
|
|
template <typename Char>
|
|
struct fmt::formatter<nsTFmtString<Char>, Char>
|
|
: fmt::formatter<nsTString<Char>, Char> {};
|
|
|
|
#endif // !defined(nsFmtString_h___)
|