1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

APFloat: Add a move ctor and operator=

llvm-svn: 202883
This commit is contained in:
Benjamin Kramer 2014-03-04 20:26:51 +00:00
parent ab35110af8
commit 662a42200f
2 changed files with 20 additions and 0 deletions

View File

@ -196,6 +196,7 @@ public:
explicit APFloat(double d);
explicit APFloat(float f);
APFloat(const APFloat &);
APFloat(APFloat &&);
~APFloat();
/// @}
@ -411,6 +412,7 @@ public:
/// @}
APFloat &operator=(const APFloat &);
APFloat &operator=(APFloat &&);
/// \brief Overload to compute a hash code for an APFloat value.
///

View File

@ -683,6 +683,20 @@ APFloat::operator=(const APFloat &rhs)
return *this;
}
APFloat &
APFloat::operator=(APFloat &&rhs) {
freeSignificand();
semantics = rhs.semantics;
significand = rhs.significand;
exponent = rhs.exponent;
category = rhs.category;
sign = rhs.sign;
rhs.semantics = &Bogus;
return *this;
}
bool
APFloat::isDenormal() const {
return isFiniteNonZero() && (exponent == semantics->minExponent) &&
@ -806,6 +820,10 @@ APFloat::APFloat(const APFloat &rhs) {
assign(rhs);
}
APFloat::APFloat(APFloat &&rhs) : semantics(&Bogus) {
*this = std::move(rhs);
}
APFloat::~APFloat()
{
freeSignificand();