diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Utility/TimeSpecTimeout.h')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Utility/TimeSpecTimeout.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/contrib/llvm/tools/lldb/source/Utility/TimeSpecTimeout.h b/contrib/llvm/tools/lldb/source/Utility/TimeSpecTimeout.h new file mode 100644 index 0000000..32cdd06 --- /dev/null +++ b/contrib/llvm/tools/lldb/source/Utility/TimeSpecTimeout.h @@ -0,0 +1,90 @@ +//===--------------------- TimeSpecTimeout.h --------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef utility_TimeSpecTimeout_h_ +#define utility_TimeSpecTimeout_h_ + +#include "lldb/Host/TimeValue.h" + +namespace lldb_private { + +class TimeSpecTimeout +{ +public: + TimeSpecTimeout() : + m_infinite (false) + { + m_timespec.tv_sec = 0; + m_timespec.tv_nsec = 0; + } + ~TimeSpecTimeout() + { + } + + //---------------------------------------------------------------------- + /// Sets the timespec pointer correctly given a timeout relative to the + /// current time. This function should be called immediately prior to + /// calling the function you will use this timeout with since time can + /// elapse between when this function is called and when the timeout is + /// used. + /// + /// @param[in] timeout_usec + /// The timeout in micro seconds. If timeout_usec is UINT32_MAX, the + /// timeout should be set to INFINITE. Otherwise the current time is + /// filled into the timespec and \a timeout_usec is added to the + /// current time. + /// + /// @return + /// If the timeout is INFINITE, then return NULL, otherwise return + /// a pointer to the timespec with the appropriate timeout value. + //---------------------------------------------------------------------- + const struct timespec * + SetAbsoluteTimeoutMircoSeconds32 (uint32_t timeout_usec); + + //---------------------------------------------------------------------- + /// Sets the timespec pointer correctly given a relative time in micro + /// seconds. + /// + /// @param[in] timeout_usec + /// The timeout in micro seconds. If timeout_usec is UINT32_MAX, the + /// timeout should be set to INFINITE. Otherwise \a timeout_usec + /// is correctly placed into the timespec. + /// + /// @return + /// If the timeout is INFINITE, then return NULL, otherwise return + /// a pointer to the timespec with the appropriate timeout value. + //---------------------------------------------------------------------- + const struct timespec * + SetRelativeTimeoutMircoSeconds32 (uint32_t timeout_usec); + + //---------------------------------------------------------------------- + /// Gets the timespec pointer that is appropriate for the timeout + /// specified. This function should only be used after a call to + /// SetRelativeTimeoutXXX() functions. + /// + /// @return + /// If the timeout is INFINITE, then return NULL, otherwise return + /// a pointer to the timespec with the appropriate timeout value. + //---------------------------------------------------------------------- + const struct timespec * + GetTimeSpecPtr () const + { + if (m_infinite) + return NULL; + return &m_timespec; + } + +protected: + struct timespec m_timespec; + bool m_infinite; +}; + +} // namespace lldb_private + +#endif // #ifndef utility_TimeSpecTimeout_h_ |