Delay compare ops

This commit is contained in:
James Cherry
2020-07-11 16:24:48 -07:00
parent 894b4887d8
commit 9468da1ae8
26 changed files with 357 additions and 341 deletions
+73 -41
View File
@@ -35,19 +35,6 @@ initDelayConstants()
delay_init_values[MinMax::maxIndex()] = MinMax::max()->initValue();
}
const Delay &
delayInitValue(const MinMax *min_max)
{
return delay_init_values[min_max->index()];
}
bool
delayIsInitValue(const Delay &delay,
const MinMax *min_max)
{
return fuzzyEqual(delay, min_max->initValue());
}
const char *
delayAsString(const Delay &delay,
const StaState *sta)
@@ -73,45 +60,47 @@ delayAsString(const Delay &delay,
return unit->asString(delay, digits);
}
float
delayAsFloat(const Delay &delay,
const EarlyLate *,
const StaState *)
const Delay &
delayInitValue(const MinMax *min_max)
{
return delay;
}
float
delaySigma2(const Delay &,
const EarlyLate *)
{
return 0.0;
return delay_init_values[min_max->index()];
}
bool
fuzzyGreater(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
delayIsInitValue(const Delay &delay,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyGreater(delay1, delay2);
else
return fuzzyLess(delay1, delay2);
return fuzzyEqual(delay, min_max->initValue());
}
bool
fuzzyGreaterEqual(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
delayZero(const Delay &delay)
{
if (min_max == MinMax::max())
return fuzzyGreaterEqual(delay1, delay2);
else
return fuzzyLessEqual(delay1, delay2);
return fuzzyZero(delay);
}
bool
fuzzyLess(const Delay &delay1,
delayInf(const Delay &delay)
{
return fuzzyInf(delay);
}
bool
delayEqual(const Delay &delay1,
const Delay &delay2)
{
return fuzzyEqual(delay1, delay2);
}
bool
delayLess(const Delay &delay1,
const Delay &delay2)
{
return fuzzyLess(delay1, delay2);
}
bool
delayLess(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
@@ -122,7 +111,14 @@ fuzzyLess(const Delay &delay1,
}
bool
fuzzyLessEqual(const Delay &delay1,
delayLessEqual(const Delay &delay1,
const Delay &delay2)
{
return fuzzyLessEqual(delay1, delay2);
}
bool
delayLessEqual(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
@@ -132,6 +128,42 @@ fuzzyLessEqual(const Delay &delay1,
return fuzzyGreaterEqual(delay1, delay2);
}
bool
delayGreater(const Delay &delay1,
const Delay &delay2)
{
return fuzzyGreater(delay1, delay2);
}
bool
delayGreater(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyGreater(delay1, delay2);
else
return fuzzyLess(delay1, delay2);
}
bool
delayGreaterEqual(const Delay &delay1,
const Delay &delay2)
{
return fuzzyGreaterEqual(delay1, delay2);
}
bool
delayGreaterEqual(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyGreaterEqual(delay1, delay2);
else
return fuzzyLessEqual(delay1, delay2);
}
Delay
delayRemove(const Delay &delay1,
const Delay &delay2)
+32 -56
View File
@@ -164,31 +164,7 @@ Delay::operator-=(const Delay &delay)
bool
Delay::operator==(const Delay &delay) const
{
return fuzzyEqual(*this, delay);
}
bool
Delay::operator>(const Delay &delay) const
{
return fuzzyGreater(*this, delay);
}
bool
Delay::operator>=(const Delay &delay) const
{
return fuzzyGreaterEqual(*this, delay);
}
bool
Delay::operator<(const Delay &delay) const
{
return fuzzyLess(*this, delay);
}
bool
Delay::operator<=(const Delay &delay) const
{
return fuzzyLessEqual(*this, delay);
return delayEqual(*this, delay);
}
////////////////////////////////////////////////////////////////
@@ -218,20 +194,20 @@ delayIsInitValue(const Delay &delay,
}
bool
fuzzyZero(const Delay &delay)
delayZero(const Delay &delay)
{
return fuzzyZero(delay.mean())
&& fuzzyZero(delay.sigma2());
}
bool
fuzzyInf(const Delay &delay)
delayInf(const Delay &delay)
{
return fuzzyInf(delay.mean());
}
bool
fuzzyEqual(const Delay &delay1,
delayEqual(const Delay &delay1,
const Delay &delay2)
{
return fuzzyEqual(delay1.mean(), delay2.mean())
@@ -239,7 +215,7 @@ fuzzyEqual(const Delay &delay1,
}
bool
fuzzyLess(const Delay &delay1,
delayLess(const Delay &delay1,
const Delay &delay2)
{
Sta *sta = Sta::sta();
@@ -248,7 +224,7 @@ fuzzyLess(const Delay &delay1,
}
bool
fuzzyLess(const Delay &delay1,
delayLess(const Delay &delay1,
float delay2)
{
Sta *sta = Sta::sta();
@@ -257,7 +233,18 @@ fuzzyLess(const Delay &delay1,
}
bool
fuzzyLessEqual(const Delay &delay1,
delayLess(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return delayLess(delay1, delay2);
else
return delayGreater(delay1, delay2);
}
bool
delayLessEqual(const Delay &delay1,
const Delay &delay2)
{
Sta *sta = Sta::sta();
@@ -266,7 +253,7 @@ fuzzyLessEqual(const Delay &delay1,
}
bool
fuzzyLessEqual(const Delay &delay1,
delayLessEqual(const Delay &delay1,
float delay2)
{
Sta *sta = Sta::sta();
@@ -275,18 +262,18 @@ fuzzyLessEqual(const Delay &delay1,
}
bool
fuzzyLessEqual(const Delay &delay1,
delayLessEqual(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyLessEqual(delay1, delay2);
return delayLessEqual(delay1, delay2);
else
return fuzzyGreaterEqual(delay1, delay2);
return delayGreaterEqual(delay1, delay2);
}
bool
fuzzyGreater(const Delay &delay1,
delayGreater(const Delay &delay1,
const Delay &delay2)
{
Sta *sta = Sta::sta();
@@ -295,7 +282,7 @@ fuzzyGreater(const Delay &delay1,
}
bool
fuzzyGreater(const Delay &delay1,
delayGreater(const Delay &delay1,
float delay2)
{
Sta *sta = Sta::sta();
@@ -304,7 +291,7 @@ fuzzyGreater(const Delay &delay1,
}
bool
fuzzyGreaterEqual(const Delay &delay1,
delayGreaterEqual(const Delay &delay1,
const Delay &delay2)
{
Sta *sta = Sta::sta();
@@ -313,7 +300,7 @@ fuzzyGreaterEqual(const Delay &delay1,
}
bool
fuzzyGreaterEqual(const Delay &delay1,
delayGreaterEqual(const Delay &delay1,
float delay2)
{
Sta *sta = Sta::sta();
@@ -322,36 +309,25 @@ fuzzyGreaterEqual(const Delay &delay1,
}
bool
fuzzyGreater(const Delay &delay1,
delayGreater(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyGreater(delay1, delay2);
return delayGreater(delay1, delay2);
else
return fuzzyLess(delay1, delay2);
return delayLess(delay1, delay2);
}
bool
fuzzyGreaterEqual(const Delay &delay1,
delayGreaterEqual(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyGreaterEqual(delay1, delay2);
return delayGreaterEqual(delay1, delay2);
else
return fuzzyLessEqual(delay1, delay2);
}
bool
fuzzyLess(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyLess(delay1, delay2);
else
return fuzzyGreater(delay1, delay2);
return delayLessEqual(delay1, delay2);
}
float
+38 -60
View File
@@ -24,6 +24,8 @@
#include "Fuzzy.hh"
#include "Units.hh"
#include "StaState.hh"
// temporary hack
#include "Sta.hh"
// SSTA compilation.
#if (SSTA == 2)
@@ -187,30 +189,6 @@ Delay::operator==(const Delay &delay) const
&& sigma2_[late_index] == delay.sigma2_[early_index];
}
bool
Delay::operator>(const Delay &delay) const
{
return mean_ + sqrt(sigma2_late_) > delay.mean_ + sqrt(delay.sigma2_late_);
}
bool
Delay::operator>=(const Delay &delay) const
{
return mean_ + sqrt(sigma2_late_) >= delay.mean_ + sqrt(delay.sigma2_late_);
}
bool
Delay::operator<(const Delay &delay) const
{
return mean_ - sqrt(sigma2_early_) < delay.mean_ - sqrt(delay.sigma2_early_);
}
bool
Delay::operator<=(const Delay &delay) const
{
return mean_ - sqrt(sigma2_early_) <= delay.mean_ - sqrt(delay.sigma2_early_);
}
////////////////////////////////////////////////////////////////
Delay
@@ -234,12 +212,12 @@ delayIsInitValue(const Delay &delay,
const MinMax *min_max)
{
return fuzzyEqual(delay.mean(), min_max->initValue())
&& delay.sigma2Early() == 0.0
&& delay.sigma2Late() == 0.0;
&& fuzzyZero(delay.sigma2Early())
&& fuzzyZero(delay.sigma2Late());
}
bool
fuzzyZero(const Delay &delay)
delayZero(const Delay &delay)
{
return fuzzyZero(delay.mean())
&& fuzzyZero(delay.sigma2Early())
@@ -247,13 +225,13 @@ fuzzyZero(const Delay &delay)
}
bool
fuzzyInf(const Delay &delay)
delayInf(const Delay &delay)
{
return fuzzyInf(delay.mean());
}
bool
fuzzyEqual(const Delay &delay1,
delayEqual(const Delay &delay1,
const Delay &delay2)
{
return fuzzyEqual(delay1.mean(), delay2.mean())
@@ -262,7 +240,7 @@ fuzzyEqual(const Delay &delay1,
}
bool
fuzzyLess(const Delay &delay1,
delayLess(const Delay &delay1,
const Delay &delay2)
{
Sta *sta = Sta::sta();
@@ -271,7 +249,7 @@ fuzzyLess(const Delay &delay1,
}
bool
fuzzyLess(const Delay &delay1,
delayLess(const Delay &delay1,
float delay2)
{
Sta *sta = Sta::sta();
@@ -280,7 +258,18 @@ fuzzyLess(const Delay &delay1,
}
bool
fuzzyLessEqual(const Delay &delay1,
delayLess(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return delayLess(delay1, delay2);
else
return delayGreater(delay1, delay2);
}
bool
delayLessEqual(const Delay &delay1,
const Delay &delay2)
{
Sta *sta = Sta::sta();
@@ -289,8 +278,8 @@ fuzzyLessEqual(const Delay &delay1,
}
bool
fuzzyLessEqual(const Delay &delay1,
float delay2)
delayLessEqual(const Delay &delay1,
float delay2)
{
Sta *sta = Sta::sta();
return fuzzyLessEqual(delayAsFloat(delay1, EarlyLate::early(), sta),
@@ -298,18 +287,18 @@ fuzzyLessEqual(const Delay &delay1,
}
bool
fuzzyLessEqual(const Delay &delay1,
delayLessEqual(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyLessEqual(delay1, delay2);
return delayLessEqual(delay1, delay2);
else
return fuzzyGreaterEqual(delay1, delay2);
return delayGreaterEqual(delay1, delay2);
}
bool
fuzzyGreater(const Delay &delay1,
delayGreater(const Delay &delay1,
const Delay &delay2)
{
Sta *sta = Sta::sta();
@@ -318,7 +307,7 @@ fuzzyGreater(const Delay &delay1,
}
bool
fuzzyGreater(const Delay &delay1,
delayGreater(const Delay &delay1,
float delay2)
{
Sta *sta = Sta::sta();
@@ -327,54 +316,43 @@ fuzzyGreater(const Delay &delay1,
}
bool
fuzzyGreaterEqual(const Delay &delay1,
delayGreaterEqual(const Delay &delay1,
const Delay &delay2)
{
Sta *sta = Sta::sta();
return fuzzyGreaterEqual(delayAsFloat(delay1, EarlyLate::late(), sta),
delay2);
delayAsFloat(delay2, EarlyLate::late(), sta));
}
bool
fuzzyGreaterEqual(const Delay &delay1,
delayGreaterEqual(const Delay &delay1,
float delay2)
{
Sta *sta = Sta::sta();
return fuzzyGreaterEqual(delayAsFloat(delay1, EarlyLate::late(), sta),
return delayGreaterEqual(delayAsFloat(delay1, EarlyLate::late(), sta),
delay2);
}
bool
fuzzyGreater(const Delay &delay1,
delayGreater(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyGreater(delay1, delay2);
return delayGreater(delay1, delay2);
else
return fuzzyLess(delay1, delay2);
return delayLess(delay1, delay2);
}
bool
fuzzyGreaterEqual(const Delay &delay1,
delayGreaterEqual(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyGreaterEqual(delay1, delay2);
return delayGreaterEqual(delay1, delay2);
else
return fuzzyLessEqual(delay1, delay2);
}
bool
fuzzyLess(const Delay &delay1,
const Delay &delay2,
const MinMax *min_max)
{
if (min_max == MinMax::max())
return fuzzyLess(delay1, delay2);
else
return fuzzyGreater(delay1, delay2);
return delayLessEqual(delay1, delay2);
}
float