|  | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying | 
|  | file Copyright.txt or https://cmake.org/licensing#kwsys for details.  */ | 
|  | #ifndef @KWSYS_NAMESPACE@_Status_hxx | 
|  | #define @KWSYS_NAMESPACE@_Status_hxx | 
|  |  | 
|  | #include <@KWSYS_NAMESPACE@/Configure.hxx> | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | /* | 
|  | * Detect a symbol collision with the name of this class. X11 headers use | 
|  | * `#define Status int` instead of using `typedef` which poisons any other | 
|  | * usage of this name. | 
|  | */ | 
|  | #if defined(Status) && defined(_X11_XLIB_H_) | 
|  | #  error                                                                      \ | 
|  | "Status.hxx must be included *before* any X11 headers to avoid a collision with the `Status` define that is made in its API." | 
|  | #endif | 
|  |  | 
|  | namespace @KWSYS_NAMESPACE@ { | 
|  |  | 
|  | /** \class Status | 
|  | * \brief OS-specific status of a system operation. | 
|  | */ | 
|  | class @KWSYS_NAMESPACE@_EXPORT Status | 
|  | { | 
|  | public: | 
|  | enum class Kind | 
|  | { | 
|  | Success, | 
|  | POSIX, | 
|  | #ifdef _WIN32 | 
|  | Windows, | 
|  | #endif | 
|  | }; | 
|  |  | 
|  | /** Construct with kind "Success".  */ | 
|  | Status() = default; | 
|  |  | 
|  | /** Construct with kind "Success".  */ | 
|  | static Status Success() { return Status(); } | 
|  |  | 
|  | /** Construct with kind "POSIX" using given errno-style value.  */ | 
|  | static Status POSIX(int e) | 
|  | { | 
|  | Status s(Kind::POSIX); | 
|  | s.POSIX_ = e; | 
|  | return s; | 
|  | } | 
|  |  | 
|  | /** Construct with kind "POSIX" using errno.  */ | 
|  | static Status POSIX_errno(); | 
|  |  | 
|  | #ifdef _WIN32 | 
|  | /** Construct with kind "Windows" using given GetLastError()-style value.  */ | 
|  | static Status Windows(unsigned int e) | 
|  | { | 
|  | Status s(Kind::Windows); | 
|  | s.Windows_ = e; | 
|  | return s; | 
|  | } | 
|  |  | 
|  | /** Construct with kind "Windows" using GetLastError().  */ | 
|  | static Status Windows_GetLastError(); | 
|  | #endif | 
|  |  | 
|  | /** Return true on "Success", false otherwise.  */ | 
|  | bool IsSuccess() const { return this->Kind_ == Kind::Success; } | 
|  |  | 
|  | /** Return true on "Success", false otherwise.  */ | 
|  | explicit operator bool() const { return this->IsSuccess(); } | 
|  |  | 
|  | /** Return the kind of status.  */ | 
|  | Kind GetKind() const { return this->Kind_; } | 
|  |  | 
|  | /** If the kind is "POSIX", returns the errno-style value. | 
|  | Otherwise, returns 0.  */ | 
|  | int GetPOSIX() const | 
|  | { | 
|  | return this->Kind_ == Kind::POSIX ? this->POSIX_ : 0; | 
|  | } | 
|  |  | 
|  | #ifdef _WIN32 | 
|  | /** If the kind is "Windows", returns the GetLastError()-style value. | 
|  | Otherwise, returns 0.  */ | 
|  | unsigned int GetWindows() const | 
|  | { | 
|  | return this->Kind_ == Kind::Windows ? this->Windows_ : 0; | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /** Return a human-readable description of the status.  */ | 
|  | std::string GetString() const; | 
|  |  | 
|  | private: | 
|  | Status(Kind kind) | 
|  | : Kind_(kind) | 
|  | { | 
|  | } | 
|  |  | 
|  | Kind Kind_ = Kind::Success; | 
|  |  | 
|  | union | 
|  | { | 
|  | int POSIX_; | 
|  | #ifdef _WIN32 | 
|  | unsigned int Windows_; | 
|  | #endif | 
|  | }; | 
|  | }; | 
|  |  | 
|  | } // namespace @KWSYS_NAMESPACE@ | 
|  |  | 
|  | #endif |