| /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying | 
 |    file Copyright.txt or https://cmake.org/licensing for details.  */ | 
 | #pragma once | 
 |  | 
 | #include "cmConfigure.h" // IWYU pragma: keep | 
 |  | 
 | #include <string> | 
 |  | 
 | /** \class cmWorkingDirectory | 
 |  * \brief An RAII class to manipulate the working directory. | 
 |  * | 
 |  * The current working directory is set to the location given to the | 
 |  * constructor. The working directory can be changed again as needed | 
 |  * by calling SetDirectory(). When the object is destroyed, the destructor | 
 |  * will restore the working directory to what it was when the object was | 
 |  * created, regardless of any calls to SetDirectory() in the meantime. | 
 |  */ | 
 | class cmWorkingDirectory | 
 | { | 
 | public: | 
 |   cmWorkingDirectory(std::string const& newdir); | 
 |   ~cmWorkingDirectory(); | 
 |  | 
 |   cmWorkingDirectory(const cmWorkingDirectory&) = delete; | 
 |   cmWorkingDirectory& operator=(const cmWorkingDirectory&) = delete; | 
 |  | 
 |   bool SetDirectory(std::string const& newdir); | 
 |   void Pop(); | 
 |   bool Failed() const { return !this->Error.empty(); } | 
 |   std::string const& GetError() const { return this->Error; } | 
 |   std::string const& GetOldDirectory() const { return this->OldDir; } | 
 |  | 
 | private: | 
 |   std::string OldDir; | 
 |   std::string Error; | 
 | }; |