diff options
-rw-r--r-- | src/history.cc | 44 | ||||
-rw-r--r-- | src/history.h | 12 |
2 files changed, 40 insertions, 16 deletions
diff --git a/src/history.cc b/src/history.cc index 95ed584f..c4f6b3fc 100644 --- a/src/history.cc +++ b/src/history.cc @@ -101,6 +101,13 @@ void commodity_history_t::map_prices(function<void(datetime_t, reftime = moment; oldest = _oldest; + FGraph fg(price_graph, + recent_edge_weight<EdgeWeightMap, PricePointMap, PriceRatioMap> + (get(edge_weight, price_graph), pricemap, ratiomap, + &reftime, &last_reftime, &oldest, &last_oldest)); + + FNameMap namemap(get(vertex_name, fg)); + graph_traits<FGraph>::adjacency_iterator f_vi, f_vend; for (tie(f_vi, f_vend) = adjacent_vertices(sv, fg); f_vi != f_vend; ++f_vi) { std::pair<Graph::edge_descriptor, bool> edgePair = edge(sv, *f_vi, fg); @@ -133,6 +140,16 @@ commodity_history_t::find_price(const commodity_t& source, { vertex_descriptor sv = vertex(*source.graph_index(), price_graph); + reftime = moment; + oldest = _oldest; + + FGraph fg(price_graph, + recent_edge_weight<EdgeWeightMap, PricePointMap, PriceRatioMap> + (get(edge_weight, price_graph), pricemap, ratiomap, + &reftime, &last_reftime, &oldest, &last_oldest)); + + FNameMap namemap(get(vertex_name, fg)); + DEBUG("history.find", "sv commodity = " << get(namemap, sv)->symbol()); #if defined(DEBUG_ON) if (source.has_flags(COMMODITY_PRIMARY)) @@ -143,9 +160,6 @@ commodity_history_t::find_price(const commodity_t& source, datetime_t most_recent = moment; amount_t price; - reftime = moment; - oldest = _oldest; - graph_traits<FGraph>::adjacency_iterator f_vi, f_vend; for (tie(f_vi, f_vend) = adjacent_vertices(sv, fg); f_vi != f_vend; ++f_vi) { std::pair<Graph::edge_descriptor, bool> edgePair = edge(sv, *f_vi, fg); @@ -195,6 +209,16 @@ commodity_history_t::find_price(const commodity_t& source, vertex_descriptor sv = vertex(*source.graph_index(), price_graph); vertex_descriptor tv = vertex(*target.graph_index(), price_graph); + reftime = moment; + oldest = _oldest; + + FGraph fg(price_graph, + recent_edge_weight<EdgeWeightMap, PricePointMap, PriceRatioMap> + (get(edge_weight, price_graph), pricemap, ratiomap, + &reftime, &last_reftime, &oldest, &last_oldest)); + + FNameMap namemap(get(vertex_name, fg)); + DEBUG("history.find", "sv commodity = " << get(namemap, sv)->symbol()); DEBUG("history.find", "tv commodity = " << get(namemap, tv)->symbol()); @@ -204,9 +228,6 @@ commodity_history_t::find_price(const commodity_t& source, PredecessorMap predecessorMap(&predecessors[0]); DistanceMap distanceMap(&distances[0]); - reftime = moment; - oldest = _oldest; - dijkstra_shortest_paths(fg, /* start= */ sv, predecessor_map(predecessorMap) .distance_map(distanceMap) @@ -301,8 +322,17 @@ void commodity_history_t::print_map(std::ostream& out, { if (moment) { reftime = *moment; - write_graphviz(out, fg, label_writer<FNameMap>(namemap)); + oldest = none; + + FGraph fg(price_graph, + recent_edge_weight<EdgeWeightMap, PricePointMap, PriceRatioMap> + (get(edge_weight, price_graph), pricemap, ratiomap, + &reftime, &last_reftime, &oldest, &last_oldest)); + + write_graphviz(out, fg, label_writer<FNameMap>(get(vertex_name, fg))); + last_reftime = reftime; + last_oldest = none; } else { write_graphviz(out, price_graph, label_writer<NameMap>(get(vertex_name, price_graph))); diff --git a/src/history.h b/src/history.h index 6430202b..fc984c1b 100644 --- a/src/history.h +++ b/src/history.h @@ -98,11 +98,13 @@ public: if (*last_oldest) DEBUG("history.find", " last_oldest = " << **last_oldest); +#if 0 if (*last_reftime && *reftime == **last_reftime && *oldest == *last_oldest) { DEBUG("history.find", " using previous reftime"); return get(weight, e) != std::numeric_limits<std::size_t>::max(); } +#endif const price_map_t& prices(get(ratios, e)); if (prices.empty()) { @@ -189,9 +191,6 @@ public: PriceRatioMap> > FGraph; typedef property_map<FGraph, vertex_name_t>::type FNameMap; - FGraph fg; - FNameMap namemap; - // jww (2012-03-05): Prevents threading mutable datetime_t reftime; mutable optional<datetime_t> last_reftime; @@ -201,12 +200,7 @@ public: commodity_history_t() : indexmap(get(vertex_index, price_graph)), pricemap(get(edge_price_point, price_graph)), - ratiomap(get(edge_price_ratio, price_graph)), - fg(price_graph, - recent_edge_weight<EdgeWeightMap, PricePointMap, PriceRatioMap> - (get(edge_weight, price_graph), pricemap, ratiomap, - &reftime, &last_reftime, &oldest, &last_oldest)), - namemap(get(vertex_name, fg)) {} + ratiomap(get(edge_price_ratio, price_graph)) {} void add_commodity(commodity_t& comm); |