summaryrefslogtreecommitdiff
path: root/amount.cc
diff options
context:
space:
mode:
Diffstat (limited to 'amount.cc')
-rw-r--r--amount.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/amount.cc b/amount.cc
index 35f50b21..05421760 100644
--- a/amount.cc
+++ b/amount.cc
@@ -1173,15 +1173,20 @@ amount_t commodity_t::value(const std::time_t moment)
std::time_t age = 0;
amount_t price;
- if (history)
- for (history_map::reverse_iterator i = history->prices.rbegin();
- i != history->prices.rend();
- i++)
- if (moment == 0 || std::difftime(moment, (*i).first) >= 0) {
+ if (history) {
+ if (moment == 0) {
+ history_map::reverse_iterator i = history->prices.rbegin();
+ age = (*i).first;
+ price = (*i).second;
+ } else {
+ history_map::iterator i = history->prices.lower_bound(moment);
+ if (i != history->prices.begin()) {
+ --i;
age = (*i).first;
price = (*i).second;
- break;
}
+ }
+ }
if (updater)
(*updater)(*this, moment, age,