Skip to content

Commit 41481b7

Browse files
[libcxx][NFC] tidy up money_get::__do_get's sign parsing
Same logic, but much easier to read this way Reviewed By: ldionne, #libc, Mordante Differential Revision: https://reviews.llvm.org/D112958
1 parent 7cdd262 commit 41481b7

File tree

1 file changed

+23
-43
lines changed

1 file changed

+23
-43
lines changed

libcxx/include/locale

Lines changed: 23 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2892,51 +2892,31 @@ money_get<_CharT, _InputIterator>::__do_get(iter_type& __b, iter_type __e,
28922892
}
28932893
break;
28942894
case money_base::sign:
2895-
if (__psn.size() + __nsn.size() > 0)
2895+
if (__psn.size() > 0 && *__b == __psn[0])
28962896
{
2897-
if (__psn.size() == 0 || __nsn.size() == 0)
2898-
{ // sign is optional
2899-
if (__psn.size() > 0)
2900-
{ // __nsn.size() == 0
2901-
if (*__b == __psn[0])
2902-
{
2903-
++__b;
2904-
if (__psn.size() > 1)
2905-
__trailing_sign = &__psn;
2906-
}
2907-
else
2908-
__neg = true;
2909-
}
2910-
else if (*__b == __nsn[0]) // __nsn.size() > 0 && __psn.size() == 0
2911-
{
2912-
++__b;
2913-
__neg = true;
2914-
if (__nsn.size() > 1)
2915-
__trailing_sign = &__nsn;
2916-
}
2917-
}
2918-
else // sign is required
2919-
{
2920-
if (*__b == __psn[0])
2921-
{
2922-
++__b;
2923-
if (__psn.size() > 1)
2924-
__trailing_sign = &__psn;
2925-
}
2926-
else if (*__b == __nsn[0])
2927-
{
2928-
++__b;
2929-
__neg = true;
2930-
if (__nsn.size() > 1)
2931-
__trailing_sign = &__nsn;
2932-
}
2933-
else
2934-
{
2935-
__err |= ios_base::failbit;
2936-
return false;
2937-
}
2938-
}
2897+
++__b;
2898+
__neg = false;
2899+
if (__psn.size() > 1)
2900+
__trailing_sign = &__psn;
2901+
break;
2902+
}
2903+
if (__nsn.size() > 0 && *__b == __nsn[0])
2904+
{
2905+
++__b;
2906+
__neg = true;
2907+
if (__nsn.size() > 1)
2908+
__trailing_sign = &__nsn;
2909+
break;
2910+
}
2911+
if (__psn.size() > 0 && __nsn.size() > 0)
2912+
{ // sign is required
2913+
__err |= ios_base::failbit;
2914+
return false;
29392915
}
2916+
if (__psn.size() == 0 && __nsn.size() == 0)
2917+
// locale has no way of specifying a sign. Use the initial value of __neg as a default
2918+
break;
2919+
__neg = (__nsn.size() == 0);
29402920
break;
29412921
case money_base::symbol:
29422922
{

0 commit comments

Comments
 (0)