##// END OF EJS Templates
Added true single threshold cache strategy and it behaves as expected...
Added true single threshold cache strategy and it behaves as expected Signed-off-by: Alexis Jeandet <alexis.jeandet@member.fsf.org>

File last commit:

r12:4e36a737f884
r12:4e36a737f884
Show More
DateTimeRangeHelper.h
62 lines | 2.1 KiB | text/x-c | CLexer
/ include / Data / DateTimeRangeHelper.h
Added more features in DateTimeRange to prepare variable synchronization...
r8 #ifndef SCIQLOP_DATETIMERANGEHELPER_H
#define SCIQLOP_DATETIMERANGEHELPER_H
#include <cmath>
Added true single threshold cache strategy and it behaves as expected...
r12 #include <variant>
Added more features in DateTimeRange to prepare variable synchronization...
r8 #include <QObject>
#include <QDebug>
#include <opaque/numeric_typedef.hpp>
#include <Common/DateUtils.h>
#include <Common/MetaTypes.h>
#include <Common/Numeric.h>
#include <Data/DateTimeRange.h>
namespace DateTimeRangeHelper {
Added basic usage of cache in VC, not tested yet...
r10 bool isnan(const DateTimeRange& range)
{
return std::isnan(range.m_TStart) && std::isnan(range.m_TEnd);
}
bool hasnan(const DateTimeRange& range)
{
return std::isnan(range.m_TStart) || std::isnan(range.m_TEnd);
}
Added more features in DateTimeRange to prepare variable synchronization...
r8
bool isPureShift(const DateTimeRange& range1, const DateTimeRange& range2)
{
Many fixes plus implemented var synchronization...
r9 return SciQLop::numeric::almost_equal<double>(range1.delta(), range2.delta(), 1)
&& !SciQLop::numeric::almost_equal(range1.m_TStart, range2.m_TStart, 1);
Added more features in DateTimeRange to prepare variable synchronization...
r8 }
bool isPureZoom(const DateTimeRange& range1, const DateTimeRange& range2)
{
Many fixes plus implemented var synchronization...
r9 return !SciQLop::numeric::almost_equal<double>(range1.delta(),range2.delta(),1)&&
SciQLop::numeric::almost_equal<double>(range1.center(), range2.center(),1);
Added more features in DateTimeRange to prepare variable synchronization...
r8 }
/**
* @brief computeTransformation such as range2 = zoom*range1 + shift
* @param range1
* @param range2
Many fixes plus implemented var synchronization...
r9 * @return trnaformation applied to range1 to get range2 or an object of type
* InvalidDateTimeRangeTransformation if the transformation has NaN or forbiden values
Added more features in DateTimeRange to prepare variable synchronization...
r8 */
Many fixes plus implemented var synchronization...
r9 std::variant<DateTimeRangeTransformation, InvalidDateTimeRangeTransformation>
computeTransformation(const DateTimeRange& range1, const DateTimeRange& range2)
Added more features in DateTimeRange to prepare variable synchronization...
r8 {
Many fixes plus implemented var synchronization...
r9 double zoom = range2.delta()/range1.delta();
Seconds<double> shift = range2.center() - (range1*zoom).center();
bool zoomValid = zoom!=0. && !std::isnan(zoom) && !std::isinf(zoom);
bool shiftValid = !std::isnan(shift.value) && !std::isinf(shift.value);
if(zoomValid && shiftValid)
return DateTimeRangeTransformation{zoom, shift};
return InvalidDateTimeRangeTransformation{};
Added more features in DateTimeRange to prepare variable synchronization...
r8 }
}
#endif // SCIQLOP_DATETIMERANGEHELPER_H