Skip to content

Commit 9eaeabd

Browse files
committed
added diff/dist separation in condition number comparator
1 parent a59a3d8 commit 9eaeabd

File tree

2 files changed

+151
-145
lines changed

2 files changed

+151
-145
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,105 @@
1-
/*
2-
==============================================================================
3-
4-
NumberComparators.cpp
5-
Created: 2 Nov 2016 8:57:34pm
6-
Author: bkupe
7-
8-
==============================================================================
9-
*/
10-
11-
NumberComparator::NumberComparator(Parameter* sourceParam, Multiplex* multiplex) :
12-
BaseComparator(multiplex),
13-
isFloat(dynamic_cast<FloatParameter*>(sourceParam) != nullptr)
14-
{
15-
16-
sourceRange.append(sourceParam->minimumValue);
17-
sourceRange.append(sourceParam->maximumValue);
18-
19-
setupReferenceParam();
20-
reference->setValue(sourceParam->floatValue(), false, true, true);
21-
if (isFloat)((FloatParameter*)reference)->defaultUI = ((FloatParameter*)sourceParam)->defaultUI;
22-
23-
addCompareOption("=", equalsId);
24-
addCompareOption("!=", differentId);
25-
addCompareOption(">", greaterId);
26-
addCompareOption("<", lessId);
27-
addCompareOption(">=", greaterOrEqualId);
28-
addCompareOption("<=", lessOrEqualId);
29-
addCompareOption("Modulo =", moduloEqualId);
30-
addCompareOption("Modulo >", moduloGreaterId);
31-
addCompareOption("Modulo <", moduloLessId);
32-
addCompareOption("Floor =", floorEqualId);
33-
addCompareOption("Floor >", floorGreaterId);
34-
addCompareOption("Floor <", floorLessId);
35-
addCompareOption("Diff >", diffGreaterId);
36-
addCompareOption("Diff <", diffLessId);
37-
addCompareOption("Range", inRangeId);
38-
addCompareOption("Change", changeId);
39-
}
40-
41-
NumberComparator::~NumberComparator()
42-
{
43-
}
44-
45-
void NumberComparator::compareFunctionChanged()
46-
{
47-
setupReferenceParam();
48-
}
49-
50-
void NumberComparator::setupReferenceParam()
51-
{
52-
if (currentFunctionId == inRangeId || currentFunctionId.toString().contains("%") || currentFunctionId.toString().contains("f"))
53-
{
54-
Point2DParameter* p2d = new Point2DParameter("Reference", "Comparison Reference to check against source value");
55-
p2d->setBounds(sourceRange[0], sourceRange[0], sourceRange[1], sourceRange[1]);
56-
if (currentFunctionId != inRangeId) p2d->setPoint(2, 0);
57-
setReferenceParam(p2d);
58-
}
59-
else
60-
{
61-
if (isFloat)
62-
{
63-
if (reference == nullptr || reference->type != Parameter::FLOAT)
64-
{
65-
setReferenceParam(new FloatParameter("Reference", "Comparison Reference to check against source value", 0, sourceRange[0], sourceRange[1]));
66-
}
67-
}
68-
else if (reference == nullptr || reference->type != Parameter::INT)
69-
{
70-
setReferenceParam(new IntParameter("Reference", "Comparison Reference to check against source value", 0, sourceRange[0], sourceRange[1]));
71-
}
72-
}
73-
}
74-
75-
bool NumberComparator::compareInternal(Parameter* sourceParam, int multiplexIndex)
76-
{
77-
var value = isMultiplexed() ? refLink->getLinkedValue(multiplexIndex) : reference->getValue();
78-
79-
if (currentFunctionId == equalsId) return sourceParam->floatValue() == (float)value;
80-
else if (currentFunctionId == differentId) return sourceParam->floatValue() != (float)value;
81-
else if (currentFunctionId == greaterId) return sourceParam->floatValue() > (float)value;
82-
else if (currentFunctionId == lessId) return sourceParam->floatValue() < (float)value;
83-
else if (currentFunctionId == greaterOrEqualId) return sourceParam->floatValue() >= (float)value;
84-
else if (currentFunctionId == lessOrEqualId) return sourceParam->floatValue() <= (float)value;
85-
else if (currentFunctionId == moduloEqualId) return (float)value[0] == 0 ? false : fmodf(sourceParam->floatValue(), (float)value[0]) == (float)value[1];
86-
else if (currentFunctionId == moduloGreaterId) return (float)value[0] == 0 ? false : fmodf(sourceParam->floatValue(), (float)value[0]) > (float)value[1];
87-
else if (currentFunctionId == moduloLessId) return (float)value[0] == 0 ? false : fmodf(sourceParam->floatValue(), (float)value[0]) < (float)value[1];
88-
else if (currentFunctionId == floorEqualId) return (float)value[0] == 0 ? false : floorf(sourceParam->floatValue() / (float)value[0]) == (float)value[1];
89-
else if (currentFunctionId == floorGreaterId) return (float)value[0] == 0 ? false : floorf(sourceParam->floatValue() / (float)value[0]) >(float)value[1];
90-
else if (currentFunctionId == floorLessId) return (float)value[0] == 0 ? false : floorf(sourceParam->floatValue() / (float)value[0]) < (float)value[1];
91-
else if (currentFunctionId == inRangeId) return sourceParam->floatValue() >= (float)value[0] && sourceParam->floatValue() <= (float)value[1];
92-
else if (currentFunctionId == diffGreaterId || currentFunctionId == diffLessId)
93-
{
94-
prevValues.ensureStorageAllocated(multiplexIndex + 1);
95-
float diff = fabsf(sourceParam->floatValue() - prevValues[multiplexIndex]);
96-
bool result = currentFunctionId == diffGreaterId ? diff > (float)value : diff < (float)value;
97-
prevValues.set(multiplexIndex, sourceParam->floatValue());
98-
return result;
99-
}
100-
return false;
1+
/*
2+
==============================================================================
3+
4+
NumberComparators.cpp
5+
Created: 2 Nov 2016 8:57:34pm
6+
Author: bkupe
7+
8+
==============================================================================
9+
*/
10+
11+
NumberComparator::NumberComparator(Parameter* sourceParam, Multiplex* multiplex) :
12+
BaseComparator(multiplex),
13+
isFloat(dynamic_cast<FloatParameter*>(sourceParam) != nullptr)
14+
{
15+
16+
sourceRange.append(sourceParam->minimumValue);
17+
sourceRange.append(sourceParam->maximumValue);
18+
19+
setupReferenceParam();
20+
reference->setValue(sourceParam->floatValue(), false, true, true);
21+
if (isFloat)((FloatParameter*)reference)->defaultUI = ((FloatParameter*)sourceParam)->defaultUI;
22+
23+
addCompareOption("=", equalsId);
24+
addCompareOption("!=", differentId);
25+
addCompareOption(">", greaterId);
26+
addCompareOption("<", lessId);
27+
addCompareOption(">=", greaterOrEqualId);
28+
addCompareOption("<=", lessOrEqualId);
29+
addCompareOption("Modulo =", moduloEqualId);
30+
addCompareOption("Modulo >", moduloGreaterId);
31+
addCompareOption("Modulo <", moduloLessId);
32+
addCompareOption("Floor =", floorEqualId);
33+
addCompareOption("Floor >", floorGreaterId);
34+
addCompareOption("Floor <", floorLessId);
35+
addCompareOption("Diff >", diffGreaterId);
36+
addCompareOption("Diff <", diffLessId);
37+
addCompareOption("Dist >", distGreaterId);
38+
addCompareOption("Dist <", distLessId);
39+
addCompareOption("Range", inRangeId);
40+
addCompareOption("Change", changeId);
41+
}
42+
43+
NumberComparator::~NumberComparator()
44+
{
45+
}
46+
47+
void NumberComparator::compareFunctionChanged()
48+
{
49+
setupReferenceParam();
50+
}
51+
52+
void NumberComparator::setupReferenceParam()
53+
{
54+
if (currentFunctionId == inRangeId || currentFunctionId.toString().contains("%") || currentFunctionId.toString().contains("f"))
55+
{
56+
Point2DParameter* p2d = new Point2DParameter("Reference", "Comparison Reference to check against source value");
57+
p2d->setBounds(sourceRange[0], sourceRange[0], sourceRange[1], sourceRange[1]);
58+
if (currentFunctionId != inRangeId) p2d->setPoint(2, 0);
59+
setReferenceParam(p2d);
60+
}
61+
else
62+
{
63+
if (isFloat)
64+
{
65+
if (reference == nullptr || reference->type != Parameter::FLOAT)
66+
{
67+
setReferenceParam(new FloatParameter("Reference", "Comparison Reference to check against source value", 0, sourceRange[0], sourceRange[1]));
68+
}
69+
}
70+
else if (reference == nullptr || reference->type != Parameter::INT)
71+
{
72+
setReferenceParam(new IntParameter("Reference", "Comparison Reference to check against source value", 0, sourceRange[0], sourceRange[1]));
73+
}
74+
}
75+
}
76+
77+
bool NumberComparator::compareInternal(Parameter* sourceParam, int multiplexIndex)
78+
{
79+
var value = isMultiplexed() ? refLink->getLinkedValue(multiplexIndex) : reference->getValue();
80+
81+
if (currentFunctionId == equalsId) return sourceParam->floatValue() == (float)value;
82+
else if (currentFunctionId == differentId) return sourceParam->floatValue() != (float)value;
83+
else if (currentFunctionId == greaterId) return sourceParam->floatValue() > (float)value;
84+
else if (currentFunctionId == lessId) return sourceParam->floatValue() < (float)value;
85+
else if (currentFunctionId == greaterOrEqualId) return sourceParam->floatValue() >= (float)value;
86+
else if (currentFunctionId == lessOrEqualId) return sourceParam->floatValue() <= (float)value;
87+
else if (currentFunctionId == moduloEqualId) return (float)value[0] == 0 ? false : fmodf(sourceParam->floatValue(), (float)value[0]) == (float)value[1];
88+
else if (currentFunctionId == moduloGreaterId) return (float)value[0] == 0 ? false : fmodf(sourceParam->floatValue(), (float)value[0]) > (float)value[1];
89+
else if (currentFunctionId == moduloLessId) return (float)value[0] == 0 ? false : fmodf(sourceParam->floatValue(), (float)value[0]) < (float)value[1];
90+
else if (currentFunctionId == floorEqualId) return (float)value[0] == 0 ? false : floorf(sourceParam->floatValue() / (float)value[0]) == (float)value[1];
91+
else if (currentFunctionId == floorGreaterId) return (float)value[0] == 0 ? false : floorf(sourceParam->floatValue() / (float)value[0]) >(float)value[1];
92+
else if (currentFunctionId == floorLessId) return (float)value[0] == 0 ? false : floorf(sourceParam->floatValue() / (float)value[0]) < (float)value[1];
93+
else if (currentFunctionId == inRangeId) return sourceParam->floatValue() >= (float)value[0] && sourceParam->floatValue() <= (float)value[1];
94+
else if (currentFunctionId == distGreaterId || currentFunctionId == distLessId
95+
|| currentFunctionId == diffGreaterId || currentFunctionId == diffLessId)
96+
{
97+
prevValues.ensureStorageAllocated(multiplexIndex + 1);
98+
float diff = sourceParam->floatValue() - prevValues[multiplexIndex];
99+
if (currentFunctionId == distGreaterId || currentFunctionId == distLessId) diff = fabsf(diff);
100+
bool result = (currentFunctionId == distGreaterId || currentFunctionId == diffGreaterId) ? diff > (float)value : diff < (float)value;
101+
prevValues.set(multiplexIndex, sourceParam->floatValue());
102+
return result;
103+
}
104+
return false;
101105
}
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,48 @@
1-
/*
2-
==============================================================================
3-
4-
NumberComparators.h
5-
Created: 2 Nov 2016 8:57:34pm
6-
Author: bkupe
7-
8-
==============================================================================
9-
*/
10-
11-
#pragma once
12-
13-
class NumberComparator :
14-
public BaseComparator
15-
{
16-
public:
17-
NumberComparator(Parameter * sourceParam, Multiplex* multiplex);
18-
virtual ~NumberComparator();
19-
20-
const Identifier equalsId = "=";
21-
const Identifier differentId = "!=";
22-
const Identifier greaterId = ">";
23-
const Identifier lessId = "<";
24-
const Identifier greaterOrEqualId = ">=";
25-
const Identifier lessOrEqualId = "<=";
26-
const Identifier moduloEqualId = "%=";
27-
const Identifier moduloGreaterId = "%>";
28-
const Identifier moduloLessId = "%<";
29-
const Identifier floorEqualId = "f=";
30-
const Identifier floorGreaterId = "f>";
31-
const Identifier floorLessId = "f<";
32-
const Identifier diffGreaterId = "d>";
33-
const Identifier diffLessId = "d<";
34-
const Identifier inRangeId = "r";
35-
const Identifier changeId = "ch";
36-
37-
bool isFloat;
38-
Parameter * refParam;
39-
var sourceRange;
40-
Array<float> prevValues;
41-
42-
virtual void compareFunctionChanged() override;
43-
virtual void setupReferenceParam();
44-
45-
virtual bool compareInternal(Parameter* sourceParam, int multiplexIndex = 0) override;
1+
/*
2+
==============================================================================
3+
4+
NumberComparators.h
5+
Created: 2 Nov 2016 8:57:34pm
6+
Author: bkupe
7+
8+
==============================================================================
9+
*/
10+
11+
#pragma once
12+
13+
class NumberComparator :
14+
public BaseComparator
15+
{
16+
public:
17+
NumberComparator(Parameter * sourceParam, Multiplex* multiplex);
18+
virtual ~NumberComparator();
19+
20+
const Identifier equalsId = "=";
21+
const Identifier differentId = "!=";
22+
const Identifier greaterId = ">";
23+
const Identifier lessId = "<";
24+
const Identifier greaterOrEqualId = ">=";
25+
const Identifier lessOrEqualId = "<=";
26+
const Identifier moduloEqualId = "%=";
27+
const Identifier moduloGreaterId = "%>";
28+
const Identifier moduloLessId = "%<";
29+
const Identifier floorEqualId = "f=";
30+
const Identifier floorGreaterId = "f>";
31+
const Identifier floorLessId = "f<";
32+
const Identifier diffGreaterId = "d>";
33+
const Identifier diffLessId = "d<";
34+
const Identifier distGreaterId = "ds>";
35+
const Identifier distLessId = "ds<";
36+
const Identifier inRangeId = "r";
37+
const Identifier changeId = "ch";
38+
39+
bool isFloat;
40+
Parameter * refParam;
41+
var sourceRange;
42+
Array<float> prevValues;
43+
44+
virtual void compareFunctionChanged() override;
45+
virtual void setupReferenceParam();
46+
47+
virtual bool compareInternal(Parameter* sourceParam, int multiplexIndex = 0) override;
4648
};

0 commit comments

Comments
 (0)