82 const T old = reference;
86 return ScopeGuard([&reference, old]() { reference = old; });
110 template<
class T,
class V> [[nodiscard]]
static ScopeGuard guardValue(T& reference,
const V& newValue)
112 const T old = reference;
113 reference = newValue;
114 return ScopeGuard([&reference, old]() { reference = old; });
138 template<
class Getter,
class Setter> [[nodiscard]]
141 const auto old = getter();
142 return ScopeGuard([setter, old]() { setter(old); });
169 template<
class Getter,
class Setter> [[nodiscard]]
171 const typename std::result_of<Getter()>::type newValue)
173 const auto old = getter();
175 return ScopeGuard([setter, old]() { setter(old); });
192 typedef typename std::result_of<Functor()>::type value_type;
193 std::function<void(
const value_type&)> setter(functor);
194 const auto old = functor();
195 return ScopeGuard([setter, old] {setter(old);});
211 template<
class Functor> [[nodiscard]]
214 typedef typename std::result_of<Functor()>::type value_type;
215 std::function<void(
const value_type&)> setter(functor);
216 const auto old = functor();
218 return ScopeGuard([setter, old] {setter(old);});
243 return ScopeGuard([&pointer]() {
delete pointer; pointer =
nullptr; });
263 template<
class CharT,
class Traits =
typename std::
char_traits<CharT>> [[nodiscard]]
266 const std::ios::fmtflags flags{stream.flags()};
267 const std::streamsize precision{stream.precision()};
268 const std::streamsize width{stream.width()};
269 const CharT fill{stream.fill()};
273 stream.precision(precision);
300 const std::string old{gSystem->GetWorkingDirectory()};
301 return ScopeGuard([old]() {gSystem->ChangeDirectory(old.c_str());});
327 const std::string old{gSystem->GetWorkingDirectory()};
328 gSystem->ChangeDirectory(newDirectory.c_str());
329 return ScopeGuard([old]() {gSystem->ChangeDirectory(old.c_str());});
356 auto getBatchMode = []() {
357 return gROOT->IsBatch();
360 auto setBatchMode = [](
bool batchMode_) {
361 gROOT->SetBatch(batchMode_);