20#ifndef RIPPLE_PROTOCOL_STAMOUNT_H_INCLUDED 
   21#define RIPPLE_PROTOCOL_STAMOUNT_H_INCLUDED 
   23#include <xrpl/basics/CountedObject.h> 
   24#include <xrpl/basics/LocalValue.h> 
   25#include <xrpl/basics/Number.h> 
   26#include <xrpl/beast/utility/instrumentation.h> 
   27#include <xrpl/protocol/Asset.h> 
   28#include <xrpl/protocol/IOUAmount.h> 
   29#include <xrpl/protocol/Issue.h> 
   30#include <xrpl/protocol/MPTAmount.h> 
   31#include <xrpl/protocol/SField.h> 
   32#include <xrpl/protocol/STBase.h> 
   33#include <xrpl/protocol/Serializer.h> 
   34#include <xrpl/protocol/XRPAmount.h> 
   35#include <xrpl/protocol/json_get_or_throw.h> 
   91    template <AssetType A>
 
  100    template <AssetType A>
 
  109    template <AssetType A>
 
  128    template <AssetType A>
 
  143    template <AssetType A>
 
  150    template <AssetType A>
 
  153    template <AssetType A>
 
  156    template <AssetType A>
 
  182    holds() const noexcept;
 
  194    constexpr TIss const&
 
  218    value() const noexcept;
 
  227    operator 
bool() const noexcept;
 
  308    copy(
std::
size_t n, 
void* buf) const override;
 
  310    move(
std::
size_t n, 
void* buf) override;
 
 
  337template <AssetType A>
 
  348template <AssetType A>
 
  359    , mIsNegative(negative)
 
  364        "ripple::STAmount::STAmount(SField, A, std::uint64_t, int, bool) : " 
  365        "maximum mantissa input");
 
 
  369template <AssetType A>
 
  371    : mAsset(asset), mOffset(exponent)
 
 
  377template <AssetType A>
 
  387template <AssetType A>
 
  396    , mOffset(amount.exponent())
 
  397    , mIsNegative(amount < 
beast::zero)
 
 
  408    : mAsset(mptIssue), mOffset(0), mIsNegative(amount < 
beast::zero)
 
  411        mValue = unsafe_cast<std::uint64_t>(-amount.
value());
 
  413        mValue = unsafe_cast<std::uint64_t>(amount.
value());
 
 
  463template <Val
idIssueType TIss>
 
  488template <Val
idIssueType TIss>
 
  525inline STAmount::operator bool() const noexcept
 
  527    return *
this != beast::zero;
 
 
  566    if (*
this != beast::zero)
 
 
  612operator==(STAmount 
const& lhs, STAmount 
const& rhs);
 
  614operator<(STAmount 
const& lhs, STAmount 
const& rhs);
 
  619    return !(lhs == rhs);
 
 
  650operator+(STAmount 
const& v1, STAmount 
const& v2);
 
  652operator-(STAmount 
const& v1, STAmount 
const& v2);
 
  655divide(STAmount 
const& v1, STAmount 
const& v2, Asset 
const& asset);
 
  658multiply(STAmount 
const& v1, STAmount 
const& v2, Asset 
const& asset);
 
  696getRate(STAmount 
const& offerOut, STAmount 
const& offerIn);
 
  707canAdd(STAmount 
const& amt1, STAmount 
const& amt2);
 
  710canSubtract(STAmount 
const& amt1, STAmount 
const& amt2);
 
  723        Throw<JsonMissingKeyError>(key);
 
  725    return amountFromJson(field, inner);
 
 
Lightweight wrapper to tag static string.
 
bool isMember(char const *key) const
Return true if the object has a member named key.
 
constexpr TIss const & get() const
 
AccountID const & getIssuer() const
 
constexpr bool holds() const
 
Tracks the number of instances of an object.
 
Floating point representation of amounts with high dynamic range.
 
std::int64_t mantissa() const noexcept
 
A currency issued by an account.
 
constexpr value_type value() const
Returns the underlying value.
 
constexpr int exponent() const noexcept
 
constexpr rep mantissa() const noexcept
 
constexpr bool holds() const noexcept
 
