| //===--------------------- 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_ |