mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-01-03 22:53:31 +01:00
42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
|
// Copyright 2020 Dolphin Emulator Project
|
||
|
// Licensed under GPLv2+
|
||
|
// Refer to the license.txt file included.
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include <cstddef>
|
||
|
#include <string_view>
|
||
|
|
||
|
namespace Common
|
||
|
{
|
||
|
constexpr std::size_t CountFmtReplacementFields(std::string_view s)
|
||
|
{
|
||
|
std::size_t count = 0;
|
||
|
for (std::size_t i = 0; i < s.size(); ++i)
|
||
|
{
|
||
|
if (s[i] != '{')
|
||
|
continue;
|
||
|
|
||
|
// If the opening brace is followed by another brace, what we have is
|
||
|
// an escaped brace, not a replacement field.
|
||
|
if (i + 1 < s.size() && s[i + 1] == '{')
|
||
|
{
|
||
|
// Skip the second brace.
|
||
|
// This ensures that e.g. {{{}}} is counted correctly: when the first brace character
|
||
|
// is read and detected as being part of an '{{' escape sequence, the second character
|
||
|
// is skipped so the most inner brace (the third character) is not detected
|
||
|
// as the end of an '{{' pair.
|
||
|
++i;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
++count;
|
||
|
}
|
||
|
return count;
|
||
|
}
|
||
|
|
||
|
static_assert(CountFmtReplacementFields("") == 0);
|
||
|
static_assert(CountFmtReplacementFields("{} test {:x}") == 2);
|
||
|
static_assert(CountFmtReplacementFields("{} {{}} test {{{}}}") == 2);
|
||
|
} // namespace Common
|