mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 11:05:54 +00:00
259 lines
6.7 KiB
C++
259 lines
6.7 KiB
C++
//------------------------------------------------------------------------------
|
|
/*
|
|
This file is part of Beast: https://github.com/vinniefalco/Beast
|
|
Copyright 2013, Vinnie Falco <vinnie.falco@gmail.com>
|
|
|
|
Portions of this file are from JUCE.
|
|
Copyright (c) 2013 - Raw Material Software Ltd.
|
|
Please visit http://www.juce.com
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted, provided that the above
|
|
copyright notice and this permission notice appear in all copies.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
//==============================================================================
|
|
|
|
#include "../RelativeTime.h"
|
|
|
|
// VFALCO TODO Migrate the localizable strings interfaces for this file
|
|
|
|
#ifndef NEEDS_TRANS
|
|
#define NEEDS_TRANS(s) (s)
|
|
#endif
|
|
|
|
#ifndef TRANS
|
|
#define TRANS(s) (s)
|
|
#endif
|
|
|
|
namespace beast {
|
|
|
|
RelativeTime::RelativeTime (const double secs) noexcept
|
|
: numSeconds (secs)
|
|
{
|
|
}
|
|
|
|
RelativeTime::RelativeTime (const RelativeTime& other) noexcept
|
|
: numSeconds (other.numSeconds)
|
|
{
|
|
}
|
|
|
|
RelativeTime::~RelativeTime() noexcept {}
|
|
|
|
//==============================================================================
|
|
|
|
RelativeTime RelativeTime::milliseconds (const int milliseconds) noexcept
|
|
{
|
|
return RelativeTime (milliseconds * 0.001);
|
|
}
|
|
|
|
RelativeTime RelativeTime::milliseconds (const int64 milliseconds) noexcept
|
|
{
|
|
return RelativeTime (milliseconds * 0.001);
|
|
}
|
|
|
|
RelativeTime RelativeTime::seconds (double s) noexcept
|
|
{
|
|
return RelativeTime (s);
|
|
}
|
|
|
|
RelativeTime RelativeTime::minutes (const double numberOfMinutes) noexcept
|
|
{
|
|
return RelativeTime (numberOfMinutes * 60.0);
|
|
}
|
|
|
|
RelativeTime RelativeTime::hours (const double numberOfHours) noexcept
|
|
{
|
|
return RelativeTime (numberOfHours * (60.0 * 60.0));
|
|
}
|
|
|
|
RelativeTime RelativeTime::days (const double numberOfDays) noexcept
|
|
{
|
|
return RelativeTime (numberOfDays * (60.0 * 60.0 * 24.0));
|
|
}
|
|
|
|
RelativeTime RelativeTime::weeks (const double numberOfWeeks) noexcept
|
|
{
|
|
return RelativeTime (numberOfWeeks * (60.0 * 60.0 * 24.0 * 7.0));
|
|
}
|
|
|
|
//==============================================================================
|
|
|
|
int64 RelativeTime::inMilliseconds() const noexcept
|
|
{
|
|
return (int64) (numSeconds * 1000.0);
|
|
}
|
|
|
|
double RelativeTime::inMinutes() const noexcept
|
|
{
|
|
return numSeconds / 60.0;
|
|
}
|
|
|
|
double RelativeTime::inHours() const noexcept
|
|
{
|
|
return numSeconds / (60.0 * 60.0);
|
|
}
|
|
|
|
double RelativeTime::inDays() const noexcept
|
|
{
|
|
return numSeconds / (60.0 * 60.0 * 24.0);
|
|
}
|
|
|
|
double RelativeTime::inWeeks() const noexcept
|
|
{
|
|
return numSeconds / (60.0 * 60.0 * 24.0 * 7.0);
|
|
}
|
|
|
|
//==============================================================================
|
|
|
|
RelativeTime& RelativeTime::operator= (const RelativeTime& other) noexcept { numSeconds = other.numSeconds; return *this; }
|
|
|
|
RelativeTime RelativeTime::operator+= (RelativeTime t) noexcept
|
|
{
|
|
numSeconds += t.numSeconds; return *this;
|
|
}
|
|
|
|
RelativeTime RelativeTime::operator-= (RelativeTime t) noexcept
|
|
{
|
|
numSeconds -= t.numSeconds; return *this;
|
|
}
|
|
|
|
RelativeTime RelativeTime::operator+= (const double secs) noexcept
|
|
{
|
|
numSeconds += secs; return *this;
|
|
}
|
|
|
|
RelativeTime RelativeTime::operator-= (const double secs) noexcept
|
|
{
|
|
numSeconds -= secs; return *this;
|
|
}
|
|
|
|
RelativeTime operator+ (RelativeTime t1, RelativeTime t2) noexcept
|
|
{
|
|
return t1 += t2;
|
|
}
|
|
|
|
RelativeTime operator- (RelativeTime t1, RelativeTime t2) noexcept
|
|
{
|
|
return t1 -= t2;
|
|
}
|
|
|
|
bool operator== (RelativeTime t1, RelativeTime t2) noexcept
|
|
{
|
|
return t1.inSeconds() == t2.inSeconds();
|
|
}
|
|
|
|
bool operator!= (RelativeTime t1, RelativeTime t2) noexcept
|
|
{
|
|
return t1.inSeconds() != t2.inSeconds();
|
|
}
|
|
|
|
bool operator> (RelativeTime t1, RelativeTime t2) noexcept
|
|
{
|
|
return t1.inSeconds() > t2.inSeconds();
|
|
}
|
|
|
|
bool operator< (RelativeTime t1, RelativeTime t2) noexcept
|
|
{
|
|
return t1.inSeconds() < t2.inSeconds();
|
|
}
|
|
|
|
bool operator>= (RelativeTime t1, RelativeTime t2) noexcept
|
|
{
|
|
return t1.inSeconds() >= t2.inSeconds();
|
|
}
|
|
|
|
bool operator<= (RelativeTime t1, RelativeTime t2) noexcept
|
|
{
|
|
return t1.inSeconds() <= t2.inSeconds();
|
|
}
|
|
|
|
//==============================================================================
|
|
|
|
static void translateTimeField (String& result, int n, const char* singular, const char* plural)
|
|
{
|
|
result << TRANS (String((n == 1) ? singular : plural))
|
|
.replace (n == 1 ? "1" : "2", String (n))
|
|
<< ' ';
|
|
}
|
|
|
|
String RelativeTime::getDescription (const String& returnValueForZeroTime) const
|
|
{
|
|
if (numSeconds < 0.001 && numSeconds > -0.001)
|
|
return returnValueForZeroTime;
|
|
|
|
String result;
|
|
result.preallocateBytes (32);
|
|
|
|
if (numSeconds < 0)
|
|
result << '-';
|
|
|
|
int fieldsShown = 0;
|
|
int n = std::abs ((int) inWeeks());
|
|
if (n > 0)
|
|
{
|
|
translateTimeField (result, n, NEEDS_TRANS("1 week"), NEEDS_TRANS("2 weeks"));
|
|
++fieldsShown;
|
|
}
|
|
|
|
n = std::abs ((int) inDays()) % 7;
|
|
if (n > 0)
|
|
{
|
|
translateTimeField (result, n, NEEDS_TRANS("1 day"), NEEDS_TRANS("2 days"));
|
|
++fieldsShown;
|
|
}
|
|
|
|
if (fieldsShown < 2)
|
|
{
|
|
n = std::abs ((int) inHours()) % 24;
|
|
if (n > 0)
|
|
{
|
|
translateTimeField (result, n, NEEDS_TRANS("1 hour"), NEEDS_TRANS("2 hours"));
|
|
++fieldsShown;
|
|
}
|
|
|
|
if (fieldsShown < 2)
|
|
{
|
|
n = std::abs ((int) inMinutes()) % 60;
|
|
if (n > 0)
|
|
{
|
|
translateTimeField (result, n, NEEDS_TRANS("1 minute"), NEEDS_TRANS("2 minutes"));
|
|
++fieldsShown;
|
|
}
|
|
|
|
if (fieldsShown < 2)
|
|
{
|
|
n = std::abs ((int) inSeconds()) % 60;
|
|
if (n > 0)
|
|
{
|
|
translateTimeField (result, n, NEEDS_TRANS("1 seconds"), NEEDS_TRANS("2 seconds"));
|
|
++fieldsShown;
|
|
}
|
|
|
|
if (fieldsShown == 0)
|
|
{
|
|
n = std::abs ((int) inMilliseconds()) % 1000;
|
|
if (n > 0)
|
|
result << n << ' ' << TRANS ("ms");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return result.trimEnd();
|
|
}
|
|
|
|
std::string RelativeTime::to_string () const
|
|
{
|
|
return getDescription ().toStdString();
|
|
}
|
|
|
|
}
|