update Duration::Parse()
This commit is contained in:
parent
ab9c650b0a
commit
5ef219ad89
|
|
@ -97,7 +97,7 @@ namespace kiwano
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
const auto duration_regex = std::wregex(LR"([-+]?([0-9]*(\.[0-9]*)?[a-z]+)+)");
|
const auto duration_regex = std::wregex(LR"(^[-+]?([0-9]*(\.[0-9]*)?(h|m|s|ms)+)+$)");
|
||||||
|
|
||||||
typedef std::unordered_map<String, Duration> UnitMap;
|
typedef std::unordered_map<String, Duration> UnitMap;
|
||||||
const auto unit_map = UnitMap
|
const auto unit_map = UnitMap
|
||||||
|
|
@ -172,14 +172,7 @@ namespace kiwano
|
||||||
|
|
||||||
if (ms != 0)
|
if (ms != 0)
|
||||||
{
|
{
|
||||||
auto float_to_str = [](Float32 val) -> String
|
result.append(String::parse(static_cast<Float32>(sec) + static_cast<Float32>(ms) / 1000.f))
|
||||||
{
|
|
||||||
WChar buf[10] = {};
|
|
||||||
::swprintf_s(buf, L"%g", val);
|
|
||||||
return String(buf);
|
|
||||||
};
|
|
||||||
|
|
||||||
result.append(float_to_str(static_cast<Float32>(sec) + static_cast<Float32>(ms) / 1000.f))
|
|
||||||
.append(L"s");
|
.append(L"s");
|
||||||
}
|
}
|
||||||
else if (sec != 0)
|
else if (sec != 0)
|
||||||
|
|
@ -400,11 +393,7 @@ namespace kiwano
|
||||||
String num_str = str.substr(pos, i - pos);
|
String num_str = str.substr(pos, i - pos);
|
||||||
pos = i;
|
pos = i;
|
||||||
|
|
||||||
if (num_str.empty() || num_str == L".")
|
KGE_ASSERT(!(num_str.empty() || num_str == L".") && "Duration::Parse failed, invalid duration");
|
||||||
{
|
|
||||||
KGE_ERROR_LOG(L"Duration::Parse failed, invalid duration");
|
|
||||||
return Duration();
|
|
||||||
}
|
|
||||||
|
|
||||||
// µ¥Î»
|
// µ¥Î»
|
||||||
for (; i < len; ++i)
|
for (; i < len; ++i)
|
||||||
|
|
@ -419,11 +408,7 @@ namespace kiwano
|
||||||
String unit_str = str.substr(pos, i - pos);
|
String unit_str = str.substr(pos, i - pos);
|
||||||
pos = i;
|
pos = i;
|
||||||
|
|
||||||
if (unit_map.find(unit_str) == unit_map.end())
|
KGE_ASSERT(unit_map.find(unit_str) != unit_map.end() && "Duration::Parse failed, invalid duration");
|
||||||
{
|
|
||||||
KGE_ERROR_LOG(L"Duration::Parse failed, invalid duration");
|
|
||||||
return Duration();
|
|
||||||
}
|
|
||||||
|
|
||||||
Float64 num = std::wcstod(num_str.c_str(), nullptr);
|
Float64 num = std::wcstod(num_str.c_str(), nullptr);
|
||||||
Duration unit = unit_map.at(unit_str);
|
Duration unit = unit_map.at(unit_str);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue