20 #ifndef RIPPLE_APP_BOOK_OFFER_H_INCLUDED
21 #define RIPPLE_APP_BOOK_OFFER_H_INCLUDED
23 #include <ripple/basics/contract.h>
24 #include <ripple/ledger/View.h>
25 #include <ripple/protocol/Quality.h>
26 #include <ripple/protocol/STLedgerEntry.h>
27 #include <ripple/protocol/SField.h>
33 template <
class TIn,
class TOut>
49 template<
class TIn=STAmount,
class TOut=STAmount>
90 TAmounts<TIn, TOut>
const&
110 TAmounts<TIn, TOut>
const& consumed)
113 Throw<std::logic_error> (
"can't consume more than is available.");
116 Throw<std::logic_error> (
"can't produce more than is available.");
139 template<
class TIn,
class TOut>
142 , m_quality (quality)
143 , m_account (m_entry->getAccountID (
sfAccount))
145 auto const tp = m_entry->getFieldAmount (
sfTakerPays);
146 auto const tg = m_entry->getFieldAmount (
sfTakerGets);
147 m_amounts.in = toAmount<TIn> (tp);
148 m_amounts.out = toAmount<TOut> (tg);
149 this->issIn_ = tp.issue ();
150 this->issOut_ = tg.issue ();
157 , m_quality (quality)
158 , m_account (m_entry->getAccountID (
sfAccount))
166 template<
class TIn,
class TOut>
172 static_assert(
sizeof(TOut) == -1,
"Must be specialized");
180 m_entry->setFieldAmount (
sfTakerPays, m_amounts.in);
181 m_entry->setFieldAmount (
sfTakerGets, m_amounts.out);
208 template<
class TIn,
class TOut>
218 return m_amounts.in.issue ();
221 template<
class TIn,
class TOut>
224 return this->issOut_;
231 return m_amounts.out.issue ();
234 template<
class TIn,
class TOut>
239 return os << offer.id ();