Files
clang-p2996/lldb/source/Utility/TimeSpecTimeout.h
Zachary Turner f343968f5d Delete Host/windows/win32.h
It's always hard to remember when to include this file, and
when you do include it it's hard to remember what preprocessor
check it needs to be behind, and then you further have to remember
whether it's windows.h or win32.h which you need to include.

This patch changes the name to PosixApi.h, which is more appropriately
named, and makes it independent of any preprocessor setting.

There's still the issue of people not knowing when to include this,
because there's not a well-defined set of things it exposes other
than "whatever is missing on Windows", but at least this should
make it less painful to fix when problems arise.

This patch depends on LLVM revision r278170.

llvm-svn: 278177
2016-08-09 23:06:08 +00:00

92 lines
3.2 KiB
C++

//===--------------------- 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/PosixApi.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 nullptr;
return &m_timespec;
}
protected:
struct timespec m_timespec;
bool m_infinite;
};
} // namespace lldb_private
#endif // #ifndef utility_TimeSpecTimeout_h_