Skip to content

Commit beb99d8

Browse files
committed
Adding GCC 4.7 support
1 parent 34f14cb commit beb99d8

File tree

3 files changed

+58
-67
lines changed

3 files changed

+58
-67
lines changed

include/CLI/Validators.hpp

Lines changed: 27 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -787,8 +787,33 @@ class SuffixedNumber : public Validator {
787787
// transform function
788788
func_ = [mapping, opts](std::string &input) -> std::string {
789789
Number num;
790-
std::string suffix;
791-
std::tie(num, suffix) = split<Number>(input, opts);
790+
791+
detail::rtrim(input);
792+
if(input.empty()) {
793+
throw ValidationError("Input is empty");
794+
}
795+
796+
// Find split position between number and prefix
797+
auto suffix_start = input.end();
798+
while(suffix_start > input.begin() && std::isalpha(*(suffix_start - 1), std::locale())) {
799+
--suffix_start;
800+
}
801+
802+
std::string suffix{suffix_start, input.end()};
803+
input.resize(std::distance(input.begin(), suffix_start));
804+
detail::trim(input);
805+
806+
if(opts & MANDATORY_SUFFIX && suffix.empty()) {
807+
throw ValidationError("Missing mandatory suffix");
808+
}
809+
if(opts & CASE_INSENSITIVE) {
810+
suffix = detail::to_lower(suffix);
811+
}
812+
813+
bool converted = detail::lexical_cast(input, num);
814+
if(!converted) {
815+
throw ValidationError("Value " + input + " could not be converted to " + detail::type_name<Number>());
816+
}
792817

793818
if(suffix.empty()) {
794819
// No need to modify input if no suffix
@@ -817,40 +842,6 @@ class SuffixedNumber : public Validator {
817842
}
818843

819844
private:
820-
/// Split input string to <Number, Suffix> pair
821-
/// CASE_INSENSITIVE and MANDATORY_SUFFIX options are considered
822-
template <typename Number> static std::pair<Number, std::string> split(std::string input, Options opts) {
823-
detail::rtrim(input);
824-
if(input.empty()) {
825-
throw ValidationError("Input is empty");
826-
}
827-
828-
// Find split position between number and prefix
829-
auto suffix_start = input.end();
830-
while(suffix_start > input.begin() && std::isalpha(*(suffix_start - 1), std::locale())) {
831-
--suffix_start;
832-
}
833-
834-
std::string suffix{suffix_start, input.end()};
835-
input.resize(std::distance(input.begin(), suffix_start));
836-
detail::trim(input);
837-
838-
if(opts & MANDATORY_SUFFIX && suffix.empty()) {
839-
throw ValidationError("Missing mandatory suffix");
840-
}
841-
if(opts & CASE_INSENSITIVE) {
842-
suffix = detail::to_lower(suffix);
843-
}
844-
845-
Number val;
846-
bool converted = detail::lexical_cast(input, val);
847-
if(!converted) {
848-
throw ValidationError("Value " + input + " could not be converted to " + detail::type_name<Number>());
849-
}
850-
851-
return {val, std::move(suffix)};
852-
}
853-
854845
/// Check that mapping contains valid suffixes.
855846
/// Update mapping for CASE_INSENSITIVE mode.
856847
template <typename Number> static void validate_mapping(std::map<std::string, Number> &mapping, Options opts) {

tests/HelpersTest.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -433,25 +433,25 @@ TEST(CheckedMultiply, SizeT) {
433433
size_t a = 10;
434434
size_t b = 20;
435435
ASSERT_TRUE(CLI::detail::checked_multiply(a, b));
436-
ASSERT_EQ(a, 200);
436+
ASSERT_EQ(a, 200u);
437437

438-
a = 0;
439-
b = 20;
438+
a = 0u;
439+
b = 20u;
440440
ASSERT_TRUE(CLI::detail::checked_multiply(a, b));
441-
ASSERT_EQ(a, 0);
441+
ASSERT_EQ(a, 0u);
442442

443-
a = 20;
444-
b = 0;
443+
a = 20u;
444+
b = 0u;
445445
ASSERT_TRUE(CLI::detail::checked_multiply(a, b));
446-
ASSERT_EQ(a, 0);
446+
ASSERT_EQ(a, 0u);
447447

448448
a = std::numeric_limits<size_t>::max();
449-
b = 1;
449+
b = 1u;
450450
ASSERT_TRUE(CLI::detail::checked_multiply(a, b));
451451
ASSERT_EQ(a, std::numeric_limits<size_t>::max());
452452

453453
a = std::numeric_limits<size_t>::max();
454-
b = 2;
454+
b = 2u;
455455
ASSERT_FALSE(CLI::detail::checked_multiply(a, b));
456456
ASSERT_EQ(a, std::numeric_limits<size_t>::max());
457457

@@ -461,9 +461,9 @@ TEST(CheckedMultiply, SizeT) {
461461
ASSERT_EQ(a, std::numeric_limits<size_t>::max());
462462

463463
a = std::numeric_limits<size_t>::max() / 100;
464-
b = 99;
464+
b = 99u;
465465
ASSERT_TRUE(CLI::detail::checked_multiply(a, b));
466-
ASSERT_EQ(a, std::numeric_limits<size_t>::max() / 100 * 99);
466+
ASSERT_EQ(a, std::numeric_limits<size_t>::max() / 100u * 99u);
467467
}
468468

469469
TEST(CheckedMultiply, Float) {

tests/TransformTest.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -635,14 +635,14 @@ TEST_F(TApp, AsSizeValue1000_1024) {
635635

636636
args = {"-s", "10240"};
637637
run();
638-
EXPECT_EQ(value, 10240);
638+
EXPECT_EQ(value, 10240u);
639639

640640
args = {"-s", "1b"};
641641
run();
642642
EXPECT_FLOAT_EQ(value, 1);
643643

644-
uint64_t k_value = 1000;
645-
uint64_t ki_value = 1024;
644+
uint64_t k_value = 1000u;
645+
uint64_t ki_value = 1024u;
646646
args = {"-s", "1k"};
647647
run();
648648
EXPECT_EQ(value, k_value);
@@ -659,8 +659,8 @@ TEST_F(TApp, AsSizeValue1000_1024) {
659659
run();
660660
EXPECT_EQ(value, ki_value);
661661

662-
k_value = 1000ull * 1000;
663-
ki_value = 1024ull * 1024;
662+
k_value = 1000ull * 1000u;
663+
ki_value = 1024ull * 1024u;
664664
args = {"-s", "1m"};
665665
run();
666666
EXPECT_EQ(value, k_value);
@@ -674,8 +674,8 @@ TEST_F(TApp, AsSizeValue1000_1024) {
674674
run();
675675
EXPECT_EQ(value, ki_value);
676676

677-
k_value = 1000ull * 1000 * 1000;
678-
ki_value = 1024ull * 1024 * 1024;
677+
k_value = 1000ull * 1000u * 1000u;
678+
ki_value = 1024ull * 1024u * 1024u;
679679
args = {"-s", "1g"};
680680
run();
681681
EXPECT_EQ(value, k_value);
@@ -689,8 +689,8 @@ TEST_F(TApp, AsSizeValue1000_1024) {
689689
run();
690690
EXPECT_EQ(value, ki_value);
691691

692-
k_value = 1000ull * 1000 * 1000 * 1000;
693-
ki_value = 1024ull * 1024 * 1024 * 1024;
692+
k_value = 1000ull * 1000u * 1000u * 1000u;
693+
ki_value = 1024ull * 1024u * 1024u * 1024u;
694694
args = {"-s", "1t"};
695695
run();
696696
EXPECT_EQ(value, k_value);
@@ -704,8 +704,8 @@ TEST_F(TApp, AsSizeValue1000_1024) {
704704
run();
705705
EXPECT_EQ(value, ki_value);
706706

707-
k_value = 1000ull * 1000 * 1000 * 1000 * 1000;
708-
ki_value = 1024ull * 1024 * 1024 * 1024 * 1024;
707+
k_value = 1000ull * 1000u * 1000u * 1000u * 1000u;
708+
ki_value = 1024ull * 1024u * 1024u * 1024u * 1024u;
709709
args = {"-s", "1p"};
710710
run();
711711
EXPECT_EQ(value, k_value);
@@ -719,8 +719,8 @@ TEST_F(TApp, AsSizeValue1000_1024) {
719719
run();
720720
EXPECT_EQ(value, ki_value);
721721

722-
k_value = 1000ull * 1000 * 1000 * 1000 * 1000 * 1000;
723-
ki_value = 1024ull * 1024 * 1024 * 1024 * 1024 * 1024;
722+
k_value = 1000ull * 1000u * 1000u * 1000u * 1000u * 1000u;
723+
ki_value = 1024ull * 1024u * 1024u * 1024u * 1024u * 1024u;
724724
args = {"-s", "1e"};
725725
run();
726726
EXPECT_EQ(value, k_value);
@@ -741,13 +741,13 @@ TEST_F(TApp, AsSizeValue1024) {
741741

742742
args = {"-s", "10240"};
743743
run();
744-
EXPECT_EQ(value, 10240);
744+
EXPECT_EQ(value, 10240u);
745745

746746
args = {"-s", "1b"};
747747
run();
748748
EXPECT_FLOAT_EQ(value, 1);
749749

750-
uint64_t ki_value = 1024;
750+
uint64_t ki_value = 1024u;
751751
args = {"-s", "1k"};
752752
run();
753753
EXPECT_EQ(value, ki_value);
@@ -764,7 +764,7 @@ TEST_F(TApp, AsSizeValue1024) {
764764
run();
765765
EXPECT_EQ(value, ki_value);
766766

767-
ki_value = 1024ull * 1024;
767+
ki_value = 1024ull * 1024u;
768768
args = {"-s", "1m"};
769769
run();
770770
EXPECT_EQ(value, ki_value);
@@ -778,7 +778,7 @@ TEST_F(TApp, AsSizeValue1024) {
778778
run();
779779
EXPECT_EQ(value, ki_value);
780780

781-
ki_value = 1024ull * 1024 * 1024;
781+
ki_value = 1024ull * 1024u * 1024u;
782782
args = {"-s", "1g"};
783783
run();
784784
EXPECT_EQ(value, ki_value);
@@ -792,7 +792,7 @@ TEST_F(TApp, AsSizeValue1024) {
792792
run();
793793
EXPECT_EQ(value, ki_value);
794794

795-
ki_value = 1024ull * 1024 * 1024 * 1024;
795+
ki_value = 1024ull * 1024u * 1024u * 1024u;
796796
args = {"-s", "1t"};
797797
run();
798798
EXPECT_EQ(value, ki_value);
@@ -806,7 +806,7 @@ TEST_F(TApp, AsSizeValue1024) {
806806
run();
807807
EXPECT_EQ(value, ki_value);
808808

809-
ki_value = 1024ull * 1024 * 1024 * 1024 * 1024;
809+
ki_value = 1024ull * 1024u * 1024u * 1024u * 1024u;
810810
args = {"-s", "1p"};
811811
run();
812812
EXPECT_EQ(value, ki_value);
@@ -820,7 +820,7 @@ TEST_F(TApp, AsSizeValue1024) {
820820
run();
821821
EXPECT_EQ(value, ki_value);
822822

823-
ki_value = 1024ull * 1024 * 1024 * 1024 * 1024 * 1024;
823+
ki_value = 1024ull * 1024u * 1024u * 1024u * 1024u * 1024u;
824824
args = {"-s", "1e"};
825825
run();
826826
EXPECT_EQ(value, ki_value);

0 commit comments

Comments
 (0)