Loading...
Searching...
No Matches
history.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2003-2023, John Wiegley. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of New Artisans LLC nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
46#pragma once
47
48#include "amount.h"
49#include "commodity.h"
50
51namespace ledger {
52
53typedef std::map<datetime_t, amount_t> price_map_t;
54
56class commodity_history_t : public noncopyable
57{
58 unique_ptr<commodity_history_impl_t> p_impl;
59
60public:
62
64
65 void add_price(const commodity_t& source,
66 const datetime_t& when,
67 const amount_t& price);
68 void remove_price(const commodity_t& source,
69 const commodity_t& target,
70 const datetime_t& date);
71
73 const commodity_t& source,
74 const datetime_t& moment,
75 const datetime_t& _oldest = datetime_t(),
76 bool bidirectionally = false);
77
78 boost::optional<price_point_t>
79 find_price(const commodity_t& source,
80 const datetime_t& moment,
81 const datetime_t& oldest = datetime_t());
82
83 boost::optional<price_point_t>
84 find_price(const commodity_t& source,
85 const commodity_t& target,
86 const datetime_t& moment,
87 const datetime_t& oldest = datetime_t());
88
89 void print_map(std::ostream& out, const datetime_t& moment = datetime_t());
91};
92
93} // namespace ledger
Basic type for handling commoditized math: amount_t.
Types for handling commodities.
gregorian::date date
Definition utils.h:64
std::map< datetime_t, amount_t > price_map_t
Definition history.h:53
T & downcast(U &object)
Definition utils.h:468
boost::posix_time::ptime datetime_t
Definition times.h:53
Encapsulate infinite-precision commoditized amounts.
Definition amount.h:96
void add_commodity(commodity_t &comm)
void remove_price(const commodity_t &source, const commodity_t &target, const datetime_t &date)
void print_map(std::ostream &out, const datetime_t &moment=datetime_t())
void add_price(const commodity_t &source, const datetime_t &when, const amount_t &price)
boost::optional< price_point_t > find_price(const commodity_t &source, const commodity_t &target, const datetime_t &moment, const datetime_t &oldest=datetime_t())
void map_prices(function< void(datetime_t, const amount_t &)> fn, const commodity_t &source, const datetime_t &moment, const datetime_t &_oldest=datetime_t(), bool bidirectionally=false)
boost::optional< price_point_t > find_price(const commodity_t &source, const datetime_t &moment, const datetime_t &oldest=datetime_t())