Skip to content

Commit c13b50d

Browse files
Updated fractional second operations to use integer division
1 parent 2d25d57 commit c13b50d

File tree

2 files changed

+9
-12
lines changed

2 files changed

+9
-12
lines changed

src/lib/CommonTypes.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
// ReSharper disable CppClangTidyClangDiagnosticExitTimeDestructors
2525
// ReSharper disable CppClangTidyClangDiagnosticSwitchEnum
2626
// ReSharper disable CppClangTidyClangDiagnosticCoveredSwitchDefault
27-
2827
#include "CommonTypes.h"
2928
#include <boost/algorithm/string.hpp>
3029
#include <boost/algorithm/string/case_conv.hpp>
@@ -394,9 +393,9 @@ int32_t sttp::DateDiff(const datetime_t& startTime, const datetime_t& endTime, c
394393
}
395394
}
396395

397-
int32_t sttp::DatePart(const datetime_t& value, TimeInterval interval)
396+
int32_t sttp::DatePart(const datetime_t& value, const TimeInterval interval)
398397
{
399-
static int64_t tickInterval = static_cast<int64_t>(pow(10LL, TimeSpan::num_fractional_digits()));
398+
static const int64_t tickInterval = static_cast<int64_t>(pow(10LL, TimeSpan::num_fractional_digits()));
400399

401400
switch (interval)
402401
{
@@ -419,7 +418,7 @@ int32_t sttp::DatePart(const datetime_t& value, TimeInterval interval)
419418
case TimeInterval::Second:
420419
return static_cast<int32_t>(value.time_of_day().seconds());
421420
case TimeInterval::Millisecond:
422-
return static_cast<int32_t>(value.time_of_day().fractional_seconds() / tickInterval * 1000LL);
421+
return static_cast<int32_t>(value.time_of_day().fractional_seconds() * 1000LL / tickInterval);
423422
default:
424423
throw runtime_error("Unexpected time interval encountered");
425424
}

src/lib/Convert.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
//******************************************************************************************************
2323

2424
// ReSharper disable CppClangTidyClangDiagnosticExitTimeDestructors
25-
2625
#include "Convert.h"
2726
#include <iomanip>
2827
#include <sstream>
@@ -44,7 +43,7 @@ using namespace boost::gregorian;
4443
using namespace sttp;
4544

4645
const datetime_t DateTimeEpoch(date(1400, 1, 1), TimeSpan(0, 0, 0));
47-
const auto DateTimeTicksPerSecond = TimeSpan::ticks_per_second();
46+
const int64_t DateTimeTicksPerSecond = TimeSpan::ticks_per_second();
4847

4948
inline int GetRadix(const string& value)
5049
{
@@ -181,18 +180,17 @@ datetime_t sttp::FromUnixTime(const time_t unixSOC, const uint16_t milliseconds)
181180

182181
datetime_t sttp::FromTicks(const int64_t ticks)
183182
{
184-
static float64_t ticksPerSecondF = static_cast<float64_t>(Ticks::PerSecond);
185183
const datetime_t time = from_time_t((ticks - Ticks::UnixBaseOffset) / Ticks::PerSecond);
186-
const int64_t pticks = static_cast<int64_t>(ticks % Ticks::PerSecond / ticksPerSecondF * DateTimeTicksPerSecond); // NOLINT
184+
const int64_t pticks = static_cast<int64_t>(ticks % Ticks::PerSecond * DateTimeTicksPerSecond / Ticks::PerSecond);
187185
return time + TimeSpan(0, 0, 0, pticks % DateTimeTicksPerSecond);
188186
}
189187

190188
int64_t sttp::ToTicks(const datetime_t& time)
191189
{
192-
static int64_t tickInterval = static_cast<int64_t>(pow(10LL, TimeSpan::num_fractional_digits()));
190+
static const int64_t tickInterval = static_cast<int64_t>(pow(10LL, TimeSpan::num_fractional_digits()));
193191
const TimeSpan offset = time - DateTimeEpoch;
194192
return Ticks::PTimeBaseOffset + offset.total_seconds() * Ticks::PerSecond +
195-
static_cast<int64_t>(offset.fractional_seconds() / tickInterval * Ticks::PerSecond);
193+
static_cast<int64_t>(offset.fractional_seconds() * Ticks::PerSecond / tickInterval);
196194
}
197195

198196
bool sttp::TimestampIsReasonable(const int64_t value, const float64_t lagTime, const float64_t leadTime, const bool utc)
@@ -471,7 +469,7 @@ bool sttp::TryParseUInt64(const string& value, uint64_t& result, const uint64_t
471469
{
472470
try
473471
{
474-
result = stoull(value);
472+
result = stoull(value, nullptr, GetRadix(value));
475473
return true;
476474
}
477475
catch (...)
@@ -495,7 +493,7 @@ bool sttp::TryParseDouble(const string& value, float64_t& result, const float64_
495493
}
496494
}
497495

498-
bool sttp::TryParseDecimal(const string& value, decimal_t& result, const decimal_t defaultValue)
496+
bool sttp::TryParseDecimal(const string& value, decimal_t& result, const decimal_t defaultValue) // NOLINT
499497
{
500498
try
501499
{

0 commit comments

Comments
 (0)