APFloat: Add a move ctor and operator=

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202883 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2014-03-04 20:26:51 +00:00
parent afee151fe8
commit f0a0ceb034
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();