Add move semantics to APInt.

llvm-svn: 157883
This commit is contained in:
Benjamin Kramer 2012-06-02 08:39:08 +00:00
parent cab9603622
commit 539df9ef0a
1 changed files with 23 additions and 0 deletions

View File

@ -16,6 +16,7 @@
#define LLVM_APINT_H
#include "llvm/ADT/ArrayRef.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/MathExtras.h"
#include <cassert>
#include <climits>
@ -273,6 +274,13 @@ public:
initSlowCase(that);
}
#if LLVM_USE_RVALUE_REFERENCES
/// @brief Move Constructor.
APInt(APInt&& that) : BitWidth(that.BitWidth), VAL(that.VAL) {
that.BitWidth = 0;
}
#endif
/// @brief Destructor.
~APInt() {
if (!isSingleWord())
@ -587,6 +595,21 @@ public:
return AssignSlowCase(RHS);
}
#if LLVM_USE_RVALUE_REFERENCES
/// @brief Move assignment operator.
APInt& operator=(APInt&& that) {
if (!isSingleWord())
delete [] pVal;
BitWidth = that.BitWidth;
VAL = that.VAL;
that.BitWidth = 0;
return *this;
}
#endif
/// The RHS value is assigned to *this. If the significant bits in RHS exceed
/// the bit width, the excess bits are truncated. If the bit width is larger
/// than 64, the value is zero filled in the unspecified high order bits.