File indexing completed on 2026-05-10 08:44:33
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef LLVM_SUPPORT_SAVEANDRESTORE_H
0016 #define LLVM_SUPPORT_SAVEANDRESTORE_H
0017
0018 #include <utility>
0019
0020 namespace llvm {
0021
0022
0023 template <typename T> struct SaveAndRestore {
0024 SaveAndRestore(T &X) : X(X), OldValue(X) {}
0025 SaveAndRestore(T &X, const T &NewValue) : X(X), OldValue(X) { X = NewValue; }
0026 SaveAndRestore(T &X, T &&NewValue) : X(X), OldValue(std::move(X)) {
0027 X = std::move(NewValue);
0028 }
0029 ~SaveAndRestore() { X = std::move(OldValue); }
0030 const T &get() { return OldValue; }
0031
0032 private:
0033 T &X;
0034 T OldValue;
0035 };
0036
0037
0038 template <typename T> SaveAndRestore(T &) -> SaveAndRestore<T>;
0039 template <typename T> SaveAndRestore(T &, const T &) -> SaveAndRestore<T>;
0040 template <typename T> SaveAndRestore(T &, T &&) -> SaveAndRestore<T>;
0041
0042 }
0043
0044 #endif