/* * Copyright (C) 2015-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include #include namespace fs = std::filesystem; // Creates a new empty directory with arbitrary name, which will be removed // automatically when tmpdir object goes out of scope. class tmpdir { fs::path _path; bool _preserve_on_exception = false; private: void remove() noexcept; class sweeper { const tmpdir& _tmpd; public: sweeper(const tmpdir& t) noexcept : _tmpd(t) {} ~sweeper(); }; public: tmpdir(); tmpdir(tmpdir&& other) noexcept; tmpdir(const tmpdir&) = delete; void operator=(tmpdir&& other) noexcept; void operator=(const tmpdir&) = delete; ~tmpdir(); const fs::path& path() const noexcept { return _path; } sweeper make_sweeper() const noexcept { return sweeper(*this); } void preserve_on_exception(bool p) { _preserve_on_exception = p; } };