forked from OSchip/llvm-project
181 lines
4.1 KiB
C++
181 lines
4.1 KiB
C++
//===-- TimeValue.cpp -------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/Host/TimeValue.h"
|
|
#include <stddef.h>
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
|
|
#define NSEC_PER_USEC 1000ull
|
|
#define USEC_PER_SEC 1000000ull
|
|
#define NSEC_PER_SEC 1000000000ull
|
|
|
|
using namespace lldb_private;
|
|
|
|
//----------------------------------------------------------------------
|
|
// TimeValue constructor
|
|
//----------------------------------------------------------------------
|
|
TimeValue::TimeValue() :
|
|
m_nano_seconds (0)
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
// TimeValue copy constructor
|
|
//----------------------------------------------------------------------
|
|
TimeValue::TimeValue(const TimeValue& rhs) :
|
|
m_nano_seconds (rhs.m_nano_seconds)
|
|
{
|
|
}
|
|
|
|
TimeValue::TimeValue(const struct timespec& ts) :
|
|
m_nano_seconds (ts.tv_sec * NSEC_PER_SEC + ts.tv_nsec)
|
|
{
|
|
}
|
|
|
|
TimeValue::TimeValue(const struct timeval& tv) :
|
|
m_nano_seconds (tv.tv_sec * NSEC_PER_SEC + tv.tv_usec * NSEC_PER_USEC)
|
|
{
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
// Destructor
|
|
//----------------------------------------------------------------------
|
|
TimeValue::~TimeValue()
|
|
{
|
|
}
|
|
|
|
|
|
uint64_t
|
|
TimeValue::GetAsNanoSecondsSinceJan1_1970() const
|
|
{
|
|
return m_nano_seconds;
|
|
}
|
|
|
|
uint64_t
|
|
TimeValue::GetAsMicroSecondsSinceJan1_1970() const
|
|
{
|
|
return m_nano_seconds / NSEC_PER_USEC;
|
|
}
|
|
|
|
struct timespec
|
|
TimeValue::GetAsTimeSpec () const
|
|
{
|
|
struct timespec ts;
|
|
ts.tv_sec = m_nano_seconds / NSEC_PER_SEC;
|
|
ts.tv_nsec = m_nano_seconds % NSEC_PER_SEC;
|
|
return ts;
|
|
}
|
|
|
|
struct timeval
|
|
TimeValue::GetAsTimeVal () const
|
|
{
|
|
struct timeval tv;
|
|
tv.tv_sec = m_nano_seconds / NSEC_PER_SEC;
|
|
tv.tv_usec = (m_nano_seconds % NSEC_PER_SEC) / NSEC_PER_USEC;
|
|
return tv;
|
|
}
|
|
|
|
void
|
|
TimeValue::Clear ()
|
|
{
|
|
m_nano_seconds = 0;
|
|
}
|
|
|
|
bool
|
|
TimeValue::IsValid () const
|
|
{
|
|
return m_nano_seconds != 0;
|
|
}
|
|
|
|
void
|
|
TimeValue::OffsetWithSeconds (uint64_t sec)
|
|
{
|
|
m_nano_seconds += sec * NSEC_PER_SEC;
|
|
}
|
|
|
|
void
|
|
TimeValue::OffsetWithMicroSeconds (uint64_t usec)
|
|
{
|
|
m_nano_seconds += usec * NSEC_PER_USEC;
|
|
}
|
|
|
|
void
|
|
TimeValue::OffsetWithNanoSeconds (uint64_t nsec)
|
|
{
|
|
m_nano_seconds += nsec;
|
|
}
|
|
|
|
TimeValue
|
|
TimeValue::Now()
|
|
{
|
|
struct timeval tv;
|
|
gettimeofday(&tv, NULL);
|
|
TimeValue now(tv);
|
|
return now;
|
|
}
|
|
|
|
//----------------------------------------------------------------------
|
|
// TimeValue assignment operator
|
|
//----------------------------------------------------------------------
|
|
const TimeValue&
|
|
TimeValue::operator=(const TimeValue& rhs)
|
|
{
|
|
m_nano_seconds = rhs.m_nano_seconds;
|
|
return *this;
|
|
}
|
|
|
|
|
|
bool
|
|
lldb_private::operator == (const TimeValue &lhs, const TimeValue &rhs)
|
|
{
|
|
return lhs.GetAsNanoSecondsSinceJan1_1970() == rhs.GetAsNanoSecondsSinceJan1_1970();
|
|
}
|
|
|
|
bool
|
|
lldb_private::operator != (const TimeValue &lhs, const TimeValue &rhs)
|
|
{
|
|
return lhs.GetAsNanoSecondsSinceJan1_1970() != rhs.GetAsNanoSecondsSinceJan1_1970();
|
|
}
|
|
|
|
bool
|
|
lldb_private::operator < (const TimeValue &lhs, const TimeValue &rhs)
|
|
{
|
|
return lhs.GetAsNanoSecondsSinceJan1_1970() < rhs.GetAsNanoSecondsSinceJan1_1970();
|
|
}
|
|
|
|
bool
|
|
lldb_private::operator <= (const TimeValue &lhs, const TimeValue &rhs)
|
|
{
|
|
return lhs.GetAsNanoSecondsSinceJan1_1970() <= rhs.GetAsNanoSecondsSinceJan1_1970();
|
|
}
|
|
|
|
bool
|
|
lldb_private::operator > (const TimeValue &lhs, const TimeValue &rhs)
|
|
{
|
|
return lhs.GetAsNanoSecondsSinceJan1_1970() > rhs.GetAsNanoSecondsSinceJan1_1970();
|
|
}
|
|
|
|
bool
|
|
lldb_private::operator >= (const TimeValue &lhs, const TimeValue &rhs)
|
|
{
|
|
return lhs.GetAsNanoSecondsSinceJan1_1970() >= rhs.GetAsNanoSecondsSinceJan1_1970();
|
|
}
|
|
|
|
uint64_t
|
|
lldb_private::operator - (const TimeValue &lhs, const TimeValue &rhs)
|
|
{
|
|
return lhs.GetAsNanoSecondsSinceJan1_1970() - rhs.GetAsNanoSecondsSinceJan1_1970();
|
|
}
|
|
|
|
|