aboutsummaryrefslogtreecommitdiff
path: root/dep/acelite/ace/Time_Value.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dep/acelite/ace/Time_Value.cpp')
-rw-r--r--dep/acelite/ace/Time_Value.cpp357
1 files changed, 0 insertions, 357 deletions
diff --git a/dep/acelite/ace/Time_Value.cpp b/dep/acelite/ace/Time_Value.cpp
deleted file mode 100644
index 0b13cdedac9..00000000000
--- a/dep/acelite/ace/Time_Value.cpp
+++ /dev/null
@@ -1,357 +0,0 @@
-// $Id: Time_Value.cpp 96061 2012-08-16 09:36:07Z mcorino $
-
-#include "ace/Time_Value.h"
-
-#if !defined (__ACE_INLINE__)
-#include "ace/Time_Value.inl"
-#endif /* __ACE_INLINE__ */
-
-#include "ace/Numeric_Limits.h"
-#include "ace/If_Then_Else.h"
-#include "ace/OS_NS_math.h"
-#include "ace/Time_Policy.h"
-
-#ifdef ACE_HAS_CPP98_IOSTREAMS
-#include <ostream>
-#include <iomanip>
-#endif /* ACE_HAS_CPP98_IOSTREAMS */
-
-ACE_BEGIN_VERSIONED_NAMESPACE_DECL
-
-/// Static constant representing `zero-time'.
-/// Note: this object requires static construction.
-const ACE_Time_Value ACE_Time_Value::zero;
-
-/// Constant for maximum time representable. Note that this time
-/// is not intended for use with select () or other calls that may
-/// have *their own* implementation-specific maximum time representations.
-/// Its primary use is in time computations such as those used by the
-/// dynamic subpriority strategies in the ACE_Dynamic_Message_Queue class.
-/// Note: this object requires static construction.
-const ACE_Time_Value ACE_Time_Value::max_time (
- ACE_Numeric_Limits<time_t>::max (),
- ACE_ONE_SECOND_IN_USECS - 1);
-
-ACE_ALLOC_HOOK_DEFINE (ACE_Time_Value)
-
-ACE_Time_Value::~ACE_Time_Value()
-{}
-
-/// Increment microseconds (the only reason this is here is to allow
-/// the use of ACE_Atomic_Op with ACE_Time_Value).
-ACE_Time_Value
-ACE_Time_Value::operator ++ (int)
-{
- // ACE_OS_TRACE ("ACE_Time_Value::operator ++ (int)");
- ACE_Time_Value tv (*this);
- ++*this;
- return tv;
-}
-
-ACE_Time_Value &
-ACE_Time_Value::operator ++ (void)
-{
- // ACE_OS_TRACE ("ACE_Time_Value::operator ++ (void)");
- this->usec (this->usec () + 1);
- this->normalize ();
- return *this;
-}
-
-/// Decrement microseconds (the only reason this is here is / to allow
-/// the use of ACE_Atomic_Op with ACE_Time_Value).
-ACE_Time_Value
-ACE_Time_Value::operator -- (int)
-{
- // ACE_OS_TRACE ("ACE_Time_Value::operator -- (int)");
- ACE_Time_Value tv (*this);
- --*this;
- return tv;
-}
-
-ACE_Time_Value &
-ACE_Time_Value::operator -- (void)
-{
- // ACE_OS_TRACE ("ACE_Time_Value::operator -- (void)");
- this->usec (this->usec () - 1);
- this->normalize ();
- return *this;
-}
-
-#if defined (ACE_WIN32)
-/// Static constant to remove time skew between FILETIME and POSIX
-/// time. POSIX and Win32 use different epochs (Jan. 1, 1970 v.s.
-/// Jan. 1, 1601). The following constant defines the difference
-/// in 100ns ticks.
-///
-/// In the beginning (Jan. 1, 1601), there was no time and no computer.
-/// And Bill said: "Let there be time," and there was time....
-const DWORDLONG ACE_Time_Value::FILETIME_to_timval_skew =
-ACE_INT64_LITERAL (0x19db1ded53e8000);
-
-/// Initializes the ACE_Time_Value object from a Win32 FILETIME
-ACE_Time_Value::ACE_Time_Value (const FILETIME &file_time)
-{
- // // ACE_OS_TRACE ("ACE_Time_Value::ACE_Time_Value");
- this->set (file_time);
-}
-
-void ACE_Time_Value::set (const FILETIME &file_time)
-{
- // Initializes the ACE_Time_Value object from a Win32 FILETIME
- // Don't use a struct initializer, gcc don't like it.
- ULARGE_INTEGER _100ns;
- _100ns.LowPart = file_time.dwLowDateTime;
- _100ns.HighPart = file_time.dwHighDateTime;
-
- _100ns.QuadPart -= ACE_Time_Value::FILETIME_to_timval_skew;
-
- // Convert 100ns units to seconds;
- this->tv_.tv_sec = (time_t) (_100ns.QuadPart / (10000 * 1000));
- // Convert remainder to microseconds;
- this->tv_.tv_usec = (suseconds_t) ((_100ns.QuadPart % (10000 * 1000)) / 10);
-
- this->normalize ();
-}
-
-/// Returns the value of the object as a Win32 FILETIME.
-ACE_Time_Value::operator FILETIME () const
-{
- FILETIME file_time;
- // ACE_OS_TRACE ("ACE_Time_Value::operator FILETIME");
-
- ULARGE_INTEGER _100ns;
- _100ns.QuadPart = (((DWORDLONG) this->tv_.tv_sec * (10000 * 1000) +
- this->tv_.tv_usec * 10) +
- ACE_Time_Value::FILETIME_to_timval_skew);
-
- file_time.dwLowDateTime = _100ns.LowPart;
- file_time.dwHighDateTime = _100ns.HighPart;
-
- return file_time;
-}
-#endif /* ACE_WIN32 */
-
-ACE_Time_Value
-ACE_Time_Value::now () const
-{
- ACE_System_Time_Policy systp;
- return systp ();
-}
-
-ACE_Time_Value
-ACE_Time_Value::to_relative_time () const
-{
- ACE_System_Time_Policy systp;
- return (*this) - systp ();
-}
-
-ACE_Time_Value
-ACE_Time_Value::to_absolute_time () const
-{
- ACE_System_Time_Policy systp;
- return (*this) + systp ();
-}
-
-ACE_Time_Value *
-ACE_Time_Value::duplicate () const
-{
- ACE_Time_Value * tmp = 0;
- ACE_NEW_RETURN (tmp, ACE_Time_Value (*this), 0);
- return tmp;
-}
-
-void
-ACE_Time_Value::dump (void) const
-{
-}
-
-void
-ACE_Time_Value::normalize (bool saturate)
-{
- // // ACE_OS_TRACE ("ACE_Time_Value::normalize");
- // From Hans Rohnert...
-
- if (this->tv_.tv_usec >= ACE_ONE_SECOND_IN_USECS)
- {
- /*! \todo This loop needs some optimization.
- */
- if (!saturate) // keep the conditionnal expression outside the while loop to minimize performance cost
- do
- {
- ++this->tv_.tv_sec;
- this->tv_.tv_usec -= ACE_ONE_SECOND_IN_USECS;
- }
- while (this->tv_.tv_usec >= ACE_ONE_SECOND_IN_USECS);
- else
- do
- if (this->tv_.tv_sec < ACE_Numeric_Limits<time_t>::max())
- {
- ++this->tv_.tv_sec;
- this->tv_.tv_usec -= ACE_ONE_SECOND_IN_USECS;
- }
- else
- this->tv_.tv_usec = ACE_ONE_SECOND_IN_USECS - 1;
- while (this->tv_.tv_usec >= ACE_ONE_SECOND_IN_USECS);
- }
- else if (this->tv_.tv_usec <= -ACE_ONE_SECOND_IN_USECS)
- {
- /*! \todo This loop needs some optimization.
- */
- if (!saturate)
- do
- {
- --this->tv_.tv_sec;
- this->tv_.tv_usec += ACE_ONE_SECOND_IN_USECS;
- }
- while (this->tv_.tv_usec <= -ACE_ONE_SECOND_IN_USECS);
- else
- do
- if (this->tv_.tv_sec > ACE_Numeric_Limits<time_t>::min())
- {
- --this->tv_.tv_sec;
- this->tv_.tv_usec += ACE_ONE_SECOND_IN_USECS;
- }
- else
- this->tv_.tv_usec = -ACE_ONE_SECOND_IN_USECS + 1;
- while (this->tv_.tv_usec <= -ACE_ONE_SECOND_IN_USECS);
- }
-
- if (this->tv_.tv_sec >= 1 && this->tv_.tv_usec < 0)
- {
- --this->tv_.tv_sec;
- this->tv_.tv_usec += ACE_ONE_SECOND_IN_USECS;
- }
- // tv_sec in qnxnto is unsigned
-#if !defined ( __QNX__)
- else if (this->tv_.tv_sec < 0 && this->tv_.tv_usec > 0)
- {
- ++this->tv_.tv_sec;
- this->tv_.tv_usec -= ACE_ONE_SECOND_IN_USECS;
- }
-#endif /* __QNX__ */
-}
-
-
-ACE_Time_Value &
-ACE_Time_Value::operator *= (double d)
-{
- // To work around the lack of precision of a long double to contain
- // a 64-bits time_t + 6 digits after the decimal point for the usec part,
- // we perform the multiplication of the 2 timeval parts separately.
- //
- // This extra precision step is adding a cost when transfering the
- // seconds resulting from the usec multiplication. This operation
- // correspond to the normalization process performed in normalize()
- // but we must absolutly do it here because the usec multiplication
- // result value could exceed what can be stored in a suseconds_t
- // type variable.
- //
- // Since this is a costly operation, we try to detect as soon as
- // possible if we are having a saturation in order to abort the rest
- // of the computation.
- typedef ACE::If_Then_Else<(sizeof (double) > sizeof (time_t)),
- double,
- long double>::result_type float_type;
-
- float_type sec_total = static_cast<float_type> (this->sec());
- sec_total *= d;
-
- // shall we saturate the result?
- static const float_type max_int =
- ACE_Numeric_Limits<time_t>::max() + 0.999999;
- static const float_type min_int =
- ACE_Numeric_Limits<time_t>::min() - 0.999999;
-
- if (sec_total > max_int)
- {
- this->set(ACE_Numeric_Limits<time_t>::max(), ACE_ONE_SECOND_IN_USECS-1);
- }
- else if (sec_total < min_int)
- {
- this->set(ACE_Numeric_Limits<time_t>::min(), -ACE_ONE_SECOND_IN_USECS+1);
- }
- else
- {
- time_t time_sec = static_cast<time_t> (sec_total);
-
- float_type usec_total = this->usec();
- usec_total *= d;
-
- // adding usec resulting from tv_sec mult
- usec_total += (sec_total-time_sec) * ACE_ONE_SECOND_IN_USECS;
-
- // extract seconds component of the usec mult
- sec_total = usec_total / ACE_ONE_SECOND_IN_USECS;
- // keep remaining usec
- if (sec_total > 0)
- {
- usec_total = (sec_total - ACE_OS::floor(sec_total));
- }
- else
- {
- usec_total = (sec_total - ACE_OS::ceil(sec_total));
- }
-
- sec_total -= usec_total;
- usec_total *= ACE_ONE_SECOND_IN_USECS;
-
- // add the seconds component of the usec mult with the tv_sec mult prod.
- sec_total += time_sec;
-
- // recheck for saturation
- if (sec_total > max_int)
- {
- this->set (ACE_Numeric_Limits<time_t>::max(), ACE_ONE_SECOND_IN_USECS - 1);
- }
- else if (sec_total < min_int)
- {
- this->set (ACE_Numeric_Limits<time_t>::min(), -ACE_ONE_SECOND_IN_USECS + 1);
- }
- else
- {
- time_sec = static_cast<time_t> (sec_total);
- suseconds_t time_usec = static_cast<suseconds_t> (usec_total);
-
- // round up the result to save the last usec
- if (time_usec > 0 && (usec_total - time_usec) >= 0.5)
- {
- ++time_usec;
- }
- else if (time_usec < 0 && (usec_total - time_usec) <= -0.5)
- {
- --time_usec;
- }
-
- this->set (time_sec, time_usec);
- }
- }
- return *this;
-}
-
-#ifdef ACE_HAS_CPP98_IOSTREAMS
-ostream &operator<<(ostream &o, const ACE_Time_Value &v)
-{
- char oldFiller = o.fill ();
- o.fill ('0');
- const timeval *tv = v;
- if (tv->tv_sec)
- {
- o << tv->tv_sec;
- if (tv->tv_usec)
- o << '.' << std::setw (6) << ACE_STD_NAMESPACE::abs (tv->tv_usec);
- }
- else if (tv->tv_usec < 0)
- o << "-0." << std::setw (6) << - tv->tv_usec;
- else
- {
- o << '0';
- if (tv->tv_usec > 0)
- o << '.'<< std::setw (6) << tv->tv_usec;
- }
-
- o.fill (oldFiller);
- return o;
-}
-#endif /* ACE_HAS_CPP98_IOSTREAMS */
-
-ACE_END_VERSIONED_NAMESPACE_DECL