mirror of
https://github.com/fmtlib/fmt.git
synced 2025-03-29 01:20:23 +00:00
Implement string parsing
This commit is contained in:
parent
5b7bbf8853
commit
9df0e2d1f1
@ -21,6 +21,7 @@ struct scan_arg {
|
|||||||
unsigned* uint_value;
|
unsigned* uint_value;
|
||||||
long long* long_long_value;
|
long long* long_long_value;
|
||||||
unsigned long long* ulong_long_value;
|
unsigned long long* ulong_long_value;
|
||||||
|
std::string* string;
|
||||||
// TODO: more types
|
// TODO: more types
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -31,6 +32,7 @@ struct scan_arg {
|
|||||||
: arg_type(long_long_type), long_long_value(&value) {}
|
: arg_type(long_long_type), long_long_value(&value) {}
|
||||||
scan_arg(unsigned long long& value)
|
scan_arg(unsigned long long& value)
|
||||||
: arg_type(ulong_long_type), ulong_long_value(&value) {}
|
: arg_type(ulong_long_type), ulong_long_value(&value) {}
|
||||||
|
scan_arg(std::string& value) : arg_type(string_type), string(&value) {}
|
||||||
};
|
};
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
|
|
||||||
@ -112,6 +114,11 @@ struct scan_handler : error_handler {
|
|||||||
case ulong_long_type:
|
case ulong_long_type:
|
||||||
*arg_.ulong_long_value = read_uint<unsigned long long>();
|
*arg_.ulong_long_value = read_uint<unsigned long long>();
|
||||||
break;
|
break;
|
||||||
|
case string_type: {
|
||||||
|
while (begin_ != end_ && *begin_ != ' ')
|
||||||
|
arg_.string->push_back(*begin_++);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
@ -178,6 +185,11 @@ TEST(ScanTest, ReadULongLong) {
|
|||||||
EXPECT_THROW_MSG(fmt::scan("-42", "{}", n), fmt::format_error,
|
EXPECT_THROW_MSG(fmt::scan("-42", "{}", n), fmt::format_error,
|
||||||
"invalid input");
|
"invalid input");
|
||||||
}
|
}
|
||||||
|
TEST(ScanTest, ReadString) {
|
||||||
|
std::string s;
|
||||||
|
fmt::scan("foo", "{}", s);
|
||||||
|
EXPECT_EQ(s, "foo");
|
||||||
|
}
|
||||||
|
|
||||||
TEST(ScanTest, InvalidFormat) {
|
TEST(ScanTest, InvalidFormat) {
|
||||||
EXPECT_THROW_MSG(fmt::scan("", "{}"), fmt::format_error,
|
EXPECT_THROW_MSG(fmt::scan("", "{}"), fmt::format_error,
|
||||||
@ -185,3 +197,11 @@ TEST(ScanTest, InvalidFormat) {
|
|||||||
EXPECT_THROW_MSG(fmt::scan("", "{"), fmt::format_error,
|
EXPECT_THROW_MSG(fmt::scan("", "{"), fmt::format_error,
|
||||||
"invalid format string");
|
"invalid format string");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(ScanTest, Example) {
|
||||||
|
std::string key;
|
||||||
|
int value;
|
||||||
|
fmt::scan("answer = 42", "{} = {}", key, value);
|
||||||
|
EXPECT_EQ(key, "answer");
|
||||||
|
EXPECT_EQ(value, 42);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user