//===-- Timeout.h -----------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_UTILITY_TIMEOUT_H #define LLDB_UTILITY_TIMEOUT_H #include "llvm/Support/Chrono.h" #include "llvm/Support/FormatProviders.h" #include <optional> namespace lldb_private { // A general purpose class for representing timeouts for various APIs. It's // basically an std::optional<std::chrono::duration<int64_t, Ratio>>, but we // customize it a bit to enable the standard chrono implicit conversions (e.g. // from Timeout<std::milli> to Timeout<std::micro>. // // The intended meaning of the values is: // - std::nullopt - no timeout, the call should wait forever - 0 - poll, only // complete the call if it will not block - >0 - wait for a given number of // units for the result template <typename Ratio> class Timeout : public std::optional<std::chrono::duration<int64_t, Ratio>> { … }; } // namespace lldb_private namespace llvm { format_provider<lldb_private::Timeout<Ratio>, void>; } #endif // LLDB_UTILITY_TIMEOUT_H