Add Rate class to support scaling of IOU and XRP amounts

This commit is contained in:
Nik Bougalis
2015-08-23 09:22:34 -07:00
parent 324c42ae09
commit b0e6be93ff
6 changed files with 120 additions and 1 deletions

View File

@@ -2799,6 +2799,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple\protocol\impl\Rate2.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\src\ripple\protocol\impl\RippleAddress.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug|x64'">True</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release|x64'">True</ExcludedFromBuild>
@@ -2921,6 +2925,8 @@
</ClInclude>
<ClInclude Include="..\..\src\ripple\protocol\Quality.h">
</ClInclude>
<ClInclude Include="..\..\src\ripple\protocol\Rate.h">
</ClInclude>
<None Include="..\..\src\ripple\protocol\README.md">
</None>
<ClInclude Include="..\..\src\ripple\protocol\RippleAddress.h">

View File

@@ -3501,6 +3501,9 @@
<ClCompile Include="..\..\src\ripple\protocol\impl\Quality.cpp">
<Filter>ripple\protocol\impl</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\protocol\impl\Rate2.cpp">
<Filter>ripple\protocol\impl</Filter>
</ClCompile>
<ClCompile Include="..\..\src\ripple\protocol\impl\RippleAddress.cpp">
<Filter>ripple\protocol\impl</Filter>
</ClCompile>
@@ -3612,6 +3615,9 @@
<ClInclude Include="..\..\src\ripple\protocol\Quality.h">
<Filter>ripple\protocol</Filter>
</ClInclude>
<ClInclude Include="..\..\src\ripple\protocol\Rate.h">
<Filter>ripple\protocol</Filter>
</ClInclude>
<None Include="..\..\src\ripple\protocol\README.md">
<Filter>ripple\protocol</Filter>
</None>

View File

@@ -74,7 +74,7 @@ operator!= (Amounts const& lhs, Amounts const& rhs) noexcept
//------------------------------------------------------------------------------
// Ripple specific constant used for parsing qualities and other things
#define QUALITY_ONE 1000000000 // 10e9
#define QUALITY_ONE 1000000000
/** Represents the logical ratio of output currency to input currency.
Internally this is stored using a custom floating point representation,

View File

@@ -0,0 +1,78 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
Copyright (c) 2015 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
//==============================================================================
#ifndef RIPPLE_PROTOCOL_RATE_H_INCLUDED
#define RIPPLE_PROTOCOL_RATE_H_INCLUDED
#include <ripple/protocol/STAmount.h>
#include <beast/utility/noexcept.h>
#include <boost/operators.hpp>
#include <cassert>
#include <cstdint>
#include <ostream>
namespace ripple {
/** Represents a transfer rate
Transfer rates are specified as fractions of 1 billion. For example, a
transfer rate of 1% is represented as 1010000000.
*/
struct Rate
: private boost::totally_ordered <Rate>
{
std::uint32_t value;
Rate () = default;
Rate (std::uint32_t rate)
: value (rate)
{
assert (rate != 0);
}
};
inline
bool
operator== (Rate const& lhs, Rate const& rhs) noexcept
{
return lhs.value == rhs.value;
}
inline
bool
operator< (Rate const& lhs, Rate const& rhs) noexcept
{
return lhs.value < rhs.value;
}
inline
std::ostream&
operator<< (std::ostream& os, Rate const& rate)
{
os << rate.value;
return os;
}
/** A transfer rate signifying a 1:1 exchange */
extern Rate const parityRate;
}
#endif

View File

@@ -0,0 +1,28 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
Copyright (c) 2015 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
//==============================================================================
#include <BeastConfig.h>
#include <ripple/protocol/Quality.h>
#include <ripple/protocol/Rate.h>
namespace ripple {
Rate const parityRate (QUALITY_ONE);
}

View File

@@ -31,6 +31,7 @@
#include <ripple/protocol/impl/LedgerFormats.cpp>
#include <ripple/protocol/impl/PublicKey.cpp>
#include <ripple/protocol/impl/Quality.cpp>
#include <ripple/protocol/impl/Rate2.cpp>
#include <ripple/protocol/impl/RippleAddress.cpp>
#include <ripple/protocol/impl/SecretKey.cpp>
#include <ripple/protocol/impl/Serializer.cpp>