From 9b7725ee181617b2e0ea13189837b0724ab964b8 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Sat, 26 Jul 2008 23:55:06 -0400 Subject: Added a simple optimization to the way amount strings are parsed. --- amount.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'amount.cc') diff --git a/amount.cc b/amount.cc index 1ac2f407..3a10828c 100644 --- a/amount.cc +++ b/amount.cc @@ -1062,7 +1062,7 @@ void parse_annotations(std::istream& in, amount_t& price, << " tag " << tag); } -void amount_t::parse(std::istream& in, unsigned char flags) +bool amount_t::parse(std::istream& in, unsigned char flags) { // The possible syntax for an amount is: // @@ -1114,8 +1114,12 @@ void amount_t::parse(std::istream& in, unsigned char flags) } } - if (quant.empty()) - throw new amount_error("No quantity specified for amount"); + if (quant.empty()) { + if (flags & AMOUNT_PARSE_SOFT_FAIL) + return false; + else + throw new amount_error("No quantity specified for amount"); + } _init(); @@ -1205,6 +1209,8 @@ void amount_t::parse(std::istream& in, unsigned char flags) if (! (flags & AMOUNT_PARSE_NO_REDUCE)) reduce(); + + return true; } void amount_t::reduce() @@ -1215,7 +1221,7 @@ void amount_t::reduce() } } -void amount_t::parse(const std::string& str, unsigned char flags) +bool amount_t::parse(const std::string& str, unsigned char flags) { std::istringstream stream(str); parse(stream, flags); -- cgit v1.2.3