Json::Value getJson(JsonOptions=JsonOptions::none) const override
 
static std::uint64_t const cMaxNativeN
 
STAmount & operator=(beast::Zero)
 
int exponent() const noexcept
 
STBase * move(std::size_t n, void *buf) override
 
Asset const & asset() const
 
static std::uint64_t const cPositive
 
constexpr TIss const & get() const
 
void setIssuer(AccountID const &uIssuer)
 
static int const cMaxOffset
 
static int const cMinOffset
 
Currency const & getCurrency() const
 
friend class detail::STVar
 
static std::uint64_t const cMinValue
 
static std::unique_ptr< STAmount > construct(SerialIter &, SField const &name)
 
void setIssue(Asset const &asset)
Set the Issue for this amount.
 
void setJson(Json::Value &) const
 
bool isDefault() const override
 
void add(Serializer &s) const override
 
static std::uint64_t const cIssuedCurrency
 
static std::uint64_t const cMPToken
 
SerializedTypeID getSType() const override
 
int signum() const noexcept
 
static std::uint64_t const cMaxValue
 
STAmount const & value() const noexcept
 
std::string getText() const override
 
bool negative() const noexcept
 
AccountID const & getIssuer() const
 
bool isEquivalent(STBase const &t) const override
 
STAmount(A const &asset, std::uint64_t mantissa=0, int exponent=0, bool negative=false)
 
STBase * copy(std::size_t n, void *buf) const override
 
static std::uint64_t const cValueMask
 
Issue const & issue() const
 
static std::uint64_t const cMaxNative
 
STAmount(A const &asset, Number const &number)
 
std::uint64_t mantissa() const noexcept
 
std::string getFullText() const override
 
STAmount(SerialIter &sit, SField const &name)
 
bool native() const noexcept
 
STAmount zeroed() const
Returns a zero value with the same issuer and currency.
 
static std::uint64_t const uRateOne
 
A type which can be exported to a well known binary format.
 
JSON (JavaScript Object Notation).
 
ripple::AccountID getOrThrow(Json::Value const &v, ripple::SField const &field)
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
 
bool operator<=(STAmount const &lhs, STAmount const &rhs)
 
STAmount divide(STAmount const &amount, Rate const &rate)
 
bool isXRP(AccountID const &c)
 
bool operator!=(Buffer const &lhs, Buffer const &rhs) noexcept
 
bool canSubtract(STAmount const &amt1, STAmount const &amt2)
Determines if it is safe to subtract one STAmount from another.
 
STAmount divRoundStrict(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)
 
STAmount amountFromJson(SField const &name, Json::Value const &v)
 
bool canAdd(STAmount const &amt1, STAmount const &amt2)
Safely checks if two STAmount values can be added without overflow, underflow, or precision loss.
 
bool isLegalNet(STAmount const &value)
 
constexpr std::enable_if_t< std::is_integral_v< Dest > &&std::is_integral_v< Src >, Dest > safe_cast(Src s) noexcept
 
STAmount toSTAmount(IOUAmount const &iou, Issue const &iss)
 
STAmount amountFromQuality(std::uint64_t rate)
 
STAmount multiply(STAmount const &amount, Rate const &rate)
 
std::uint64_t getRate(STAmount const &offerOut, STAmount const &offerIn)
 
bool operator>(STAmount const &lhs, STAmount const &rhs)
 
bool amountFromJsonNoThrow(STAmount &result, Json::Value const &jvSource)
 
bool operator<(Slice const &lhs, Slice const &rhs) noexcept
 
STAmount divRound(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)
 
Number operator-(Number const &x, Number const &y)
 
STAmount amountFromString(Asset const &asset, std::string const &amount)
 
STAmount mulRound(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)
 
constexpr base_uint< Bits, Tag > operator+(base_uint< Bits, Tag > const &a, base_uint< Bits, Tag > const &b)
 
constexpr bool operator==(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)
 
STAmount mulRoundStrict(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)
 
bool operator>=(STAmount const &lhs, STAmount const &rhs)
 
Zero allows classes to offer efficient comparisons to zero.
 
Note, should be treated as flags that can be | and &.